Algorithm Design Techniques (Spanish)

1,697 views

Published on

Presentation about techniques for Algorithm Design

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,697
On SlideShare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Algorithm Design Techniques (Spanish)

  1. 1. Instituto Tecnológico de Costa RicaDepartamento de Ingeniería en Computación Diseño de Algoritmos Prof. Aníbal Gómez-Estrada Algoritmos y Estructuras de Datos 2 - II Semestre 2010
  2. 2. Motivación •  Diseño de un algoritmo muchas veces se realiza usando intuición peeero no asegura: •  Eficiencia y optimalidad •  Implementabilidad ante una posible “idea rebuscada” •  Eficiencia y facilidad de implementación son importantes en diseño de un algoritmo: •  Con peso mayor o menor dependiendo de la situación •  Técnicas generales a menudo producen algoritmos eficientes para resolución de muchas clases de problemas •  Conocer características, ventajas y desventajas puede ser útil para diseñar algoritmos eficientes… •  ¿Para darle trabajo al profesor? JMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  3. 3. Divide y Vencerás•  Conocida como Divide y Conquista (Divide and Conquer)•  Basados en la heurística “entre más simple mejor”•  Consiste en: •  Dividir un problema original en sub-problemas que sean: •  De la misma naturaleza del problema original •  De menor tamaño •  Combinar (Conquistar) las soluciones de los sub-problemas para construir la solución al problema original: •  Simplificación: cuando se genera un único sub-problema (sin necesidad de combinar su resultado)Generalmente, son algoritmos recursivos…Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  4. 4. Divide y Vencerás (2) •  Esquema General: Se tienen las siguientes propiedades: •  El problema sea divisible en sub- problemas del mismo tipo •  Los sub-problemas sean disjuntos (resolvibles por separado) •  Existe un método directo para resolver “problemas pequeños” •  Combinación de soluciones puede ser trivial (~ búsqueda binaria) o no (~ quick- sort o merge-sort) •  ¿Vemos ejemplos?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  5. 5. Divide y Vencerás (3) •  Consideremos la búsqueda binaria:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  6. 6. Divide y Vencerás (4) •  Ahora, veamos la “idea general” de Merge-Sort:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  7. 7. Divide y Vencerás (5) •  Y el algoritmo de Merge-Sort:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  8. 8. Divide y Vencerás (6) •  Veamos la “idea general” de Quick-Sort:FUNCTION ordenarRapido( lista ) VAR menores, mayorOrIguales IF LENGTH( lista ) <= 1 RETURN lista ELSE SELECCIONE Y REMUEVA UN DATO pivote DE lista FOREACH x IN lista IF x < pivote THEN APPEND x TO menores ELSE APPEND x TO mayorOrIguales RETURN CONCATENATE ( ordenarRapido( menores ), pivote, ordenarRapido( mayorOrIguales ) )Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  9. 9. Divide y Vencerás (7) •  Ahora veamos el algoritmo de Quick-Sort:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  10. 10. Divide y Vencerás (8) •  ¿Hacemos un ejercicio? •  Un montículo ascendente es un árbol binario en el que cada nodo es mayor que sus hijos (si existen) •  ¿Cómo diseñamos un algoritmo Divide y Vencerás para chequear que un árbol es montículo binario? •  ¿Vemos una solución?FUNCTION esMonticulo( nodo ) VAR resultadoIzq, resultadoDer IF nodo.Izq = NULL AND nodo.Der = NULL THEN RETURN TRUE ELSE resultadoIzq = TRUE IF nodo.Izq <> NULL THEN resultadoIzq = nodo.Dato > nodo.Izq.Dato AND esMonticulo(nodo.Izq) resultadoDer = TRUE IF nodo.Der <> NULL THEN resultadoDer = nodo.Dato > nodo.Der.Dato AND esMonticulo(nodo.Der) RETURN resultadoIzq AND resultadoDerMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  11. 11. Divide y Vencerás (9) •  ¿Hacemos otro ejercicio? •  ¿Cómo diseñamos un algoritmo Divide y Vencerás para calcular el máximo elemento de una lista (arreglo)? •  ¿Vemos una solución? FUNCTION maximo( lista ) VAR largo, mitad, resultadoIzq, resultadoDer largo = LENGTH( lista ) IF largo == 1 THEN RETURN lista[0] ELSE mitad = largo / 2 resultadoIzq = maximo(lista[0 ... mitad-1]) resultadoDer = maximo(lista[mitad ... largo-1]) IF resultadoIzq > resultadoDer THEN RETURN resultadoIzq ELSE RETURN resultadoDerMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  12. 12. Divide y Vencerás (10) •  ¿Qué tal un ejercicio más? •  La distancia de Levenshtein permite calcular la cantidad mínima de operaciones de edición (inserción, borrado o reemplazo a nivel de caracteres) para transformar una hilera x en otra hilera y •  También mide cuán parecidas son las hileras. Por ej: Levenshtein("kitten" , "sitting") = 3FUNCTION levenstein( hilera1, hilera2 ) VAR costo IF LENGTH( hilera1 ) == 0 THEN RETURN LENGTH( hilera2 ) ELSE IF LENGTH( hilera2 ) == 0 THEN RETURN LENGTH( hilera1 ) ELSE IF hilera1[0] == hilera2[0] THEN costo = 0 ELSE costo = 1 RETURN MIN ( levenstein(REST(hilera1), REST(hilera2)) + costo, //Reemplazo levenstein(REST(hilera1), hilera2) + 1, //Inserción levenstein(hilera1, REST(hilera2)) + 1 //Borrado ) Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  13. 13. Algoritmos Voraces•  Conocidos como Algoritmos Ávidos (Greedy Algorithms)•  Basados en heurística de “usar la mejor opción en un momento dado” para obtener una buena solución general•  Consiste en: •  Usa la opción “localmente óptima” en cada paso. Si: •  Lleva a la solución del problema (Chequea), se elige •  Sino, usa la “siguiente mejor opción” y vuelve a chequear •  Si el conjunto de “mejores opciones escogidas” soluciona el problema, el algoritmo termina•  Dar cambio de ¢63 con monedas de ¢25, ¢10, ¢5 y ¢1: •  2*25 + 1*10 + 3*1 = 63 (6 monedas) •  Produce la lista más corta de monedas J, peero…Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  14. 14. Algoritmos Voraces (2)•  NO todo enfoque ávido llega a dar el mejor resultado: •  Para ciertos problemas no existen algoritmos ávidos conocidos que produzcan soluciones óptimas…•  Dar cambio de ¢15 con monedas ¢11, ¢5, y ¢1: •  1*11 + 4*1 = 15 (5 monedas) •  La solución óptima es => 3*5 = 15 (3 monedas) L•  Sin embargo, dan buena solución con alta probabilidad J… •  Pueden ser útiles cuando la única forma de alcanzar la solución optimal sea mediante el uso de una técnica de búsqueda exhaustiva•  Usualmente, proveen un buen rendimiento en problemas de optimización (comparado con el resultado y simpleza)•  Generalmente, son algoritmos iterativos y nunca re- consideran las decisiones tomadas…Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  15. 15. Algoritmos Voraces (3) •  Esquema General: Se tiene las siguientes propiedades: •  Solución al problema dispone de un conjunto de candidatos •  Durante el algoritmo, los candidatos “se clasifican” en 2 conjuntos: * Aceptados para la solución * Rechazados para la solución •  Existe forma de determinar si el conjunto de aceptados es solución •  Existe manera de seleccionar el candidato “más prometedor” •  Antes de aceptar un candidato, se chequea SI contribuye a la soluciónMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  16. 16. Algoritmos Voraces (4) •  En el caso de dar cambio de monedas, tendríamos… •  ¿Vemos más ejemplos?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  17. 17. Algoritmos Voraces (5)•  Sea G = (N, A), un grafo conectado (NO dirijido) donde: •  N es el conjunto de todos los nodos •  A es el conjunto de aristas (u, v, w) tal que u y v son nodos de N y w es el peso asociado a la conexión •  Existe un camino entre cualquier par de vértices (al menos)•  Un árbol de expansión (de recubrimiento o Spanning Tree) consiste en un árbol k-ario que: •  Contiene todos los nodos de G (es decir, N) •  Solamente está compuesto de aristas de G (es decir, A)•  El “costo del árbol” es la suma de los pesos de “las aristas”…Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  18. 18. Algoritmos Voraces (6)•  El problema de encontrar un árbol de expansión mínima consiste en encontrar el conjunto de aristas que comunican todos los nodos tal que el costo del árbol es mínimo •  Por ejemplo, útil para obtener el costo mínimo para conectar/cablear una red comunicaciones (carreteras/teléfonos) •  O para resolver laberintos ;)…•  Las características del problema ajustadas al “método voraz” •  Los candidatos son las aristas del grafo G •  La función de solución consiste en determinar si el conjunto de aristas seleccionadas "cubre" todos los nodos de G •  La función de selección puede ser la arista con peso mínimo (objetivo) •  Una arista puede ser factible si NO produce un cicloMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  19. 19. Algoritmos Voraces (7)•  Algoritmo de Prim utiliza el “método voraz” para encontrar el árbol de expansión mínima: •  Comienza con un conjunto de aristas F vacío (F = φ) y un conjunto de nodos Y con un nodo arbitrario (Y = {n1}) •  Selecciona la arista “más corta” amin conectando cualquier nodo de Y con otro nodo n2 •  Si NO causa ciclo, añade la arista a F (es decir, F = F ∪ {amin}) y n2 a Y (es decir, Y = Y ∪ {n2}) •  Repite el proceso hasta que todos los nodos sean visitados (Y = N)•  ¿Lo vemos más gráficamente?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  20. 20. Algoritmos Voraces (8)•  Veamos la “idea general” del algoritmo de Prim:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  21. 21. Algoritmos Voraces (9)•  Posible implementación del algoritmo de Prim usando matrices de adyacencia: •  G y F se representan con matriz de adyacencia •  distmin[i] tiene la distancia mínima entre Y y el nodo i de G •  masproximo[i] dice con cuál nodo de Y se tiene esa distanciaMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  22. 22. Algoritmos Voraces (10)•  Algoritmo de Kruskal también usa un “método voraz” para encontrar el árbol de expansión mínima: •  Comienza con un conjunto de aristas F vacío (F = φ) y con un conjunto Y de conjuntos disjuntos Yi, cada uno con UN nodo del grafo (Y = { Yi = {ni} }) •  Selecciona la arista “más corta” amin conectando dos nodos n1 y n2 •  Si n1 y n2 están en conjuntos diferentes Y1 y Y2, añade la arista a F (es decir, F = F ∪ {amin}) y fusiona los conjuntos que contienen a n1 y n2 (es decir, Y = (Y ∪ {Y1 ∪Y2}) - Y1 - Y2) •  Repite el proceso hasta que todos los nodos están en un solo conjunto…•  ¿Lo vemos más gráficamente?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  23. 23. Algoritmos Voraces (11)•  Veamos la “idea general” del algoritmo de Kruskal:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  24. 24. Algoritmos Voraces (12)•  Posible implementación del algoritmo de Kruskal usando matrices de adyacencia:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  25. 25. Algoritmos Voraces (13)•  ¿Hacemos un ejercicio?•  Dados N objetos con pesos wi y valores de beneficio vi positivos y una mochila con capacidad de peso "máxima" W •  Los objetos son fraccionables y moldeables•  ¿Cómo diseñamos un algoritmo Voraz para encontrar la composición de la mochila (las proporciones de los N elementos) de forma que la suma de los beneficios de los elementos escogidos sea máxima?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  26. 26. Algoritmos Voraces (14)•  ¿Se rinden?  Pero, con ¿qué criterio seleccionar el “mejor objeto pendiente”? ¿Algún otro criterio? ¿cuál escogemos? ¿Cómo calcularlo?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  27. 27. Algoritmos Voraces (15)•  Otros problemas solucionables con algoritmos voraces: •  Problema del Agente Viajero (PAV): dado un vértice origen, determinar el camino más corto al resto de vértices en un grafo dirigido y con pesos en cada arista (Dijsktra) •  Para nodo actual, siempre usa óptimo local (arista de menor peso) •  En este caso, siempre provee óptimo global •  Problema de Atención a Clientes: dado un servidor (cajero o CPU), minimizar el tiempo de espera promedio que espera cada cliente (cliente o tarea/proceso) en ser atendido. El tiempo de atención se conoce a priori… •  En cada iteración, escoje el cliente con menor tiempo de atención •  Problema del Recorrido del Caballo (Ajedrez): dado un tablero de ajedrez y la posición inicial, determinar si es posible (o no) que un caballo recorra todas las posiciones del tablero sin duplicar ninguno •  En cada iteración, el siguiente movimiento puede ser el que provea la menor cantidad de celdas aún no visitadas •  En este caso, no siempre provee una buena solución Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  28. 28. Programación Dinámica•  Aunque definición más natural del problema sea recursiva, algunas veces la solución mediante Divide y Vencerás: •  Tiene tiempo de ejecución de orden exponencial •  Tiene “solapamiento” en solución de los sub problemas (Recalcular)•  Basados en la construcción de una tabla de resultados intermedios (evitar resolver sub-problemas varias veces)•  Aunque la forma de un algoritmo dinámico puede variar, un esquema común consiste en: •  Rellenar “una tabla” de resultados •  Establecer un orden en el cual se hacen las entradasMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  29. 29. Programación Dinámica (2)•  Por ej, para Fib(n) se podría tener: •  Complejidad Lineal (y no Exponencial!)•  Aunque se aplica por razones deeficiencia, su principal uso se da enproblemas de optimización: •  Usualmente, tienen “varias soluciones” peeero lo que interesa es la solución de valor óptimo (máximo o mínimo)•  De hecho, basada en el principio: •  “En una secuencia de decisiones óptima cada subsecuencia también es óptima” •  Programación dinámica puede no ser aplicable en problemas que el principio no se puede aplicar…Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  30. 30. Programación Dinámica (3) •  Esquema General: •  Planteamiento de la solución como una sucesión de decisiones (y verificación del principio de optimalidad) •  Definición recursiva de la solución •  Cálculo del valor de la solución óptima de forma ascendente (bottom-up), mediante una tabla donde se almacenan soluciones a problemas parciales para reutilizar cálculos •  Construcción de la solución óptima con la información de la tabla anteriorMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  31. 31. Programación Dinámica (4) •  Ahora consideremos el problema de dar cambio. Sea: •  n = la cantidad de tipos distintos de monedas •  L = la cantidad a devolver (o N) •  T[1..n] = el valor de cada tipo de moneda del sistema (o d[i]) •  C(i, j) = la cantidad mínima de monedas para devolver la cantidad j restringiéndose a los tipos T[1], T[2], ..., T[i] (1 ≤ i ≤ n, 1 ≤ j ≤ L) •  Si no se puede conseguir dicha cantidad entonces C(i,j) = ∞ •  La definición recursiva del problema:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  32. 32. Programación Dinámica (5) •  Un algoritmo dinámico para el problema de dar cambio es:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  33. 33. Programación Dinámica (5) •  Ahora consideremos el problema la serie mundial de beisbol: •  Sea A y B, dos equipos que tienen un enfrentamiento para ver quien es el primero de ganar n partidos •  Sea P(i, j), la probabilidad de que A gane el partido dado que A y B necesitan i y j partidos para ganar la serie, respectivamente •  La definición recursiva del problema es: •  Note que en P(2,3), se calculan P(1,3), P(2,2) en los que: •  P(1,2) se calcularía dos veces L…Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  34. 34. Programación Dinámica (6) •  Un algoritmo dinámico para encontrar la solución es:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  35. 35. Programación Dinámica (7) •  Ahora volvamos a la distancia de Levenshtein: •  Sea m y n, el tamaño de dos hileras u y v, respectivamente •  Sea OB(m,n), la función que calcula la distancia de Levenshtein •  La definición recursiva del problema es: •  ¿ Cómo hacemos para utilizar programación dinámica?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  36. 36. Programación Dinámica (8) •  Veamos el algoritmo para la distancia de Levenshtein:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  37. 37. Programación Dinámica (9)•  Otros problemas solucionables con programación dinámica: •  Algoritmo de Dijsktra •  Algoritmo de Floyd •  Problema de la Mochila •  …•  Generalmente, los algoritmos de programación dinámica son: •  Eficientes, aunque puedan realizar cálculos que no se ocupen para la solución final •  Utilizan un enfoque ascendente (bottom-up) que pueden resultar en implementaciones no tan simples (poco naturales)•  Combinar Divide y Vencerás y Programación Dinámica! ¿Cómo? •  “Memoización”: funciones con memoria!Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  38. 38. Vuelta Atrás•  Conocida como Retroceso (Backtracking)•  Ciertos problemas requieren un estudio exhaustivo de las opciones para determinar una o todas las posibles soluciones•  Proporciona una forma sistemática de “generar todas las posibles soluciones” a medida que sean resolubles en etapas•  Se asemeja a un recorrido en profundidad dentro de un árbol cuya existencia sólo es implícita/ideal (un Árbol de Expansión) •  El árbol se recorre construyendo soluciones parciales a medida que el (nivel del) recorrido avanza •  En cada etapa (nivel) puede suceder: •  Lleve al éxito, si se llega a una solución (una hoja del árbol) •  NO lleve al éxito, si en alguna etapa de la solución parcial el recorrido no se puede completar (nodos de fracaso)Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  39. 39. Vuelta Atrás (2)•  Ante un nodo fracaso, el algoritmo retrocede en su recorrido: •  Elimina elementos añadidos en cada etapa a partir de ese nodo. Pero.. •  Si existe caminos aún no explorados, el recorrido continúa por ellos•  Vuelta Atrás NO sigue reglas fijas al buscar las soluciones: •  Proceso de prueba y error que podría crecer exponencialmente… •  Gran parte de su eficiencia radica en descartar (a priori) los nodos que NO llegarán a ser soluciones de ninguna manera (“podar el árbol”)•  En un tablero 4x4, el problema de colocarlas reinas de forma tal que NO “se coman”: R R R R Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  40. 40. Vuelta Atrás (3) •  Esquema General (Recursivo): Se tiene las siguientes propiedades: •  La solución puede expresarse como una n-tupla [x1, x2, ..., xn] •  En cada etapa, cada componente xi se elige de un conjunto finito de opciones •  Cada etapa representa un nivel en el árbol de expansión Dependiendo del problema, hay que definir: •  La n-tupla que representa la solución, y el significado de cada xi (tomando en cuenta la descomposición en etapas) •  Las restricciones a cumplir en cada etapa (limitar el árbol de expansión)Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  41. 41. Vuelta Atrás (4)•  Veamos el problema de las 8 reinas:•  Numeramos las reinas del 1 al 8. La solución se representa con una 8- tupla X=[x1, x2, ..., x8] donde cada xi indica la columna donde se coloca la reina de la i-ésima fila (Por ej. [4,6,8,2,7,1,3,5] es una solución)•  Posibles restricciones al problema: •  Ocho posibles columnas: 1 ≤ xi ≤ n, n = 8 •  Diferentes filas y columnas: xi <> xj ∀ xi, xj ∈ X y i <> j •  Diferentes diagonales: |x - x’| <> |y - y’| Siendo (x,y) y (x’,y’) las coordenadas de dos reinas•  ¿Cómo hacemos el algoritmo? Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  42. 42. Vuelta Atrás (5)•  Un algoritmo recursivo para el problema de las 8 reinas:•  ¿Y si queremos reportarTODAS las soluciones?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  43. 43. Vuelta Atrás (6)•  Ahora veamos el problema del laberinto:•  Una matriz puede representar unlaberinto cuadrado. Cada posicióntiene un entero que indica si lacasilla es transitable (0) o no (∞)•  Casillas [1,1] y [n,n] son la entraday salida del laberinto (transitables)•  El problema consiste encontrar uncamino (si existe) para ir de la entradaa la salida…•  ¿Ideas para el algoritmo? Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  44. 44. Vuelta Atrás (7)•  ¿Saben algo acerca del problema de colorear grafos?: •  Un grafo conexo siempre tiene un camino entre todo par de nodos… •  Dado un número m > 0, el problema de “colorear el grafo”, consiste en asignar un número 1 ≤ i ≤ m, de forma tal que dos nodos adyacentes no tengan asignados el mismo número•  ¿Y el algoritmo?•  Solución se expresa comouna n-tupla X=[x1, x2, ..., xn]donde cada xi indica el colordel i-esimo nodo•  Cada etapa k el algoritmodecide que color asignar alk-esimo nodo… Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  45. 45. Vuelta Atrás (8)•  ¿Y para colorear el grafo con la mínima cantidad de colores?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  46. 46. Vuelta Atrás (9)•  Veamos ahora el problema de la asignación de tareas: •  Dadas n personas y n tareas, se debe asignar una tarea por persona •  Tarifas[i, j] define el coste de asignar la tarea j a la persona i •  El problema consiste en minimizar el coste de la asignación•  ¿Sugerencias para representar la solución? •  Solución se expresa como una n-tupla X=[x1, x2, ..., xn] donde cada xi indica la tarea asignada a la i-esima persona•  ¿Cómo minimizamos el coste de la asignación? •  El algoritmo explora TODAS las soluciones pero lleva rastro de la solución “más barata”•  ¿Vemos el algoritmo?Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  47. 47. Vuelta Atrás (10)•  ¿O lo dejamos para la casa? •  Es muy fácil, mejor no :p…Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  48. 48. Aleatorización•  Conocida como algoritmos aleatorizados (Randomization)•  Algoritmo determinístico: •  Siempre produce el mismo resultado para una entrada particular •  Complejidad temporal del peor caso puede no ser tan buena L •  Forma de “evitar” el peor caso puede impactar la simplicidad L•  Consideremos QuickSort: •  Rendimiento óptimo depende de la selección del pivote •  Para combatir peor caso, escogencia determinista del pivote podría: •  Buscar mediana entre todos: impacta rendimiento! •  Buscar mediana entre tres: NO necesariamente evita el peor caso•  Un algoritmo aleatorizado escoge el pivote aleatoriamente!Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  49. 49. Aleatorización (2)•  Algoritmo aleatorizado: •  Emplea un grado de aleatoriedad (NO determinísmo) •  Preserva simplicidad y combate peor caso “sin” impactar rendimiento •  Sin embargo, NO siempre produce: •  El mismo resultado para una entrada particular •  Una solución óptima•  Tipos de algoritmos aleatorizados: •  Las Vegas: SIEMPRE produce un resultado correcto! •  Evita uso excesivo de recursos en el “corner case” y preservan simplicidad •  Poca probabilidad de usar más recursos de lo esperado •  Monte Carlo: SIEMPRE usa la misma cantidad de recursos! •  Evita uso excesivo de recursos y preserva simplicidad •  Poca probabilidad de producir resultado no-ٕóptimoMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  50. 50. Aleatorización (3)•  Problema del Corte-Mínimo en Multi Grafos (MinCut): •  Un multigrafo permite múltiples aristas entre dos nodos •  Consiste en encontrar el conjunto mínimo de aristas en un multi-grafo (conexo y no-dirigido) cuyo borrado deje el grafo “partido” en dos o más componentes (no conectadas)•  ¿Ideas para el Algoritmo?•  Más simple que deterministas J•  Alta probabilidad de corte mínimoMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  51. 51. Aleatorización (4)•  Problema del Chequeo Primalidad: •  Determinar si un número dado es primo o no •  No se ha descubierto algoritmo acotable con tiempo polinomial L•  Algoritmo aleatorizado: •  Complejidad de tiempo polinomial J •  Si resultado es “NO es primo”, el número NO es primo •  Si resultado es “SI es primo”, la probabilidad de que NO sea depende de las iteraciones•  Algunas Observaciones: •  Si n = 2 => “SI es primo” •  Si n es par, “NO es primo” •  Si n es primo, n divide a 2n-1 -1 (i.e. 2n-1 mod n = 1) n=17, 216 -1 = 65535 = 17 * 3855 n=23, 222 -1 = 4194303 = 23 * 182361 •  Peero.. n es pseudo-primo a base 2, si 2n-1 mod n = 1 y n NO es primo n=341, 2340 mod 341 = 1 PEERO… n=341 =11 * 31 LMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  52. 52. Aleatorización (5)•  Más Observaciones: •  n es pseudo-primo a base a, si an-1 mod n = 1 y n NO es primo n=341 y a=3, 3340 mod 341 = 56 != 1 n = 341, a = 3 •  Teorema (Pequeño) de Fermatt: Si n es primo y 0 < a < n, an-1 mod n = 1 J•  ¿Ideas para un Algoritmo Aleatorizado?:Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  53. 53. Aleatorización (6)•  ¿Me dan tiempo de ver otro ejemplo?•  Prometo que va a estar divertido… JMotivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  54. 54. Referencias1.  Aho, Alfred V., John E. Hopcroft y Jeffrey D. Ullman. Estructuras de Datos y Algoritmos. Addison Wesley Longman: México, 1988 (Capítulo 10)2.  http://www.lcc.uma.es/~av/Libro/Motivación | Divide y Vencerás | Voraz | Programación Dinámica | Vuelta Atrás | Aleatorización | Referencias Instituto Tecnológico de Costa Rica – Algoritmos y Estructuras de Datos 2 – Diseño de Algoritmos – II Semestre 2010
  55. 55. Instituto Tecnológico de Costa RicaDepartamento de Ingeniería en Computación Diseño de Algoritmos Prof. Aníbal Gómez-Estrada Algoritmos y Estructuras de Datos 2 - II Semestre 2010

×