Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Curso de Nivelación de Algoritmos - Clase 3

1,817 views

Published on

  • Be the first to comment

  • Be the first to like this

Curso de Nivelación de Algoritmos - Clase 3

  1. 1. Búsquedas Complejidad Ordenamiento Curso de Nivelación de Algoritmos Clase 3 Lic. Ernesto Mislej emislej@dc.uba.arMaestría y Carrera de Especialización en Explotación de Datos y Descubrimiento de Conocimiento 26 de marzo de 2008 Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  2. 2. Búsquedas Complejidad OrdenamientoBúsquedas Ejemplo Decir si un número dado se encuentra en una lista de números. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  3. 3. Búsquedas Complejidad OrdenamientoBúsquedas Ejemplo Decir si un número dado se encuentra en una lista ordenada de números. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  4. 4. Búsquedas Complejidad OrdenamientoBúsquedas Ejemplo ¿Conocen el juego de adivinen un número? El jugador A piensa un número en un rango. El jugador B intenta adivinarlo. El jugador A solo puede responder mayor, menor o si acertó. Después rotan los papeles y gana quién hace menos preguntas. Elegir una estrategia para jugar. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  5. 5. Búsquedas Complejidad OrdenamientoBúsquedas Ejemplo Dibujen esa estrategia con el esquema que se sientan cómodos, para el rango 1..15. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  6. 6. Búsquedas Complejidad OrdenamientoBúsquedas ¿En cuántos pasos se resuelve? ¿Qué relación tiene con el número 15? Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  7. 7. Búsquedas Complejidad OrdenamientoBúsquedas Ejemplo Ahora dibujen esa estrategia para el rango 1..7 ∪ 101..107. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  8. 8. Búsquedas Complejidad OrdenamientoBúsquedas Es posible adivinar cualquier número como máximo en: log2(n) de pasos. . . Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  9. 9. Búsquedas Complejidad OrdenamientoBúsquedas Esta estructura es bien conocida. Se llama Árbol Binario de Búsqueda. Es un tipo especial de árbol. Permite realizar búsquedas en tiempo logarítmico (de estar balanceado). Su regla de construcción es: los elementos de la rama izquierda son menores a los de la rama derecha. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  10. 10. Búsquedas Complejidad OrdenamientoBúsquedas Ejemplo ¿Recuerdan las agendas no-electrónicas? El acceso es en 2 pasos: Primero encuentro la letra inicial. Y después busco de manera secuencial. Dibujen el diagrama de acceso a los registros. Calculen el esfuerzo en encontrar un registro. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  11. 11. Búsquedas Complejidad OrdenamientoBúsquedas y Complejidad Podemos decir que realizar una búsqueda en una lista desordenada se realiza en tiempo lineal. Una búsqueda en una lista ordenada se realiza en tiempo logarítmico. Una búsqueda en una lista semi-ordenada, como una agenda se realiza entre esos dos tiempos. Podemos categorizar a los problemas según su esfuerzo de resolución. Esa es la idea de complejidad. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  12. 12. Búsquedas Complejidad OrdenamientoComplejidad Ejemplo Piensen otras maneras de medir el esfuerzo de resolución. Calcular la complejidad en función de la cantidad de datos de entrada, para los ejemplos de la primera y segunda clase. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  13. 13. Búsquedas Complejidad OrdenamientoOrdenamiento El proceso de clasificación u ordenamiento de una lista de objetos es un proceso fundamental en la computación. Existen variados métodos de ordenamiento cada uno especialmente diseñado para diferentes datos de entrada Ejemplo Piensen algún método de ordenamiento. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  14. 14. Búsquedas Complejidad OrdenamientoOrdenamiento # Algoritmo de selección >>> def seleccion (x): a = list (x) #lista nueva a partir de x i = 0 while i < len(a)-2: #selecciona el menor de entre a[i]..a[n] j = i + 1 indicemenor = i clavemenor = a[i] while j < len(a): if a[j] < clavemenor: clavemenor = a[j] indicemenor = j j = j + 1 a[i], a[indicemenor] = a[indicemenor], a[i] #swap! i = i + 1 return a Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  15. 15. Búsquedas Complejidad OrdenamientoOrdenamiento >>> # Algoritmo de selección >>> l = [4, 2, 6, 5, 3, 1] >>> k = seleccion(l) [1, 2, 6, 5, 3, 4] [1, 2, 6, 5, 3, 4] [1, 2, 3, 5, 6, 4] [1, 2, 3, 4, 6, 5] [1, 2, 3, 4, 5, 6] Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  16. 16. Búsquedas Complejidad OrdenamientoOrdenamiento y Complejidad ¿Cuál es el esfuerzo del algoritmo de ordenamiento por selección? n(n − 1) pasos Decimos O(n2 ) ¿Existirá algún método más eficiente? Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  17. 17. Búsquedas Complejidad OrdenamientoOrdenamiento y Complejidad Recuerdan el ejercicio ”Intercalar 2 listas ordenadas para formar otra lista ordenada” ¿Cuánto es el esfuerzo de ese algoritmo? Es un algoritmo de costo lineal. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  18. 18. Búsquedas Complejidad OrdenamientoOrdenamiento y Complejidad Reguerdan Las listas de 1 sólo elemento ya están ordenadas, ¿verdad? ¿Cuánto cuesta?: Intercalar 2 listas de 1 elemento. 2 pasos Intercalar 2 listas de 2 elementos. 4 pasos Intercalar 2 listas de 4 elementos. 8 pasos Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  19. 19. Búsquedas Complejidad OrdenamientoOrdenamiento y Complejidad Ordenar([8, 1, 6, 3, 7, 2, 5, 4]) = ? Intercalar([8], [1]) = [1, 8] 2 pasos Intercalar([6], [3]) = [3, 6] 2 pasos Intercalar([7], [2]) = [2, 7] 2 pasos Intercalar([5], [4]) = [4 ,5] 2 pasos Intercalar([1,8], [3,6]) = [1,3,6,8] 4 pasos Intercalar([2,7], [4,5]) = [2,4,5,7] 4 pasos Intercalar([1,3,6,8], [2,4,5,7]) = [1,2,3,4,5,6,7,8] 8 pasos Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  20. 20. Búsquedas Complejidad OrdenamientoOrdenamiento y Complejidad Hemos realizado: ((2 + 2 + 2 + 2) + (4 + 4) + 8) operaciones (3 ∗ 8) operaciones ¿Pueden generalizar este método de ordenamiento? ¿Cuánto es su costo? Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  21. 21. Búsquedas Complejidad OrdenamientoOrdenamiento y Complejidad Este algoritmo es bien conocido y se lo conoce como MergeSort. El costo de este algoritmo es de: O(n log(n)) Existen, además, una serie de algoritmos de costo O(n log(n)), entre otros el HeapSort o el QuickSort cada uno con diferencias de implementación. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  22. 22. Búsquedas Complejidad OrdenamientoBúsquedas Ejemplo Hacer un seguimiento de papel para los algoritmos de ordenamiento que hemos visto. Escribir el algoritmo MergeSort. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

×