Diseño de Algoritmos
                          Examen Final




            Curso de Nivelación de Algoritmos
                                     Clase 5


                           Lic. Ernesto Mislej
                          emislej@dc.uba.ar

Maestría y Carrera de Especialización en Explotación de Datos y Descubrimiento
                                de Conocimiento


                          23 de marzo de 2008




                     Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                          Examen Final


Diseño de Algoritmos


      Es de esperar que con el estudio y formalización de algoritmos,
      también se hayan desarrollado técnicas generales para la
      producción de soluciones algoríticas.
      El primer punto es preguntarse si el problema es un problema
      de búsqueda, o uno de optimización.
      Veamos nuevamente el problema ”Llegar a Ciudad
      Universitaria desde el centro.”
      ¿A qué llamamos solución?
          ¿Existe una ruta que una a esos 2 puntos?.
          ¿Encontrar la ruta de costo mínimo que una a esos 2 puntos?.




                     Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
               Examen Final




¿Saben cómo se come a un elefante?




          Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
               Examen Final




¿Saben cómo se come a un elefante?
        De a pedacitos. . .




          Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                                  Examen Final


Divide y reinarás

   Ejemplo
   Programación de un fixture todos–contra–todos.
       La clave es encontrar una división del problema.
       Supongamos 2 grupos de 4 jugadores y tambión que entre los
       integrante de cada grupo ya se enfrentaron.
       Ahora hace falta que cada integrade de los grupos jueguen
       entre sí. Podría ser así:
             1-5,   2-6,   3-7,   4-8;
             1-6,   2-7,   3-8,   4-5;
             1-7,   2-8,   3-5,   4-6;
             1-8,   2-5,   3-6,   4-7;
       Ahora podemos usar la reducción recursiva, hasta el caso base,
       que es un fixture para 2 jugadores!

                             Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                           Examen Final


Divide y reinarás

   Ejemplo
       Suponemos para 8 jugadores.
       Ver una tabla T de n filas por n-1 columnas. T[i,j] responde al
       jugador que debe enfrentar i, en el día j.
       El fixture para los jugadores 1..4 está en la esquina superior
       izquierda.
       El fixture para los jugadores 5..8 está en la esquina inferior
       izquiera y responde al mismo fixture de los jugadores 1..4, pero
       sumándoles el número 4!.
       Ya se armó el fixture para los primeros 3 días.
       Resta enfrentar a los del primer grupo con los del segundo y
       eso ya lo tenemos resuelto. . .

                      Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                           Examen Final


Divide y reinarás



                        2     3     4       5     6    7     8
                        1     4     3       6     7    8     5
                        4     1     2       7     8    5     6
                        3     2     1       8     5    6     7
                        6     7     8       1     4    3     2
                        5     8     7       2     1    4     3
                        8     5     6       3     2    1     4
                        7     6     5       4     3    2     1




                      Lic. Ernesto Mislej       Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                 Examen Final




El árbol que no nos deja ver el bosque




            Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                           Examen Final


Búsqueda local


   Ejemplo
   Una oficina de social-dating, consejeras amorosas, nos piden ayuda
   para encontrar parejas compatibles.
    1. Suponemos un conjunto igual de mujeres y varones.
    2. Cada unión tiene un nivel de compatibilidad.
    3. Aleatoriamente unimos a una mujer con algún varón.
    4. Iteramos por pares de parejas: Si vemos que si hacemos un
       cambio el nivel de compatibilidad general aumenta, lo
       hacemos.
    5. Lo hacemos hasta que no podemos mejorar más.



                      Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                            Examen Final


Búsqueda local




   Ejemplo
   Otro enfoque goloso (o ansioso)
       Unimos a la pareja de mayor compatibilidad.
       Iteramos hasta que no queden parejas.
       Existen estrategias de controlar el estado inicial.




                       Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                            Examen Final


Búsqueda Exhaustiva



   Ejemplo
   Tenemos que salir de un laberinto, sin ciclos.
    1. Caminamos derecho. . .
    2. Si encontramos la salida, obviamente salimos.
    3. Si encontramos una bifurcación, guardamos las alternativas en
       una pila, elegimos la opción del tope de la pila y volvemos a 1.
    4. Si encontramos una pared, elegimos la siguiente alternativa de
       la pila y volvemos a 1.




                       Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                          Examen Final


