Tema 21. Búsqueda dicotómica en vectores...

30
1 Diego Gutiérrez Tema 21. Búsqueda dicotómica en vectores ordenados

Transcript of Tema 21. Búsqueda dicotómica en vectores...

Page 1: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

1Diego Gutiérrez

Tema 21. Búsqueda dicotómica en vectores ordenados

Page 2: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

3Diego Gutiérrez

Por qué algoritmos de búsqueda?

Page 3: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

4Diego Gutiérrez

Page 4: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

5Diego Gutiérrez

Habíamos visto:

Búsqueda secuencial o lineal en un fichero secuencial:Con garantía de éxitoSin garantía de éxito

Búsqueda secuencial o lineal en una tabla:Búsqueda secuencial o lineal (con y sin garantía de éxito)Búsqueda lineal con centinelaBúsqueda lineal por eliminación

Page 5: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

6Diego Gutiérrez

Habíamos visto:

Búsqueda secuencial o lineal en un fichero secuencial:Con garantía de éxitoSin garantía de éxito

Búsqueda secuencial o lineal en una tabla:Búsqueda secuencial o lineal (con y sin garantía de éxito)Búsqueda lineal con centinelaBúsqueda lineal por eliminación

Page 6: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

7Diego Gutiérrez

Búsqueda secuencial en una tabla sin garantía de éxito:

algoritmo buscarEnTabla (E T:tpTabla; ES éxito:booleano; ES datoBuscado:tpDato){ Pre: n≥1Post: el valor de “éxito” es cierto si y sólo si alguno de los datos almacenados en “T”

satisface la condición de búsqueda; en tal caso el valor de “datoBuscado” es igual a uno de ellos y, en caso contrario, su valor queda indefinido }

variablesíndice: tpÍndice;

principio{ La búsqueda empieza por el índice menor }índice:=1;{ Realiza una búsqueda lineal en T }mientrasQue ¬(índice=n) Y ¬condiciónDeBúsqueda(T[índice]) hacer

índice:=índice+1;finMQ{ Se satisface (índice=n) O condiciónDeBúsqueda(T[índice]) }{ Discrimina si ha habido éxito en la búsqueda }si condiciónDeBúsqueda(T[índice])

entonces datoBuscado:=T[índice]; éxito:=cierto;si_no éxito:=falso;

finSiFin.

Page 7: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

8Diego Gutiérrez

Page 8: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

9Diego Gutiérrez

Si los datos están ordenados, hay otros algoritmos más eficientes!

¿Cuál es la idea básica?

Reducir el tamaño del problema en cada iteración

Búsqueda binaria o dicotómica: reducir el tamaño del problema a la mitad en cada iteración

Divide y vencerás…

Page 9: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

10Diego Gutiérrez

http://www.di.uniovi.es/~dani/asignaturas/transparencias-leccion17.PDF

Page 10: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

11Diego Gutiérrez

Cuando el espacio de búsqueda quede reducido a un único elemento podrá concluirse, de forma inmediata, si ha habido éxito o fracaso en la búsqueda del dato sin más que comprobar si dicho elemento satisface o no la condición de búsqueda.

Conviene comparar este algoritmo con los algoritmos de búsqueda lineal presentados en los apartados previos en los que, en cada iteración, sólo se reduce en una unidad la dimensión del espacio de búsqueda.

Page 11: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

12Diego Gutiérrez

Búsqueda lineal:http://www.cosc.canterbury.ac.nz/mukundan/dsal/LSearch.html

Búsqueda dicotómica:http://desdemona.la.asu.edu/~mat243/applets/BS/BSApplet.phphttp://www.cosc.canterbury.ac.nz/mukundan/dsal/BSearch.html

Page 12: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

13Diego Gutiérrez

El diseño interno de un algoritmo de búsqueda binaria o dicotómica debe resolver, esencialmente, el problema de la gestión de los valores de los índices, I y S, que definen el espacio de búsqueda T[I..S] en cada iteración.

10 45 71 88 102 102 221 234Buscar el número 71

Page 13: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

14Diego Gutiérrez

BÚSQUEDA DICOTÓMICA

1 2 3 4 5 6 7 8

V 10 45 71 88 102 102 221 234

WHILE I S

I<>S

Page 14: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

15Diego Gutiérrez

BÚSQUEDA DICOTÓMICA

1 2 3 4 5 6 7 8

V 10 45 71 88 102 102 221 234

WHILE I S

M

I<>S

Page 15: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

16Diego Gutiérrez

BÚSQUEDA DICOTÓMICA

1 2 3 4 5 6 7 8

V 10 45 71 88 102 102 221 234

WHILE I S

M

I S

I<>S

Page 16: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

17Diego Gutiérrez

BÚSQUEDA DICOTÓMICA

1 2 3 4 5 6 7 8

V 10 45 71 88 102 102 221 234

WHILE I S

M

I S

I<>S M

Page 17: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

18Diego Gutiérrez

BÚSQUEDA DICOTÓMICA

1 2 3 4 5 6 7 8

V 10 45 71 88 102 102 221 234

WHILE I S

M

I S

I<>S M

I S

Page 18: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

19Diego Gutiérrez

BÚSQUEDA DICOTÓMICA

1 2 3 4 5 6 7 8

V 10 45 71 88 102 102 221 234

