Metodos Busqueda Interna

48
ESTRUCTURAS DE DATOS II 1. Introducción 2. Búsqueda 3. Búsqueda interna 4. Búsqueda externa

Transcript of Metodos Busqueda Interna

Page 1: Metodos Busqueda Interna

ESTRUCTURAS DE DATOS II

1. Introducción 2. Búsqueda3. Búsqueda interna4. Búsqueda externa

Page 2: Metodos Busqueda Interna

INTRODUCCIÓN

La búsqueda: Es una operación que nos permite

recuperar información previamente almacenada

El resultado puede ser éxito (encuentra)

Ó fracaso en caso (no se encuentra)

Page 3: Metodos Busqueda Interna

Búsqueda

Se puede realizar sobre:

Elementos ordenados

Elementos desordenados

Page 4: Metodos Busqueda Interna

Búsqueda

Se pueden clasificar en:

• Búsqueda Interna: Cuando los elementos se encuentran en memoria principal

•Búsqueda externa: Cuando todos los elementos se encuentran en memoria secundaria

Page 5: Metodos Busqueda Interna

Búsqueda Interna

Este tipo de búsqueda trabaja con elementos residentes en memoria principal

• Estructuras estáticas (arreglos)

• Estructuras dinámicas (listas encadenadas y árboles)

Page 6: Metodos Busqueda Interna

Búsqueda Interna

Los métodos de búsqueda interna más importantes son:

• Búsqueda Secuencial (Lineal)

• Búsqueda Binaria

• Por transformación de Claves (Hash)

• Árboles de búsqueda

Page 7: Metodos Busqueda Interna

Búsqueda Secuencial

Consiste en revisar elemento por elemento de la estructura de datos hasta encontrar el dato más buscado ó hasta llegar al final de la lista de datos disponibles

• Búsqueda Secuencial en Arreglo Desordenado

• Búsqueda Secuencial en Arreglo Ordenado

• Búsqueda Secuencial en Lista Enlazada Desordenada

• Búsqueda Secuencial en Lista Enlazada Ordenada

Page 8: Metodos Busqueda Interna

Búsqueda SecuencialSecuencial Desordenado1 (V, N ,X){Este algoritmo busca secuencialmente el elemento X en el arreglo desordenado V, de N elementos }{ I es una variable de tipo entero, BANDERA es una variable de tipo Booleano}1. I=1 y BANDERA=Falso2. Repetir mientras (I N) y (BANDERA=FALSO) 2.1 Si V[I] = x entonces Hacer BANDERA =VERDADERO si no Hacer I =I + 1 2.2 {Fin del condicional del paso 2.1}3. {Fin del ciclo des paso 2}4. Si BANDERA = VERDADERO entonces Escribir "El elemento esta en la posición I" si no Escribir "El elemento no esta en el arreglo"5. {Fin del condicional del paso 4}

Page 9: Metodos Busqueda Interna

Búsqueda SecuencialSecuencial Desordenado2 (V, N ,X){Este algoritmo busca secuencialmente el elemento X en el arreglo desordenado V, de N elementos}{ I es una variable de tipo entero}1. I=12. Repetir mientras (I N) y (V[I] X) Hacer I =I + 13. {Fin del condicional del paso 2}4. Si (I>N) entonces Escribir "El elemento no esta en el arreglo" si no Escribir "El elemento esta en la posición I"5. {Fin del condicional del paso 4}

Page 10: Metodos Busqueda Interna

Búsqueda SecuencialSecuencial Ordenado (V, N ,X){Este algoritmo busca secuencialmente el elemento X en el arreglo ordenado V, de N elementos, El arreglo esta ordenado ascendentemente V[1] V[2] … V[N]}{ I es una variable de tipo entero}

1. I=12. Repetir mientras (I N) y (X > V[I]) Hacer I =I + 13. {Fin del condicional del paso 2}4. Si (I>N) o (X<V[I]) entonces Escribir "El elemento no esta en el arreglo" si no Escribir "El elemento esta en la posición I"5. {Fin del condicional del paso 4}

Page 11: Metodos Busqueda Interna

Búsqueda SecuencialSecuencial _Listas (P ,X){Este algoritmo busca secuencialmente el elemento X en la lista cuyo nodo inicial está apuntado por P }{ Q es una variable puntero de tipo entero}

1. Q=P 2. Repetir mientras (QNULL) y (QINFO X ) Hacer Q = QLIGA3. {Fin del condicional del paso 2}4. Si (Q = NULL) entonces Escribir "El elemento no esta en la lista" si no Escribir "El elemento esta en la lista"5. {Fin del condicional del paso 4}

Page 12: Metodos Busqueda Interna

Búsqueda Secuencial BINARIABinaria (V, N ,X){Este algoritmo busca secuencialmente el elemento X en el arreglo ordenado V, de N elementos}{ Izq, Cen y Der son variables de tipo entero, Bandera es una variable de tipo booleano }1. Izq=1, Der=N; y Bandera=FALSO2. Repetir mientras (Izq Der) y (Bandera = FALSO) Hacer Cen = Parte Entera ((Izq + Der)/2)

2.1 Si X=V[Cen] Entonces Hacer Bandera=VERDADERO; si no {Redefinir intervalo de búsqueda}

2.1.1 Si (X>V[Cen]) Entonces Hacer Izq=CEN+1 Si no Hacer Der=Cen-1

2.1.2 {Fin del paso 2.1.1}2.2{fin del condicional del paso 2.1}

3. {Fin del ciclo del paso 2}4. Si (Bandera = Verdadero) Entonces Escribir " El elemento esta en la posición Cen" Si no Escribir " El elemento no esta en el arreglo"5. {Fin del condicional del paso 4}

Page 13: Metodos Busqueda Interna

Búsqueda por Transformación de Claves (Hash)

Este método permite asignar a un valor una posición determinada de un arreglo y de igual forma permite recuperarla fácilmente.

Convierte una clave dada en una dirección (índice), dentro del arreglo.

Page 14: Metodos Busqueda Interna

Búsqueda por Transformación de Claves (Hash)

Dos pasos:

1. Consiste en la aplicación de una función de transformación o función hash a los valores que se van a insertar, para saber en que posición del arreglo quedarán

2. Un método para resolver colisiones, el hecho de que dos valores distintos sean asignados a la misma dirección del arreglo por causa de la función hash, hecho que se conoce como colisión.

Page 15: Metodos Busqueda Interna

Búsqueda por Transformación de Claves (Hash)

• La recuperación de colisiones, consiste en como reasignar y recuperar un valor que por motivo de la función hash quede en la misma posición de otro.

H (K1) = d donde K1 K2

H (K2) = d

Existen varios métodos:• Función Modulo• Función Cuadrática• Función Truncamiento• Función Plegamiento

Page 16: Metodos Busqueda Interna

Transformación de Claves (Hash)

• La recuperación de colisiones, consiste en como reasignar y recuperar un valor que por motivo de la función hash quede en la misma posición de otro.

Existen varios métodos:

• Función Modulo• Función Cuadrática• Función Truncamiento• Función Plegamiento

Page 17: Metodos Busqueda Interna

Función Modulo (Por división)Consiste en tomar el residuo de la división de la clave entre el número de componentes del arreglo. Suponga que se tiene un arreglo de N elementos y K es la clave del dato a buscar.

La función hash queda:

H(k) = (K mod N) +1

Para lograr una mayor uniformidad en la distribución, N debe ser un número primo. (El número primo próximo a N)

Page 18: Metodos Busqueda Interna

Función Modulo (Por división)Sea N=100,el tamaño del arregloSus direcciones de 1-100.

Sea K1 = 7259 K2 = 9359Dos claves que deban asignarse posiciones en

el arreglo

H(K1) = (7259 mod 100) +1=60 H(K2) = (9359 mod 100) +1=60Donde H(K1) es igual a H(K2) y K1 es distinto

de K2, es una colisión

Page 19: Metodos Busqueda Interna