Búsqueda Exhaustiva



   Ejemplo
      Se plantea un árbol de opciones.
      La manera de guardar y elegir las opciones cada paso va a
      guiar la búsqueda.
      Búsquedas a lo profundo (DFS) y a lo ancho (BFS).
      En el peor de los casos, usé todas las combinaciones.




                     Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                        Examen Final


Búsqueda Exhaustiva
   Puzzle 3x3:




                   Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                         Examen Final


Diseño de Algoritmos




   Ejemplo
      Encontrar un agrupamiento de un conjunto de datos, o
      clustering.
      Veamos cómo resolver el siguiente problema para cada
      acercamiento.




                    Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                          Examen Final


Examen Final



      El examen tendrá la forma de parcial domiciliario.
      El examen es individual.
      Consiste en definir una serie de conceptos comentados en
      clase. Por favor, no transcriban la definición de Wikipedia.
      La presentación es sumamente importante. Por favor, pongan
      énfasis en la presentación del trabajo. Intenten ser creativos,
      buenos ejemplos y gráficos.




                     Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                             Examen Final


Examen Final

   Describan los siguientes conceptos (en como máximo 10 renglones):

    1. Algoritmo.
    2. ¿Qué 3 cosas debe cumplir un algoritmo?
    3. Programación.
    4. Lenguajes de Programación.
    5. Memoria.
    6. Variable. Codificación.
    7. Tipo de datos básicos.
    8. Tipo de datos abstractos. Definan las propiedades de los TDA
       que hemos visto en clase.
    9. Complejidad.

                        Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Diseño de Algoritmos
                            Examen Final


Examen Final

   ...
   10. Búsquedas. Estructuras de datos. Clasificación y Complejidad.
   11. Ordenamientos. Clasificación y Complejidad.
   12. Algoritmo de Selección. MergeSort.
   13. Recursión.
   14. Algoritmos de búsquedas y de optimización.
   15. Divide y reinarás.
   16. Algoritmos golosos.
   17. Búsqueda local.
   18. Búsqueda exhaustiva.


                       Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos

