SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
Búsquedas
                          Complejidad
                         Ordenamiento




            Curso de Nivelación de Algoritmos
                                     Clase 3


                           Lic. Ernesto Mislej
                          emislej@dc.uba.ar

Maestrí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
Búsquedas
                          Complejidad
                         Ordenamiento


Bú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
Búsquedas
                          Complejidad
                         Ordenamiento


Bú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
Búsquedas
                           Complejidad
                          Ordenamiento


Bú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
Búsquedas
                          Complejidad
                         Ordenamiento


Bú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
Búsquedas
                          Complejidad
                         Ordenamiento


Bú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
Búsquedas
                           Complejidad
                          Ordenamiento


Búsquedas




  Ejemplo
  Ahora dibujen esa estrategia para el rango 1..7 ∪ 101..107.




                      Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Búsquedas
                         Complejidad
                        Ordenamiento


Búsquedas



  Es posible adivinar cualquier número como máximo en:


                              log2(n)
  de pasos. . .




                    Lic. Ernesto Mislej   Curso de Nivelación de Algoritmos
Búsquedas
                          Complejidad
                         Ordenamiento


Bú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
Búsquedas
                           Complejidad
                          Ordenamiento


Bú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
Búsquedas
                         Complejidad
                        Ordenamiento


Bú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
Búsquedas
                          Complejidad
                         Ordenamiento


Complejidad




   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
Búsquedas
                          Complejidad
                         Ordenamiento


Ordenamiento



      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
Búsquedas
                               Complejidad
                              Ordenamiento


Ordenamiento

  # 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
Búsquedas
                              Complejidad
                             Ordenamiento


Ordenamiento




  >>>   # 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
Búsquedas
                         Complejidad
                        Ordenamiento


Ordenamiento 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
Búsquedas
                          Complejidad
                         Ordenamiento


Ordenamiento 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
Búsquedas
                           Complejidad
                          Ordenamiento


Ordenamiento 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
Búsquedas
                                 Complejidad
                                Ordenamiento


Ordenamiento 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
Búsquedas
                          Complejidad
                         Ordenamiento


Ordenamiento 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
Búsquedas
                          Complejidad
                         Ordenamiento


Ordenamiento 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
Búsquedas
                          Complejidad
                         Ordenamiento


Bú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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Suma de imagenes
Suma de imagenesSuma de imagenes
Suma de imagenes
 
Qué es un algoritmo 10
Qué es un algoritmo 10Qué es un algoritmo 10
Qué es un algoritmo 10
 
Unidad 1, 2 y_3_algoritmos
Unidad 1, 2 y_3_algoritmosUnidad 1, 2 y_3_algoritmos
Unidad 1, 2 y_3_algoritmos
 
Variables
VariablesVariables
Variables
 
Mod 2 algoritmos
Mod 2 algoritmosMod 2 algoritmos
Mod 2 algoritmos
 
Taller saberes previos 11a
Taller saberes previos 11aTaller saberes previos 11a
Taller saberes previos 11a
 
Tipos algoritmos
Tipos algoritmosTipos algoritmos
Tipos algoritmos
 
Fun estructuras basicas_programacion_guia_2
Fun estructuras basicas_programacion_guia_2Fun estructuras basicas_programacion_guia_2
Fun estructuras basicas_programacion_guia_2
 
Apuntesmatlab
ApuntesmatlabApuntesmatlab
Apuntesmatlab
 
Unidad 2 introducción a los algoritmos
Unidad 2 introducción a los algoritmosUnidad 2 introducción a los algoritmos
Unidad 2 introducción a los algoritmos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
18 tipos-de-datos
18 tipos-de-datos18 tipos-de-datos
18 tipos-de-datos
 
Lógica de programación y algoritmos
Lógica de programación y algoritmosLógica de programación y algoritmos
Lógica de programación y algoritmos
 
Generar números aleatorios en excel análisis de datos
Generar números aleatorios en excel análisis de datosGenerar números aleatorios en excel análisis de datos
Generar números aleatorios en excel análisis de datos
 
Logica de programacion de algoritmos
Logica de programacion de algoritmosLogica de programacion de algoritmos
Logica de programacion de algoritmos
 
Diagramas De Flujo
Diagramas De FlujoDiagramas De Flujo
Diagramas De Flujo
 
A01 cedillo 5480_1ed_ixx
A01 cedillo 5480_1ed_ixxA01 cedillo 5480_1ed_ixx
A01 cedillo 5480_1ed_ixx
 
Trabajo algoritmo
Trabajo algoritmo Trabajo algoritmo
Trabajo algoritmo
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Matlabreyes
MatlabreyesMatlabreyes
Matlabreyes
 

