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

Preview:

Citation preview

1Diego Gutiérrez

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

3Diego Gutiérrez

Por qué algoritmos de búsqueda?

4Diego Gutiérrez

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

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

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.

8Diego Gutiérrez

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…

10Diego Gutiérrez

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

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.

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

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

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

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

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

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

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

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

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

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

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.

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

24Diego Gutiérrez

Por qué hacer esto?

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

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)

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!

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.

28Diego Gutiérrez

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

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

31Diego Gutiérrez

Conclusiones:

Recommended