Curso de Nivelación de Algoritmos - Clase 5

  • 1.
    Diseño de Algoritmos Examen Final Curso de Nivelación de Algoritmos Clase 5 Lic. Ernesto Mislej emislej@dc.uba.ar Maestría y Carrera de Especialización en Explotación de Datos y Descubrimiento de Conocimiento 23 de marzo de 2008 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 2.
    Diseño de Algoritmos Examen Final Diseño de Algoritmos Es de esperar que con el estudio y formalización de algoritmos, también se hayan desarrollado técnicas generales para la producción de soluciones algoríticas. El primer punto es preguntarse si el problema es un problema de búsqueda, o uno de optimización. Veamos nuevamente el problema ”Llegar a Ciudad Universitaria desde el centro.” ¿A qué llamamos solución? ¿Existe una ruta que una a esos 2 puntos?. ¿Encontrar la ruta de costo mínimo que una a esos 2 puntos?. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 3.
    Diseño de Algoritmos Examen Final ¿Saben cómo se come a un elefante? Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 4.
    Diseño de Algoritmos Examen Final ¿Saben cómo se come a un elefante? De a pedacitos. . . Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 5.
    Diseño de Algoritmos Examen Final Divide y reinarás Ejemplo Programación de un fixture todos–contra–todos. La clave es encontrar una división del problema. Supongamos 2 grupos de 4 jugadores y tambión que entre los integrante de cada grupo ya se enfrentaron. Ahora hace falta que cada integrade de los grupos jueguen entre sí. Podría ser así: 1-5, 2-6, 3-7, 4-8; 1-6, 2-7, 3-8, 4-5; 1-7, 2-8, 3-5, 4-6; 1-8, 2-5, 3-6, 4-7; Ahora podemos usar la reducción recursiva, hasta el caso base, que es un fixture para 2 jugadores! Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 6.
    Diseño de Algoritmos Examen Final Divide y reinarás Ejemplo Suponemos para 8 jugadores. Ver una tabla T de n filas por n-1 columnas. T[i,j] responde al jugador que debe enfrentar i, en el día j. El fixture para los jugadores 1..4 está en la esquina superior izquierda. El fixture para los jugadores 5..8 está en la esquina inferior izquiera y responde al mismo fixture de los jugadores 1..4, pero sumándoles el número 4!. Ya se armó el fixture para los primeros 3 días. Resta enfrentar a los del primer grupo con los del segundo y eso ya lo tenemos resuelto. . . Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 7.
    Diseño de Algoritmos Examen Final Divide y reinarás 2 3 4 5 6 7 8 1 4 3 6 7 8 5 4 1 2 7 8 5 6 3 2 1 8 5 6 7 6 7 8 1 4 3 2 5 8 7 2 1 4 3 8 5 6 3 2 1 4 7 6 5 4 3 2 1 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 8.
    Diseño de Algoritmos Examen Final El árbol que no nos deja ver el bosque Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 9.
    Diseño de Algoritmos Examen Final Búsqueda local Ejemplo Una oficina de social-dating, consejeras amorosas, nos piden ayuda para encontrar parejas compatibles. 1. Suponemos un conjunto igual de mujeres y varones. 2. Cada unión tiene un nivel de compatibilidad. 3. Aleatoriamente unimos a una mujer con algún varón. 4. Iteramos por pares de parejas: Si vemos que si hacemos un cambio el nivel de compatibilidad general aumenta, lo hacemos. 5. Lo hacemos hasta que no podemos mejorar más. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 10.
    Diseño de Algoritmos Examen Final Búsqueda local Ejemplo Otro enfoque goloso (o ansioso) Unimos a la pareja de mayor compatibilidad. Iteramos hasta que no queden parejas. Existen estrategias de controlar el estado inicial. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 11.
    Diseño de Algoritmos Examen Final Búsqueda Exhaustiva Ejemplo Tenemos que salir de un laberinto, sin ciclos. 1. Caminamos derecho. . . 2. Si encontramos la salida, obviamente salimos. 3. Si encontramos una bifurcación, guardamos las alternativas en una pila, elegimos la opción del tope de la pila y volvemos a 1. 4. Si encontramos una pared, elegimos la siguiente alternativa de la pila y volvemos a 1. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 12.
    Diseño de Algoritmos Examen Final Búsqueda Exhaustiva Ejemplo Se plantea un árbol de opciones. La manera de guardar y elegir las opciones cada paso va a guiar la búsqueda. Búsquedas a lo profundo (DFS) y a lo ancho (BFS). En el peor de los casos, usé todas las combinaciones. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 13.
    Diseño de Algoritmos Examen Final Búsqueda Exhaustiva Puzzle 3x3: Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 14.
    Diseño de Algoritmos Examen Final Diseño de Algoritmos Ejemplo Encontrar un agrupamiento de un conjunto de datos, o clustering. Veamos cómo resolver el siguiente problema para cada acercamiento. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 15.
    Diseño de Algoritmos Examen Final Examen Final El examen tendrá la forma de parcial domiciliario. El examen es individual. Consiste en definir una serie de conceptos comentados en clase. Por favor, no transcriban la definición de Wikipedia. La presentación es sumamente importante. Por favor, pongan énfasis en la presentación del trabajo. Intenten ser creativos, buenos ejemplos y gráficos. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 16.
    Diseño de Algoritmos Examen Final Examen Final Describan los siguientes conceptos (en como máximo 10 renglones): 1. Algoritmo. 2. ¿Qué 3 cosas debe cumplir un algoritmo? 3. Programación. 4. Lenguajes de Programación. 5. Memoria. 6. Variable. Codificación. 7. Tipo de datos básicos. 8. Tipo de datos abstractos. Definan las propiedades de los TDA que hemos visto en clase. 9. Complejidad. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 17.
    Diseño de Algoritmos Examen Final Examen Final ... 10. Búsquedas. Estructuras de datos. Clasificación y Complejidad. 11. Ordenamientos. Clasificación y Complejidad. 12. Algoritmo de Selección. MergeSort. 13. Recursión. 14. Algoritmos de búsquedas y de optimización. 15. Divide y reinarás. 16. Algoritmos golosos. 17. Búsqueda local. 18. Búsqueda exhaustiva. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos