Tema4_Busqueda

12

Click here to load reader

Transcript of Tema4_Busqueda

Page 1: Tema4_Busqueda

1

Búsqueda

• Introducción

• Algoritmos

• Complejidad

Page 2: Tema4_Busqueda

2

Introducción

• Se trata de hallar un elemento de dato a través de una valor llave. Existen dos grupos de métodos de búsqueda:

– Métodos simples: Búsqueda lineal sobre un array

Búsqueda lineal sobre una lista enlazada

Búsqueda lineal sobre un array ordenado

Búsqueda lineal sobre una lista enlazada

Page 3: Tema4_Busqueda

3

Introducción

– Métodos avanzados: Búsqueda binaria sobre un array ordenado

Búsqueda por interpolación sobre un array ordenado

Búsqueda por interpolación sobre un array ordenado

Búsqueda binaria sobre un árbol binario de búsqueda

Búsqueda usando estrategia hash

Page 4: Tema4_Busqueda

4

Algoritmos

• Búsqueda lineal sobre un array

Consiste en una búsqueda secuencial sobre el array.

• Búsqueda lineal sobre una lista enlazada

Consiste en una búsqueda secuencial sobre la lista.• Búsqueda lineal sobre un array ordenado

Consiste en una búsqueda secuencial sobre el array

• Búsqueda lineal sobre una lista ordenada

Consiste en una búsqueda secuencial sobre la lista

Page 5: Tema4_Busqueda

5

Algoritmos

• Búsqueda binaria sobre un array ordenado

Aplica la técnica de dividir y vencer. Consiste en dividir por la mitad el array original obteniendo dos subarrays. La búsqueda se limita a uno de los subarrays.

Page 6: Tema4_Busqueda

6

Algoritmo Búsqueda Binaria

Hallar elemento 22

Page 7: Tema4_Busqueda

7

Algoritmo Búsqueda Binaria

Hallar elemento 22

Page 8: Tema4_Busqueda

8

Algoritmo Búsqueda Binaria

Hallar elemento 22

Page 9: Tema4_Busqueda

9

Algoritmo Búsqueda Binaria

Hallar elemento 22

Page 10: Tema4_Busqueda

10

Algoritmo Búsqueda Binaria

Pseudocódigo (versión recursiva):

Algorithm BinarySearch(S, k, low, high)if low > high then

return NO_EXISTE_LLAVEelse mid (low+high) / 2

if k = key(mid) thenreturn key(mid)

else if k < key(mid) thenreturn BinarySearch(S, k, low, mid-1)

else return BinarySearch(S, k, mid+1, high)

Page 11: Tema4_Busqueda

11

Algoritmo Búsqueda BinariaTiempo de ejecución:

• El rango de elementos candidatos a buscar es la mitad después de cada comparación.

• En la implementación con array, el acceso por rango toma un tiempo O(1), por tanto, la búsqueda binaria corre en un tiempo O(log n).

Page 12: Tema4_Busqueda

12

Algoritmos• Búsqueda por interpolación sobre un array

ordenado

Es un método mejorado al de búsqueda binaria. Se diferencia de ella en que la partición de los subarrays se realiza de manera lineal según la siguiente fórmula:

ind_interp = entero (Pri + (Ult - Pri -1) (llave - A[Pri]) )

A[Ulti] - A[Prim]

• Búsqueda por Fibonacci sobre un array ordenadoEs un método mejorado al de búsqueda binaria. Se diferencia de ella en que la partición de los subarrays se realiza usando los números de Fibonacci:

Fib[0] = 0, Fib[1] = 1, Fib[k] = Fib[k-1] + Fib[k-2] k>1