Minimum Spanning Tree (Árbol de Expansión Mínima)

Slides:



Advertisements
Presentaciones similares
GRAFOS ESTRUCTURAS DE DATOS.
Advertisements

1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Definiciones: conjuntos, grafos, y árboles
GRAFOS HUGO ARAYA CARRASCO.
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Ejemplos de Grafos: Red de tráfico con caminos y cruces.
Definiciones: conjuntos, grafos, y árboles
Ordenamiento, Heapsort y Colas de prioridad
Árbol recubridor mínimo Distancias
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”

Analisis y Diseño de Algoritmos Tema: Grafos
Diseño y análisis de algoritmos
Agustín J. González ELO-320: Estructura de Datos y Algoritmos
1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos 1er. Sem
Árboles de Búsqueda Binaria
Tópicos I Árboles, montículos y grafos
1 Single-Source Shortest Paths “Camino más corto desde/hacia una fuente” Agustín J. González ELO320: Estructura de Datos y Algoritmos 1.er. Sem
Minimum Spanning Tree (Árbol de Expansión Mínima)
Definiciones: conjuntos, grafos, y árboles
1 Flujo Máximo Agustín J. González ELO320: Estructura de Datos y Algoritmos.
Agustín J. González ELO-320: Estructura de Datos Y Algoritmos
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
1 Árboles de Búsqueda Binaria Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Minimum Spanning Tree (Árbol de Expansión Mínima)
Heap Fibonacci heap de Fibonacci es una estructura de datos similar a un heap binomial pero con mejor coste amortizado. se utiliza para mejorar el tiempo.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
GRAFOS ESTRUCTURA DE DATOS. INTRODUCCION Los grafos son estructuras de datos Representan relaciones entre objetos Relaciones arbitrarias, es decir No.
Un grafo consta de un conjunto de vértices y un conjunto de aristas. Cada arista de un grafo se especifica mediante un par de vértices. Denotemos al conjunto.
BÚSQUEDA EN ESPACIOS DE ESTADOS Espacio de estados: modelo del mundo representado por un grafo Espacio de estados: modelo del mundo representado por un.
Estructura de Datos Luis Humeau Waldi Saturno
BÚSQUEDA DE SOLUCIONES Soluciones no Informadas (cont.) Dra. Myriam Hernández A.
ALGORITMO DE DIJKSTRA BANDA DÍAZ ANA KARINA SUAREZ BARON SINDY TATIANA.
Curso Sygma. Grafos Universidad San Buenaventura Cali.
LOGICA Y MATEMATICA COMPUTACIONAL
PLANIFICACIÓN DE LAS RUTAS DE DISTRIBUCIÓN
Ejemplos de Grafos: Red de tráfico con caminos y cruces.
Tema 3 Árboles. Conceptos Generales. Curso 2014/2015 ETSISI UPM.
Licenciatura en Contaduría Tema:
TAD’s ARBOLES GENERALIZADOS
Clase Lista C++ Estándar
Estructuras de Datos MC Beatriz Beltrán Martínez Primavera 2016
Heaps.
Vectors (Vectores)‏ Agustín J. González ELO329.
Estructuras de datos y algoritmos
TEORÍA DE GRAFOS -Algoritmo de Dijkstra -Algoritmo de Primm -Algoritmo de Kruskal Integrantes:
Análisis de redes Por: Alexander Miss.
Introducción a las estructuras de datos
Análisis de redes. 3.4 Problema de flujo máximo.
Teoría de Redes Ing. Douglas Vergara. Concepto básico Un arco es dirigido si permite el flujo positivo en una dirección y un flujo cero en la dirección.
Árboles clase 6 Apoyo de Práctica. Resumen ●Árboles ○Concepto ○Características ○Dinámica ○Recorridos o barridos. ●Ejercicio Sugerido.
Agentes que planifican. 1. Introduccion En la actualidad todas la mayoría de actividades en un empresa o compañía, como en el hogar o el medio ambiente.
GRAFOS ESTRUCTURAS DE DATOS.
Curso de Programación Estructurada
Estructuras Dinámicas
Listas ligadas Dra. María de Lourdes López García
ANGULO YOMAIRA QUINTERO MARIA PAEZ MARIAM
OPTIMIZACIÓN EN REDES EN ALGUNOS PROBLEMAS DE OPTIMIZACIÓN PUEDE SER ÚTIL REPRESENTAR EL PROBLEMA A TRAVÉS DE UNA GRÁFICA: ruteo de vehículos, distribución.
UNIDAD 3 LISTAS LISTAS CIRCULARES Integrantes: Galmiche Vera Orlando Mandujano González Ramón Enrique Salvador Magaña Kelyn Osmara.
GRAFOS ESTRUCTURA DE DATOS. INTRODUCCION Los grafos son estructuras de datos Representan relaciones entre objetos Relaciones arbitrarias, es decir No.
Arboles. Árboles ¿Qué son? Son Estructuras de datos “No lineales”” ¿Para que se utilizan? Representar Fórmulas Algebraicas Organizar Objetos Inteligencia.
ÁRBOLES DE EXPRESION. Un árbol de expresión sirve para evaluar expresiones del tipo: (a+b)*c/d Para que un árbol represente una expresión se deben tomar.
Algoritmos de caminos más cortos
Árboles Binarios Estructuras de Datos.
Luis Manuel Monroy García Matemáticas discretas Ingeniería de Sistemas Universidad Simón Bolívar.
Árboles Binarios Estructuras de Datos. Las estructuras dinámicas son las en la ejecución varia el número de elementos y uso de memoria a lo largo del.
UNIVERSIDAD NACIONAL DEL CENTRO DEL PERU FACULTAD DE INGENIERIA DE MINAS HUANCAYO I MODELO DE REDES Ing. Eli Teobaldo Caro Meza CURSO: INVESTIGACION.
Grafos. Concepto: Un Grafo no es más que un conjunto de nodos o vértices que se encuentran relacionados con unas aristas. Además, los vértices tienen.
Transcripción de la presentación:

Minimum Spanning Tree (Árbol de Expansión Mínima) Agustín J. González ELO320: Estructura de datos y Algoritmos

Introducción Lo que realmente se minimiza es el peso del árbol obtenido. No se minimiza el número de arcos, que se puede demostrar es igual a |V|-1. Hay varios problemas en los que se desea minimizar la interconexión de varios puntos. Por ejemplo en la confección de circuitos impresos. El problema consiste en minimizar la suma de todos los pesos de los arcos que interconectan todos los nodos de un grafo no dirigido. Hay dos algoritmos que resuelven este problema: Algoritmo de Kruskal y algoritmo de Prim (parecido al de Dijkstra - por verse). Ambos algoritmos corren en tiempo O(E lg V). Si se usa un heap especial (de Fibonacci) el algoritmo de Prim puede correr en O(E + V lg V) lo cual presenta ventajas cuando |V| << |E| Ambos algoritmos son ejemplos de la heurística de optimización llamada “greedy” (avaro, acaparador)

Ejemplo de árbol de expansión de mínimo peso

Una estrategia de avance

Algoritmo Genérico La idea es ir haciendo crecer el número de nodos que pertenecen al árbol de peso mínimo. Debemos ir buscando nodos y arcos que puedan ser agregados y satisfagan la propiedad de mantener mínimo peso. Generic-MST(G, w) /* w es la función de peso */ A = {}; while( A no forma un “spanning Tree” ) Encontrar un arco (u,v) que es seguro para A; A = A +{(u,v)}; return A;

Algoritmo de Prim (1957 (Jarník 1930)) MST-PRIM(G, w, r) /* G es el grafo, w es la función de peso, y r es el nodo por el cual empezamos (puede ser cualquiera del grafo) */ Q = V[G]; /* Cola de prioridad con vértices fuera del árbol */ for (cada u en Q) key[u] = infinito; /* key es el peso mínimo para conectar un nodo al árbol */ key [r] = 0; /* raíz del árbol */ p [r] = NIL; while (Q != {} ) u = Extract_Min(Q); for (cada v en Adj [u] ) if ( v está en Q && w(u,v) < key [v] ) p [v] = u; key [v] = w(u,v);

Ejemplo del algoritmo de Prim

Comentarios sobre algoritmo de Prim La eficiencia de este algoritmo depende de cómo se implemente la cola de prioridad Q. Si se implementa con un heap binario se obtiene que ese algoritmo corre en tiempo O(V lg V + E lg V) = O(E lg V) Si se usa un heap de Fibonacci (no visto en el curso) el tiempo es O(E+V lgV), lo cual es una mejora cuando |V| << |E|

Algoritmo de Kruskal (1956) Aspecto previo: Conjuntos disjuntos El algoritmo de Kruskal queda mejor definido si utilizamos conjuntos en su descripción. Por ello veremos la definición de un tipo de datos para conjuntos disjuntos. Consideremos una colección , S, de conjuntos disjuntos S = {S1,S2,S3, .. Sk}. Cada conjunto será representado por un representante, el cual es un elemento cualquiera del conjunto. Deseamos disponer de las siguientes operaciones: Make_Set(x): crea un nuevo conjunto cuyo único elemento es apuntado por x (es así el representante). Union(x, y): Une a los conjuntos dinámicos que contienen a x e y en un nuevo conjunto. Como la colección de conjuntos es disjunta, esto destruye los conjuntos originales. Find_Set(x): retorna un puntero al representante del conjunto que contiene x.

Aplicación de Conjuntos disjuntos: Obtención de las componentes conexas en grafos no dirigidos Connected_Components(G) for (cada vértice v en V[G] ) Make_Set(v); for (cada arco (u,v) en E [G]) Union(u,v); Ejemplo: Considerar que los arcos se procesan en el orden: (b,d); (e,g); (a,c); (h,i); (a,b); (e,f); (b,c) f h j a b e c d g i

Posible implementación de Conjuntos disjuntos usando listas enlazadas Se puede tomar como base las listas simplemente enlazadas, e incorporando en cada nodo un puntero al primer nodo. La lista se crea con un elemento. No hay inserción y eliminación. La unión es juntar ambas listas. Find retorna el puntero al primer nodo. Typedef struct disjoint_set_node { struct disjoint_set_node * representante; struct disjoint_set_node * next; elementType element; } DISJOINT_SET_NODE;

Visualización gráfica del conjunto Typedef struct disjoint_set_node { struct disjoint_set_node * representante; struct disjoint_set_node * next; elementType element; } DISJOINT_SET_NODE; Las operaciones Make_Set, Find_Set, y Union, pueden ser implementadas en forma más o menos directa. c h e b a

Algoritmo de Kruskal (1956) MST_Kruskal (G,w) { A = {}; for (cada vértice v en V[G] ) Make_Set(v); Ordenar los arcos de E según peso w no decreciente; for ( cada arco (u,v) en E, en orden no decreciente de peso) if ( Find_Set(u) != Find_Set(v) ) { A = A  {(u,v)}; Union(u,v); } }

Algoritmo de Kruskal :Ejemplo

Algoritmo de Kruskal :Ejemplo (continuación)