WHILE I S

M

I S

I<>S M

I S

M

Page 19: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

20Diego Gutiérrez

BÚSQUEDA DICOTÓMICA

V[3] = dato buscado ?→ SI : ÉXITO→ NO : FRACASO

1 2 3 4 5 6 7 8

V 10 45 71 88 102 102 221 234

WHILE I S

M

I S

I<>S M

I S

M

I, S

Page 20: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

21Diego Gutiérrez

Recordemos…

En general, asociado a cada elemento (tanto en ficheros como en tablas) suele existir un campo relevante que lo distingue y sobre el que basamos la búsqueda

PIN de un estudiante

A este campo se le llama clave

En nuestro contexto:La clave de un dato simple es el propio datoLa clave de un dato estructurado de tipo registro es uno de sus campos

Los algoritmos de búsqueda funcionan comparando la clave de cada uno de los elementos con la que buscamos

Page 21: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

22Diego Gutiérrez

algoritmo buscarEnTabla (E T:tpTabla; E clave:tpClave; S éxito:booleano; S datoBuscado:tpDato){ Pre: los datos de la tabla “T” están ordenados según valores no decrecientes (“≤”) de sus atributos

“clave”Post: el valor de “éxito” es cierto si y sólo si alguno de los datos almacenados en “T” presentan un valor

de “clave” igual al parámetro de búsqueda; en tal caso el valor de “datoBuscado” es igual a uno de ellos y, en caso contrario, su valor queda indefinido }

variablesI,S: tpÍndice; { Límites del espacio de búsqueda }medio: tpÍndice; { Punto medio del espacio de búsqueda }

principioI:=1; S:=n; { Se acota el espacio inicial de búsqueda }mientrasQue ¬(I=S) hacer { Se realiza una búsqueda binaria o dicotómica }

medio:= (I+S) div 2;si clave≤T[medio].clave

entonces S:=medio;si_no I:=medio+1;

finSifinMQ{ Al llegar a I=S, se discrimina si ha habido éxito en la búsqueda }si clave=T[I].clave

entonces datoBuscado:=T[I]; éxito:=cierto;si_no éxito:=falso;

finSiFin.

Page 22: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

23Diego Gutiérrez

Vectores: operaciones de búsqueda y fusión

1 2 3 4 5 6 7 8

10 45 71 88 102 102 221 234

∆I ∆S

∆I ∆S

∆I ∆S

∆I ∆S∆I∆S

1 2 3 4 5 6 7 8

10 45 74 88 102 102 221 234

∆I ∆S∆I ∆S

∆I∆S

Page 23: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

24Diego Gutiérrez

Por qué hacer esto?

Diccionario: parece lógico…Ejemplo anterior: no tan evidente…

Page 24: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

25Diego Gutiérrez

Los algoritmos de búsqueda secuencial en tabla ordenada requieren, en el caso peor y en casos intermedios, un tiempo de ejecución que crece lineal o proporcionalmente al valor de la dimensión n de la tabla.

Buscar en una tabla de 10 millones de elementos lleva, esencialmente, 10 veces más que en una de un millón (de media)

Los algoritmos de búsqueda dicotómica requieren un tiempo de ejecución proporcional a log(n)

Buscar en una tabla de 10 millones de elementos lleva, 1.16 vecesmás que en una de un millón (de media)

Page 25: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

26Diego Gutiérrez

Supongamos un segundo para buscar en un millón de elementos

Lineal Dicotómica2 millones 2 sg 1.05 sg4 millones 4 sg 1.10 sg64 millones 64 sg 1.30 sg

Y si no, probad a buscar una palabra en el diccionario secuencialmente!

Page 26: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

27Diego Gutiérrez

Supongamos que el tiempo de ejecución de cada algoritmo es proporcional al número de veces que deben iterar sus respectivos bucles de búsqueda…

…y que cada iteración del algoritmo secuencial es 100 veces más rápida que la del algoritmo de búsqueda dicotómica.

Page 27: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

28Diego Gutiérrez

Page 28: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

29Diego Gutiérrez

Ejercicio planteado:

Si existen elementos repetidos en la tabla, ¿cuál devolverá el algoritmo?

Supongamos una tabla muy grande con registros ciudades; cada registro contiene el nombre de la ciudad y el país al que pertenece. La tabla está ordenada por orden alfabético del país, y puede haber más de una ciudad perteneciente a un país.Escribir un programa que saque por pantalla los nombres de todas las ciudades de la tabla que pertenezcan a un país suministrado como parámetro

Page 29: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

30Diego Gutiérrez

Ejercicio planteado:

La clave de búsqueda es por tanto el paísRegistro.nombrePais

Una vez encontrado por búsqueda dicotómica (“tabla muy grande”), dado que no se puede saber qué elemento de todos los posibles va a devolver el algoritmo, podemos realizar una búsqueda secuencial a izquierda y derecha del elemento devuelto e ir sacando por pantalla las ciudades mientras pertenezcan al mismo país

Page 30: Tema 21. Búsqueda dicotómica en vectores ordenadosgiga.cps.unizar.es/~diegog/ficheros/teaching/21.Busqueda... · 2007-12-17 · Los algoritmos de búsqueda secuencial en tabla ordenada

31Diego Gutiérrez

Conclusiones: