Está en la página 1de 18

1

Algoritmos sobre
Listas
TEMA 6
Manuel Pereira Gonzlez
V1.1
Agenda
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
Mtodos Avanzados
Medicin Experimental de la Eficiencia
Resumen
2
Introduccin
Importancia de Organizar la Informacin
Ej: Buscar nmero de telfono en la gua
Rpido, gracias a que est ordenado
alfabticamente
En informtica, igual que en la vida real,
frecuentemente es necesario buscar informacin
entre mucha disponible, para lo que tambin se
ordena.
Existen diversos algoritmos para ordenar una lista
de elementos y buscar dentro de una lista ordenada
Agenda
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
Mtodos Avanzados
Medicin Experimental de la Eficiencia
Resumen
3
Algoritmos de Bsqueda:
Bsqueda Secuencial
No es necesario que los elementos estn
ordenados dentro del array
Poco eficiente:
n es el nmero de elementos del Array
Eficiencia: O(n) O grande de n
El tiempo que tarda el algoritmo en
ejecutarse es aproximadamente
proporcional a n (al nmero de elementos)
Consiste en ir mirando elemento a elemento
del array hasta que se encuentre el indicado
Algoritmos de Bsqueda:
Bsqueda Secuencial
4
Algoritmos de Bsqueda:
Bsqueda Binaria
El array debe estar ordenado
Muy eficiente:
Eficiencia: O(log
2
n)
El tiempo que tarda el algoritmo en ejecutarse es
aproximadamente proporcional al logaritmo en base 2 de n
Ejecucin:
Se mira el elemento del centro de la lista
Si es el buscado, se devuelve
Si es mayor que el buscado, se repite la bsqueda sobre la
primera mitad de la lista
Si es menor que el buscado, se repite la bsqueda sobre la
segunda mitad de la lista
Se repite el algoritmo hasta que se encuentra el elemento o
se llega a una lista de longitud cero (el elemento no existe).
Algoritmos de Bsqueda:
Bsqueda Binaria
5
Algoritmos de Bsqueda:
Bsqueda Binaria
Algoritmos de Bsqueda:
Anlisis de Eficiencia
Estudio de la eficiencia en la peor situacin: cuando
el elemento no se encuentra en la lista
Bsqueda Secuencial: El nmero de comparaciones
a realizar es n
Bsqueda Binaria: En cada comparacin se puede
eliminar la mitad de los elementos del array.
Primera comparacin: array de n elementos
Segunda comparacin: array de n/2 elementos
Tercera comparacin: array de n/4 elementos
Cuarta comparacin: array de n/8 elementos

C-sima comparacin: array de n/2
C
elementos
6
Algoritmos de Bsqueda:
Anlisis de Eficiencia
Bsqueda Binaria: C-sima comparacin:
array de n/2
C
elementos
Para llegar a que el array tenga 1 slo
elemento: n/2
C
= 1 por tanto n = 2
C
por
lo que C = log
2
(n)
14 10000 10000
17 100000 100000
20 1000000 1000000
10 1000 1000
7 100 100
4 10 10
Bsqu. binaria Bsqu. secuencial
Nmero de Comparaciones n
Agenda
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
Mtodos Avanzados
Medicin Experimental de la Eficiencia
Resumen
7
Algoritmos de Insercin
Insercin en un Array no ordenado
Necesario indicar la posicin en la que se
desea insertar el elemento (posicin p)
Hay que abrir hueco en la posicin p,
desplazando una posicin a la derecha los
elementos desde p hasta el final.
Insercin en un Array ordenado
No es necesario indicar la posicin, el elemento
a insertar ocupar la posicin que le
corresponde segn su valor
Algoritmos de Insercin
Insercin en un Array ordenado. Dos posibles
situaciones:
1) Los elementos no pueden encontrarse
repetidos en la lista. Se busca la posicin p en la
que insertar (bsqueda binaria). Si el elemento a
insertar ya se encuentra en la lista, se genera un
cdigo de error, en caso contrario se inserta en la
posicin p.
2) Los elementos pueden repetirse. Se busca la
posicin p en la que insertar (bsqueda binaria) y
se inserta el nuevo elemento en la posicin p
8
Algoritmos de Insercin
Agenda
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
Mtodos Avanzados
Medicin Experimental de la Eficiencia
Resumen
9
Mtodos Directos: Burbuja o
BubbleSort
Basado en intercambio de pares adyacentes
Se hacen varias pasadas sobre el array
comparando todos los elementos
adyacentes, intercambindolos si no estn
ordenados
En el peor caso se realizan n-1 pasadas
sobre el array
Mtodos Directos: Burbuja o
BubbleSort
10
Mtodos Directos: Insercin
Directa
Insertar cada elemento, comenzando desde el
segundo y hasta el final, en el lugar que le
corresponde en la secuencia ordenada que se va
formando a su izquierda
En la primera pasada se selecciona el segundo elemento
y se inserta en la secuencia ordenada formada por el
primer elemento
En la segunda pasada se inserta el tercer elemento en la
secuencia ordenada formada por los dos primeros