Función Modulo (Por división)

Se aplica N igual a un valor primo en lugar de utilizar N=100

H(K1) = (7259 mod 97) +1=82 H(K2) = (9359 mod 97) +1=48

Con N=97 se ha eliminado la colisión

Page 20: Metodos Busqueda Interna

Función CuadradoConsiste en elevar al cuadrado la clave y tomar los dígitos centrales como dirección.

El número de dígitos a tomar queda determinado por el rango del índice.

La función hash queda:

H(k) = dígitos centrales (K 2) +1

Para lograr una mayor uniformidad en la distribución, N debe ser un número primo. (El número primo próximo a N)

Page 21: Metodos Busqueda Interna

Función CuadradoSea N=100,el tamaño del arregloSus direcciones de 1-100.

Sea K1 = 7259 K2 = 9359Dos claves que deban asignarse posiciones en

el arreglo

H(K12) = dígitos_centrales(52693081) +1 = 94

H(K22) = dígitos_centrales (87590881) +1 =

91

Page 22: Metodos Busqueda Interna

Función Plegamiento

Consiste en dividir la clave en partes de igual número de dígitos (La última puede tener menos dígitos) y operar con ellos tomando como dirección los dígitos menos significativos.

La operación entre las partes puede hacerse por medio de sumas o multiplicaciones.

H(k)=digitos_menos_significativos((d1..di)+(di+1..dj)+...+(d1..dn))+1

Page 23: Metodos Busqueda Interna

Función PlegamientoSea N=100,el tamaño del arregloSus direcciones de 1-100. Sea K1 = 7259

K2 = 9359Dos claves que deban asignarse posiciones en el

arreglo

H(K12) = DígitosMenosSignificativos(72+59)+1 =

(131)+1=32H(K2

2) = DígitosMenosSignificativos(93+59)+1 = (152)+1=53

Se toman solamente dos dígitos, por que el arreglo va de 1 a 100

Page 24: Metodos Busqueda Interna

Función TruncamientoConsiste en tomar algunos de la clave y formar con ellos una dirección.

Este método es de los más sencillos, pero es también de los que ofrece menos uniformidad en la distribución de las claves.

Se pueden elegir los dígitos de las posiciones pares o impares. H(k) = elegir_digitos(d1,d2,...,dn)+1

Page 25: Metodos Busqueda Interna

Función Truncamiento

Sea N=100,el tamaño del arregloSus direcciones de 1-100.

Sea K1 = 7 259 K2 = 9 359Dos claves que deban asignarse posiciones en

el arreglo H(K1

2) = Elegir_dígitos(7259) +1 = 76 H(K2

2) = Elegir_dígitos(9359) +1 = 96

Se toman el primer y tercer número de la clave y se une de izquierda a derecha

Page 26: Metodos Busqueda Interna

Soluciones de colisiones

Existe una colisión cuando hay una sola dirección para dos claves diferentes.

• Hay un costo excesivo para resolver colisiones

Métodos:• Reasignación

• Arreglos anidados

• Encadenamiento

Page 27: Metodos Busqueda Interna

Reasignación

Existe varios enfoques que trabajan bajo el principio de comparación y reasignación de elementos:

Enfoques de reasignación:

1.Prueba lineal

2.Prueba cuadrática

3.Doble dirección hash

Page 28: Metodos Busqueda Interna

Prueba Lineal

Consiste en recorre el arreglo secuencialmente a partir del punto de colisión, buscando el elemento

Concluye:

• El elemento es hallado

• Se encuentra en una posición vacía

El arreglo se considera como una estructura circular

El siguiente elemento después del último es el primero

Page 29: Metodos Busqueda Interna

PRUEBA LINEAL

PruebaLinal (V, N ,K){Este algoritmo busca el dato con clave K en el arreglo V de N elementos. Resuelve el

problema de las colisiones por medio de la prueba lineal}{ D y DX son variables de tipo entero}1. D=H[K] {Genera dirección}2. Si (V[D] == K) entonces Escribir “El elemento esta en la posición D”

