22
Búsquedas Complejidad Ordenamiento Curso de Nivelación de Algoritmos Clase 3 Lic. Ernesto Mislej [email protected] 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

Curso de Nivelación de Algoritmos - Clase 3

Embed Size (px)

Citation preview

Page 1: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Curso de Nivelación de AlgoritmosClase 3

Lic. Ernesto [email protected]

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

26 de marzo de 2008

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 2: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

EjemploDecir si un número dado se encuentra en una lista de números.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 3: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

EjemploDecir si un número dado se encuentra en una lista ordenada denúmeros.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 4: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

Ejemplo¿Conocen el juego de adivinen un número?

I El jugador A piensa un número en un rango.I El jugador B intenta adivinarlo.I El jugador A solo puede responder mayor, menor o si acertó.I 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

Page 5: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

EjemploDibujen esa estrategia con el esquema que se sientan cómodos,para el rango 1..15.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 6: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

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

Page 7: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

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

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 8: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

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

Page 9: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

I Esta estructura es bien conocida. Se llama Árbol Binario deBúsqueda.

I Es un tipo especial de árbol.I Permite realizar búsquedas en tiempo logarítmico (de estar

balanceado).I 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

Page 10: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

Ejemplo

I ¿Recuerdan las agendas no-electrónicas?El acceso es en 2 pasos:

I Primero encuentro la letra inicial.I Y después busco de manera secuencial.

I Dibujen el diagrama de acceso a los registros.I Calculen el esfuerzo en encontrar un registro.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 11: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas y Complejidad

I Podemos decir que realizar una búsqueda en una listadesordenada se realiza en tiempo lineal.

I Una búsqueda en una lista ordenada se realiza en tiempologarítmico.

I Una búsqueda en una lista semi-ordenada, como una agendase realiza entre esos dos tiempos.

I Podemos categorizar a los problemas según su esfuerzo deresolución.

Esa es la idea de complejidad.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 12: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Complejidad

Ejemplo

I Piensen otras maneras de medir el esfuerzo de resolución.I 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

Page 13: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento

I El proceso de clasificación u ordenamiento de una lista deobjetos es un proceso fundamental en la computación.

I Existen variados métodos de ordenamiento cada unoespecialmente diseñado para diferentes datos de entrada

EjemploPiensen algún método de ordenamiento.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 14: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento

# Algoritmo de selección>>> def seleccion (x):

a = list (x) #lista nueva a partir de xi = 0while i < len(a)-2: #selecciona el menor de entre a[i]..a[n]

j = i + 1indicemenor = iclavemenor = 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

Page 15: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

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

Page 16: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento y Complejidad

I ¿Cuál es el esfuerzo del algoritmo de ordenamiento porselección?

n(n − 1) pasos

I Decimos O(n2)

I ¿Existirá algún método más eficiente?

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 17: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento y Complejidad

I Recuerdan el ejercicio ”Intercalar 2 listas ordenadas paraformar otra lista ordenada”

I ¿Cuánto es el esfuerzo de ese algoritmo?

Es un algoritmo de costo lineal.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 18: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento y Complejidad

ReguerdanI Las listas de 1 sólo elemento ya están ordenadas, ¿verdad?I ¿Cuánto cuesta?:

Intercalar 2 listas de 1 elemento. 2 pasosIntercalar 2 listas de 2 elementos. 4 pasosIntercalar 2 listas de 4 elementos. 8 pasos

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 19: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento y Complejidad

Ordenar([8, 1, 6, 3, 7, 2, 5, 4]) = ?

Intercalar([8], [1]) = [1, 8] 2 pasosIntercalar([6], [3]) = [3, 6] 2 pasosIntercalar([7], [2]) = [2, 7] 2 pasosIntercalar([5], [4]) = [4 ,5] 2 pasos

Intercalar([1,8], [3,6]) = [1,3,6,8] 4 pasosIntercalar([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

Page 20: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento y Complejidad

I Hemos realizado:I ((2 + 2 + 2 + 2) + (4 + 4) + 8) operacionesI (3 ∗ 8) operaciones

I ¿Pueden generalizar este método de ordenamiento?I ¿Cuánto es su costo?

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 21: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Ordenamiento y Complejidad

I Este algoritmo es bien conocido y se lo conoce comoMergeSort.

I El costo de este algoritmo es de:

O(n log(n))

I Existen, además, una serie de algoritmos de costo O(n log(n)),entre otros el HeapSort o el QuickSort cada uno condiferencias de implementación.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos

Page 22: Curso de Nivelación de Algoritmos - Clase 3

BúsquedasComplejidad

Ordenamiento

Búsquedas

Ejemplo

I Hacer un seguimiento de papel para los algoritmos deordenamiento que hemos visto.

I Escribir el algoritmo MergeSort.

Lic. Ernesto Mislej Curso de Nivelación de Algoritmos