Consiste en n-1 inserciones en una lista ordenada
Mtodos Directos: Insercin
Directa
11
Mtodos Directos: Seleccin
Directa
Se selecciona de la lista completa el
elemento con menor valor y se intercambia
con el primero (el primer elemento queda
definitivamente ordenado).
A continuacin, se busca el elemento de
menor valor de la sublista comprendida
entre el segundo y el ltimo, y se
intercambia con el segundo elemento
As sucesivamente
Mtodos Directos: Seleccin
Directa
12
Agenda
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
Mtodos Avanzados
Medicin Experimental de la Eficiencia
Resumen
Mtodos Avanzados: Ordenacin
Rpida o QuickSort
El mejor mtodo para ordenar arrays
conocido hasta el momento.
En la mayora de los casos su eficiencia es
de orden O(n log(n))
En los peores casos, su eficiencia puede ser
de orden O(n
2
), aunque es muy improbable
Su eficiencia depende de la eleccin del
pivote
13
Mtodos Avanzados: Ordenacin
Rpida o QuickSort
Algoritmo:
Se elige un elemento del array (pivote), y
se dejan a su izquierda todos los valores
menores o iguales que l, y a la derecha
los mayores
Se realiza la misma operacin con las
partes resultantes de la izquierda y la
derecha del pivote
As sucesivamente, hasta que las partes
tengan tamao 1 (array completamente
ordenado)
Mtodos Avanzados: Ordenacin
Rpida o QuickSort
14
Mtodos Avanzados: Mtodo del
Montculo o HeapSort
Un montculo (heap) es una estructura de rbol
con informacin perteneciente a un conjunto
ordenado.
Caracterstica de un montculo: cada nodo tiene un
valor mayor que el de todos sus nodos hijos -> El
nodo raiz contiene el mayor elemento.
Algoritmos HeapSort:
1) Construir un montculo
2) Sacar el nodo raiz (mayor)
3) Reconstruir el montculo con los elementos restantes
4) Volver al paso 2) mientras queden elementos en el
montculo
Mtodos Avanzados: Mtodo del
Montculo o HeapSort
98
40
15
21
6 3 12
14
98 40 15 21 6 3 12 14
0 1 2 3 4 5 6 7
Posicin
Valor
Posicin del Hijo Derecho = 2 * (Posicin del Padre + 1)
Posicin del Hijo Izquierdo = (2 * (Posicin del padre Padre + 1)) - 1
Representacin en Array
De un Heap Binario
15
Mtodos Avanzados: Mtodo del
Montculo o HeapSort
Fase 1: Construccin inicial del montculo
Se construye el montculo inicial a partir del array
original
Fase 2: Ordenacin. Repetir hasta que slo quede
un elemento en el montculo:
A) Se intercambia la raz con el ltimo elemento
del montculo. Este ltimo elemento queda
definitivamente ordenado y ya no pertenece al
montculo.
B) Se restaura el montculo haciendo que se
hunda el primer elemento hasta la posicin que
le corresponda. La raz entonces vuelve a ser el
mayor elemento, se vuelve al punto A).
Mtodos Avanzados: Mtodo del
Montculo o HeapSort
16
Agenda
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
Mtodos Avanzados
Medicin Experimental de la Eficiencia
Resumen
Medicin Experimental de la
Eficiencia
Tiempos (en milliseg) que se han tardado
experimentalmente en ordenar arrays generados
aleatoriamente segn todos los algoritmos
estudiados
844 720 692 493 389 290 176
HeapSort
360 449 267 212 163 123 76
QuickSort
324.750 226.166 157.849 108.254 69.083 39.192 16.962
Seleccin
272.311 197.123 127.112 86.794 55.043 31.966 13.311
Insercin
697.952 534.290 391.321 266.772 170.098 116.538 41.924
Burbuja
40.000 35.000 30.000 25.000 20.000 15.000 10.000
17
Agenda
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
Mtodos Avanzados
Medicin Experimental de la Eficiencia
Resumen
Resumen
Introduccin
Algoritmos de Bsqueda
Bsqueda Secuencial
Bsqueda Binaria
Anlisis de Eficiencia
Algoritmos de Insercin
Algoritmos de Ordenacin
Mtodos Directos
BubbleSort
Intercambios
adyacentes
Insercin directa
Inserciones sucesivas
Seleccin directa
Buscar el menor de
una sublista
Mtodos Avanzados
QuickSort
Ms rpido
Divide y Vencers
HeapSort
Montculo
Dos fases
Medicin Experimental
de la Eficiencia
O(n2)
O(n log(n))
18
Resumen: Para ms
informacin
Algoritmos de ordenacin en Java:
http://www.cs.ubc.ca/spider/harrison/Jav
a/sorting-demo.html
Algoritmos de ordenacin animados
http://www.csc.depauw.edu/~bhoward/co
urses/0304Fall/csc222/sort/
http://www2.hig.no/~algmet/animate.html
Heap Sort Animated
http://www2.hawaii.edu/~copley/665/HS
Applet.html

También podría gustarte