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