Si no Hacer DX=D+1;

2.1 Repetir mientras (DX <= N) y (V[DX]<> K) y (V[DX]<>VACIO) y (DX<>D) Hacer DX=DX+1;

2.1.1 Si (DX==N+1) Entonces Hacer DX=1 Si no Hacer Der=Cen-1

2.1.2 {Fin del paso 2.1.1}2.2{fin del ciclo del paso 2.1}

2.3 Si (V[DX] == K) entonces Escribir “El elemento esta en la posición DX”

Si no Escribir “El elemento no está en el arreglo” 2.4{ Fin del condicional del paso 2.3}3 {Fin del condicional del paso 2}

Page 30: Metodos Busqueda Interna

Prueba Lineal

Ejemplo:

V=[25, 43, 56, 35, 54, 13, 80, 104]

Usando la función hash:

H(K)= (k mod 10) +1

Page 31: Metodos Busqueda Interna

Prueba LinealEjemplo:V=[25, 43, 56, 35, 54, 13, 80,

104]H(K)= (k mod 10)

+143

54

25

56

8

104

13

35

K H(K)

25 6

43 4

56 7

35 6

54 5

13 4

80 1

104 5

3

4

5

2

6

7

1

10

9

8

Page 32: Metodos Busqueda Interna

Prueba Cuadrática

Funciona similar a la prueba lineal, pero con saltos cuadráticos de las direcciones que se generarán:

Ejemplo:

• D+(1) 2, D+(2) 2, D+(3) 2,+…D+i2• D+1, D+4, D+9, …D+i2

Permite una mejor distribución de las claves colisionadas

Page 33: Metodos Busqueda Interna

Desventaja:• Pueden quedar casillas sin visitar, además resulta

difícil definir una condición general para detener el ciclo.

• Se puede utilizar una variable auxiliar, que dirija el recorrido de tal forma que garanticen que serán visitadas todas las casillas.

Prueba Cuadrática

Page 34: Metodos Busqueda Interna

Prueba Cuadrática

Ejemplo:

V=[25, 43, 56, 35, 54, 13, 80, 104, 55]

Usando la función hash:H(K)= (k mod 10) + 1

D I DX

6 12

710

Solución de colisiones por la prueba cuadrática K=35

Page 35: Metodos Busqueda Interna

PruebaCuadratica (V, N ,K){Este algoritmo busca el dato con clave K en el arreglo V de N elementos. Resuelve el

problema de las colisiones por medio de la prueba cuadrática}{ D, DX e I son variables de tipo entero}1. D=H[K] {Genera dirección}2. Si (V[D] == K) entonces Escribir “El elemento esta en la posición D”

Si no Hacer I = 1 y DX = D + I2;

2.1 Repetir mientras (V[DX] <> K) y (V[DX]<>VACÍO) Hacer I = I + 1; DX = D + I2 ;

2.1.1 Si (DX > N) Entonces Hacer I=0; DX=1 y D=1;

2.1.2 {Fin del paso 2.1.1}2.2{fin del ciclo del paso 2.1}

2.3 Si (V[DX] == K) entonces Escribir “El elemento esta en la posición DX”

Si no Escribir “El elemento no está en el arreglo” 2.4{ Fin del condicional del paso 2.3}3 {Fin del condicional del paso 2}

Prueba Cuadrática

Page 36: Metodos Busqueda Interna

Doble Dirección

• Consiste en una colisión detectada, para generar otra dirección aplicando una función hash a la dirección previamente obtenida.

• El proceso termina cuando el elemento es encontrado o existe una posición vacía

Page 37: Metodos Busqueda Interna

Doble DirecciónEjemplo:V=[25, 43, 56, 35, 54, 13, 80,

104]H(K)= (k mod 10)

+1 43

54

25

56

80

13

104

35

3

4

5

2

6

7

1

10

9

8

K H(K) H’ (D)

H’(D’)

H’ (D´´)

25435635541380

104

64765415

---8-6-7

-----8-9

-----

10--

Page 38: Metodos Busqueda Interna

