curso de nivelación de algoritmos - clase 3

Post on 14-Jun-2015

844 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

BúsquedasComplejidad

Ordenamiento

Curso de Nivelación de AlgoritmosClase 3

Lic. Ernesto Mislejemislej@dc.uba.ar

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

top related