Destacado

Tópicos de Big Data - Introducción
Tópicos de Big Data - IntroducciónTópicos de Big Data - Introducción
Tópicos de Big Data - IntroducciónErnesto Mislej
 
Tópicos de Big Data - Link Analysis
Tópicos de Big Data - Link AnalysisTópicos de Big Data - Link Analysis
Tópicos de Big Data - Link AnalysisErnesto Mislej
 
Tópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de RecomendaciónTópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de RecomendaciónErnesto Mislej
 
Tópicos de Big Data - Items Similares
Tópicos de Big Data - Items SimilaresTópicos de Big Data - Items Similares
Tópicos de Big Data - Items SimilaresErnesto Mislej
 
Innovación en Big Data
Innovación en Big DataInnovación en Big Data
Innovación en Big DataErnesto Mislej
 
Data Science & Big Data
Data Science & Big DataData Science & Big Data
Data Science & Big DataErnesto Mislej
 
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...Ernesto Mislej
 
Opinion Mining #datafestAr
Opinion Mining #datafestArOpinion Mining #datafestAr
Opinion Mining #datafestArErnesto Mislej
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivosfeytho
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionIsrael Castillo Cruz
 
Análisis Inteligente de Textos
Análisis Inteligente de TextosAnálisis Inteligente de Textos
Análisis Inteligente de TextosErnesto Mislej
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkVolker Hirsch
 

Destacado (18)

Tópicos de Big Data - Introducción
Tópicos de Big Data - IntroducciónTópicos de Big Data - Introducción
Tópicos de Big Data - Introducción
 
Tópicos de Big Data - Link Analysis
Tópicos de Big Data - Link AnalysisTópicos de Big Data - Link Analysis
Tópicos de Big Data - Link Analysis
 
Tópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de RecomendaciónTópicos de Big Data - Sistemas de Recomendación
Tópicos de Big Data - Sistemas de Recomendación
 
Tópicos de Big Data - Items Similares
Tópicos de Big Data - Items SimilaresTópicos de Big Data - Items Similares
Tópicos de Big Data - Items Similares
 
Innovación en Big Data
Innovación en Big DataInnovación en Big Data
Innovación en Big Data
 
Data Science & Big Data
Data Science & Big DataData Science & Big Data
Data Science & Big Data
 
Heap sort
Heap sortHeap sort
Heap sort
 
Clase1
Clase1Clase1
Clase1
 
Opinion Mining
Opinion MiningOpinion Mining
Opinion Mining
 
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
A quienes les gustó esta charla también les gustó... Cómo los Sistemas de Rec...
 
Opinion Mining #datafestAr
Opinion Mining #datafestArOpinion Mining #datafestAr
Opinion Mining #datafestAr
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Data Mining
Data MiningData Mining
Data Mining
 
Técnicas de análisis
Técnicas de análisisTécnicas de análisis
Técnicas de análisis
 
Lenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcionLenguajes lógicos definicion y funcion
Lenguajes lógicos definicion y funcion
 
Análisis Inteligente de Textos
Análisis Inteligente de TextosAnálisis Inteligente de Textos
Análisis Inteligente de Textos
 
TEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of WorkTEDx Manchester: AI & The Future of Work
TEDx Manchester: AI & The Future of Work
 

Curso de Nivelación de Algoritmos - Clase 3

  • 1. Búsquedas Complejidad Ordenamiento Curso de Nivelación de Algoritmos Clase 3 Lic. Ernesto Mislej emislej@dc.uba.ar Maestrí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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Búsquedas Ejemplo Ahora dibujen esa estrategia para el rango 1..7 ∪ 101..107. Lic. Ernesto Mislej Curso de Nivelación de Algoritmos
  • 8. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Bú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. Búsquedas Complejidad Ordenamiento Complejidad 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. Búsquedas Complejidad Ordenamiento Ordenamiento 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. Búsquedas Complejidad Ordenamiento Ordenamiento # 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. Búsquedas Complejidad Ordenamiento Ordenamiento >>> # 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. Búsquedas Complejidad Ordenamiento Ordenamiento 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. Búsquedas Complejidad Ordenamiento Ordenamiento 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. Búsquedas Complejidad Ordenamiento Ordenamiento 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. Búsquedas Complejidad Ordenamiento Ordenamiento 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. Búsquedas Complejidad Ordenamiento Ordenamiento 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. Búsquedas Complejidad Ordenamiento Ordenamiento 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. Búsquedas Complejidad Ordenamiento Bú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