Se define una función Hash H´ para calcular direcciones alternativas cuando haya colisiones

H’(D)=((D+1) mod 10) + 1

Doble Dirección

Page 39: Metodos Busqueda Interna

DobleDireccion(V, N ,K){Este algoritmo busca el dato con clave K en el arreglo V de N elementos. Resuelve el

problema de las colisiones por medio de la doble dirección hash}{ D y DX son variables de tipo entero}1. D=H[K] {Genera dirección}2. Si (V[D] == K) entonces Escribir “El elemento esta en la posición D”

Si no Hacer DX = H’ (D);

2.1 Repetir mientras (DX <=N) y (V[DX]<> K) y (V[DX]<>VACÍO) y (DX<>D) Hacer DX = H’ (DX) ;

2.2{fin del ciclo del paso 2.1} 2.3 Si (V[DX] == K) entonces Escribir “El elemento esta en la posición DX”

Si no Escribir “El elemento no está en el arreglo” 2.4{ Fin del condicional del paso 2.3}3 {Fin del condicional del paso 2}

Doble Dirección

Page 40: Metodos Busqueda Interna

En cada elemento del arreglo tenga otro arreglo, donde se almacenan los elementos colisionados

• Solución ineficiente• costo de memoria• Número de valores colisionados

ARREGLOS ANIDADOS

Page 41: Metodos Busqueda Interna

Arreglos Anidados

Ejemplo:V=[25, 43, 56, 35, 54, 13, 80, 104]

Usando la función hash:H(K)= (k mod 10) +1

80 - - - -

--

43542556---

--

1310435----

---------

---------

---------

Page 42: Metodos Busqueda Interna

Cada elemento del arreglo tiene un apuntador a una lista ligada, la cual se irá generando e ira almacenando los valores colisionados

Es un método eficiente debido al dinamismo de las listas

Desventajas:• Ocupa un espacio adicional al de la tabla• Se requiere manejo de lista ligada• Si la lista crecen demasiado se pierde el acceso directo del método hash

ENCADENAMIENTO

Page 43: Metodos Busqueda Interna

EncadenamientoEjemplo:V=[25, 43, 56, 35, 54, 13, 80, 104]Almacenados usando la función hash:

H(K)= (k mod 10) +143

54

25

80

56

13

104

3525 6

43 4

56 7

35 6

54 5

13 4

80 1

104 5

K H(K)

Page 44: Metodos Busqueda Interna

En el curso de Estructuras de Datos I, se analizó el uso de los árboles como una estructura eficiente y poderosa para almacenar y recuperar información.

Para los métodos de búsqueda se refiere a la estructura trie, como una variante de la estructura tipo árbol

Un trie es una estructura similar a un árbol con N raíces, donde cada nodo del árbol puede ser un trie

Arboles de Búsqueda

Page 45: Metodos Busqueda Interna

Arboles de búsqueda

AB

C D E H P ST

NTE

AJOA O E N A

RAS

E I OA O

BE

N

TRA

SDE

STA CIA

TRE

GUN

BRE

M

ARA R

Representación de Tries

Page 46: Metodos Busqueda Interna

Arboles de búsqueda

AB

C D E H P ST

N A

A OE N A

R

E I OA O

BE

NTRA

SDE

STA CIA

GUNBRE

N

ARA

R

Representación de un trie con discriminación 2

TE JO

TRE

RAS

Page 47: Metodos Busqueda Interna

Arboles de búsqueda

NTE

A N

BE

NSDE

Representación del trie como Bosque

AJO

A B C

O

TRA

D

E

E

TRE

A

H

CIA

STA

A

RA

R

P

O E

GUN

N

S

I O

BRE

RAS

T

Page 48: Metodos Busqueda Interna

Arboles de búsqueda

NTE

A

N

BE

N

SDE

Representación del bosque como árbol binario

AJO

A

B

C

O

TRA

D

E

E

TRE

A

H

CIA

STA

RAS

T

A

RA

R

P

O

E

GUN

N

S

I

O

BRE