Algoritmos voraces (greedy) Dr. Eduardo A. RODRÍGUEZ TELLO CINVESTAV-Tamaulipas 21 de marzo de 2018 Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 1 / 45
Algoritmos voraces (greedy)
Dr. Eduardo A. RODRÍGUEZ TELLO
CINVESTAV-Tamaulipas
21 de marzo de 2018
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 1 / 45
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 2 / 45
Algoritmos voraces (greedy)
Algoritmos voraces (greedy)
Construyen una solución de un problema de optimización paso apaso a través de una secuencia de elecciones que son:
Factibles
Localmente óptimas
Irrevocables
Para algunos problemas, entregan una solución óptima para cadainstancia
Para la mayoría, no lo logran pero pueden ser útiles paraencontrar aproximaciones rápidas
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 3 / 45
Algoritmos voraces (greedy) Aplicaciones de los algoritmos voraces
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 4 / 45
Algoritmos voraces (greedy) Aplicaciones de los algoritmos voraces
Aplicaciones de los algoritmos voraces
Soluciones óptimas:Change-making problem
Minimum spanning tree (MST)
Single-source shortest paths
Simple scheduling problems
Huffman codes
Aproximaciones:Traveling salesman problem (TSP)
Knapsack problem
Otros problemas de optimización combinatoria
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 5 / 45
Algoritmos voraces (greedy) Change-making problem
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 6 / 45
Algoritmos voraces (greedy) Change-making problem
Change-making problem
Dada una cantidad ilimitada de monedas de denominacionesd1, > · · · > dm, dar cambio por la cantidad n con el menor númerode monedas posible
Ejemplo: d1 = 25c, d2 = 10c, d3 = 5c, d4 = 1c y n = 48c
La solución voraz (greedy) es óptima cualquier n y condenominaciones “normales”
Puede no ser óptima para denominaciones arbitrarias
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 7 / 45
Algoritmos voraces (greedy) Minimum spanning tree (MST)
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 8 / 45
Algoritmos voraces (greedy) Minimum spanning tree (MST)
Minimum spanning tree (MST)
Árbol recubridor (spanning tree) de un grafo conectado G: unsubgrafo acíclico conectado que incluye todos los vértices de G
Árbol recubridor mínimo (minimum spanning tree, MST) de ungrafo conectado ponderado G: un árbol recubridor de G con pesototal mínimo
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 9 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 10 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Inicia con un árbol T1 que consiste de un vértice (cualquiera) delgrafo y expande este árbol un vértice a la vez para producir elMST a través de una serie de subárboles T1, T2, · · · , Tn
En cada iteración, construye Ti+1 a partir de Ti al agregar unvértice de G que no está en Ti y que es el más cercano aaquellos de Ti (paso voraz)
Se detiene cuando todos los vértices están incluidos
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 11 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 12 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 13 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 14 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 15 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 16 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 17 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 18 / 45
Algoritmos voraces (greedy) Algoritmo de Prim para MST
Algoritmo de Prim para MST
Requiere un cola de prioridad para localizar el vértice máscercano a aquellos de Ti
Eficiencia:O(n2), grafo representado como una matriz de adyacenciaponderada y la cola de prioridad mediante un arregloO(m log n) grafo representado como una lista de adyacencia y lacola de prioridad mediante un montículo-min
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 19 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 20 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
Ordena los arcos del grafo en forma no-decreciente respecto asus longitudes
Agrega al árbol un arco a la vez para producir el MST a través deuna serie de bosques F1, F2, · · · , Fn−1
En cada iteración, agrega el próximo arco en la lista ordenada amenos que cree un ciclo
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 21 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 22 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 23 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 24 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 25 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 26 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 27 / 45
Algoritmos voraces (greedy) Algoritmo de Kruskal para MST
Algoritmo de Kruskal para MST
El algoritmo de Kruskal parece más fácil que el de Prim, pero esmás difícil de implementar (verificación de ciclos)
Verificación de ciclos: un ciclo se crea si y sólo si el arcoagregado conecta vértices en el mismo componente conexo
La complejidad es O(m logm) = O(m log n) usando lasestructuras de datos adecuadas
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 28 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 29 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
Permite resolver el problema single-source shortest paths
Trabaja de manera similar al algoritmo de Prim, la diferencia es laforma de calcular las etiquetas numéricas: entre los vértices nopresentes en el árbol, encuentra el vértice u con la más pequeñasuma dv + w(u, v)
donde v es un vértice con mínimo camino conocido, dv es lalongitud del camino entre la fuente y v, y w(u, v) es la longitud delarco de v a u
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 30 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 31 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 32 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 33 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 34 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 35 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 36 / 45
Algoritmos voraces (greedy) Algoritmo de Dijkstra
Algoritmo de Dijkstra
No funciona para grafos con pesos negativos
Aplicable a grafos dirigidos y no-dirigidos
Eficiencia:O(n2) para un grafo representado como una matriz de adyacenciaponderada y la cola de prioridad mediante un arregloO(m log n) para un grafo representado como una lista deadyacencia y la cola de prioridad mediante un montículo-min
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 37 / 45
Algoritmos voraces (greedy) Problema de codificación
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 38 / 45
Algoritmos voraces (greedy) Problema de codificación
Problema de codificación
Codificación: asignación de cadenas de bits a caracteres de unalfabeto
Palabras del código: cadenas de bits asignadas a caracteres deun alfabeto
Dos tipos de códigos:De longitud fija (ASCII)De longitud variable (Morse)
Códigos libres de prefijos: ninguna palabra del código es prefijode otra
Problema: si las frecuencias de ocurrencia de los caracteres seconocen, ¿cuál es el mejor código binario libre de prefijos?
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 39 / 45
Algoritmos voraces (greedy) Codigos de Huffman
1 Algoritmos voraces (greedy)Aplicaciones de los algoritmos voracesChange-making problemMinimum spanning tree (MST)Algoritmo de Prim para MSTAlgoritmo de Kruskal para MSTAlgoritmo de DijkstraProblema de codificaciónCodigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 40 / 45
Algoritmos voraces (greedy) Codigos de Huffman
Codigos de Huffman
Cualquier árbol binario con arcos etiquetados con 0 o 1 resulta enun código libre de prefijos de los caracteres asignados a sus hojas
El árbol binario óptimo que minimiza la longitud esperada (el pesopromedio) de una palabra del código puede ser construido de lasiguiente forma:
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 41 / 45
Algoritmos voraces (greedy) Codigos de Huffman
Codigos de Huffman
Inicializar n árboles de un nodo con los caracteres del alfabeto ylos pesos de los arcos con sus frecuencias
Repetir el siguiente paso n− 1 veces:Unir dos árboles binarios con los pesos más pequeños en uno solo(subárboles izq. y der.) y fijar sus pesos como la suma de los pesosde ambos árboles
Marcar los arcos que llevan a los subárboles izq. y der. con 0 y 1,respectivamente.
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 42 / 45
Algoritmos voraces (greedy) Codigos de Huffman
Codigos de Huffman
Dr. Eduardo RODRÍGUEZ T. (CINVESTAV) Algoritmos voraces 21 de marzo de 2018 43 / 45