Unidad 8 metodos_de_busqueda

6
ESTRUCTURAS DE DATOS UNIDAD 8. MÉTODOS DE BÚSQUEDA La búsqueda se refiere a la operación de encontrar la posición de un elemento, entre un conjunto de ellos. Existen diferentes algoritmos para realizar una búsqueda. La operación de búsqueda de un elemento consisten en: 1. Determinar si el número pertenece al conjunto y en ese caso indicar su posición en el. 2. Determinar si el número no pertenece al conjunto. Los métodos de búsqueda más comunes son: Búsqueda Secuencial o Lineal Búsqueda Binaria Búsqueda por Transformación de claves (HASH) Búsqueda Secuencial o Lineal El método más sencillo de búsqueda en un conjunto de datos almacenados en secuencia, como un arreglo, es recorrer este arreglo posición por posición. Esta búsqueda compara cada elemento del vector con el valor deseado hasta que este se encuentra o hasta que se termine de recorrer el arreglo. Búsqueda Binaria En una búsqueda secuencial se comienza con el primer elemento del vector y se busca en el hasta que se encuentra el elemento deseado o bien hasta que se alcanza el final del vector. Este puede ser un método adecuado para pocos datos pero se requiere una técnica más eficaz para grandes conjuntos de datos. La búsqueda binaria utiliza el método de “Divide y Vencerás”. Con este método se examina primero el elemento central de la lista, si este es el elemento buscado, entonces la búsqueda ha terminado en caso contrario se determina si el elemento buscado está en la primera o en la segunda mitad de la lista y a continuación se repite el proceso utilizando ahora el elemento central de esa sublista. 1

Transcript of Unidad 8 metodos_de_busqueda

Page 1: Unidad 8 metodos_de_busqueda

ESTRUCTURAS DE DATOS

UNIDAD 8. MÉTODOS DE BÚSQUEDA

La búsqueda se refiere a la operación de encontrar la posición de un elemento, entre un conjunto de ellos. Existen diferentes algoritmos para realizar una búsqueda.

La operación de búsqueda de un elemento consisten en:

1. Determinar si el número pertenece al conjunto y en ese caso indicar su posición en el.

2. Determinar si el número no pertenece al conjunto.

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

Búsqueda Secuencial o Lineal Búsqueda Binaria Búsqueda por Transformación de claves (HASH)

Búsqueda Secuencial o Lineal

El método más sencillo de búsqueda en un conjunto de datos almacenados en secuencia, como un arreglo, es recorrer este arreglo posición por posición. Esta búsqueda compara cada elemento del vector con el valor deseado hasta que este se encuentra o hasta que se termine de recorrer el arreglo.

Búsqueda Binaria

En una búsqueda secuencial se comienza con el primer elemento del vector y se busca en el hasta que se encuentra el elemento deseado o bien hasta que se alcanza el final del vector. Este puede ser un método adecuado para pocos datos pero se requiere una técnica más eficaz para grandes conjuntos de datos.

La búsqueda binaria utiliza el método de “Divide y Vencerás”. Con este método se examina primero el elemento central de la lista, si este es el elemento buscado, entonces la búsqueda ha terminado en caso contrario se determina si el elemento buscado está en la primera o en la segunda mitad de la lista y a continuación se repite el proceso utilizando ahora el elemento central de esa sublista.

Debido a la naturaleza del proceso los elementos del arreglo deben estar previamente ordenados.

liz=0;lde=nmax-1;c=(liz+lde)/2;while(liz!=lde && A[c]!=bus){ if(bus>A[c])

liz=c+1;else

lde=c-1;c=(liz+lde)/2;}

if (A[c]==bus)System.out.println("Encontrado en pos: "+c);

else System.out.println("El numero no existe en este arreglo");

1

Page 2: Unidad 8 metodos_de_busqueda

ESTRUCTURAS DE DATOS

Transformación de claves (Hashing)

El método de transformación de claves consiste en convertir una clave dada (numérico o alfanumérico) en un índice o dirección dentro de un arreglo o un archivo. La correspondencia entre las claves y la dirección en el medio de almacenamiento se establece por una función de conversión llamada función HASH.

Si se tuviera una lista de 100 empleados y cada uno de ellos se identificara con una clave del 1 al 100, evidentemente puede existir una correspondencia directa entre la clave y la dirección definida en un vector que contenga 100 elementos. Si la identificación del empleado fuera el número de seguridad social que contiene hasta 9 dígitos, se necesitarían aproximadamente 999,999,999 posiciones, cantidad difícil de tener disponible en memoria principal sobre todo si la cantidad de elementos reales de información son solo 100 empleados.

Para hacer uso del número de seguridad social como un índice en la tabla se necesita un medio para convertir el campo clave en una dirección o índice pequeño.

La función de transformación de claves, convierte la clave k en una dirección d.

d = H ( k )

Por Ejemplo

IMSS= 198724859. d = H(198724859)

d= 75; la dirección real es 75

Métodos de transformación de claves

Existen diversos métodos de transformación, que tienen en común la necesidad de convertir claves en direcciones o índices reales. La función de conversión equivale a una caja negra que podríamos llamar calculador de direcciones o función de transformación de claves, cuando se desee localizar o almacenar un elemento de clave x, el calculador de direcciones indicará qué posición del arreglo le corresponde. Algunos métodos de transformación son los siguientes.

a) Truncamiento. Ignora parte de la clave y utiliza la parte restante directamente como índice.Si la clave es un entero de ocho dígitos entonces el primero, el segundo y el quinto dígito desde la derecha, pueden formar una dirección real. Aunque es un método rápido puede fallar para distribuir las claves de manera uniforme.

Clave: 8 9 5 2 4 3 7 2 Dirección: d = 272

b) Plegamiento. Consiste en la partición de la clave en diferentes segmentos y la combinación de estos segmentos de un modo conveniente (a menudo utilizando la suma o la multiplicación) para obtener el índice.

Generalmente en esta operación se deprecian los números más significativos, obtenidos por el arrastre o acarreo.

2

Page 3: Unidad 8 metodos_de_busqueda

ESTRUCTURAS DE DATOS

6 2 5 3 8 1 9 4

625 + 381 + 94 = 1100

Si solo se tienen 100 posiciones

d=1100 //Se elimina al más significativo

d=100

c) Aritmética modular. Esta consiste en convertir la clave a un entero, dividirlo por el tamaño del rango del índice y tomar el residuo como resultado.

Ejemplo 1: Si se tienen de 0 a 100 posiciones, entonces:

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

H(k)=k mod (101)

Si H(k) = 234661234 mod 101

d=51

Ejemplo 2: Si k= JONAS se convierte a numérico.

K= 10+15+14+1+19

K=63

H(k) = k mod (101)

H(k)= 63 mod 101

d= 63

d) Mitad del cuadrado. Consiste en calcular el cuadrado de la clave original y posteriormente se elimina un mismo número de dígitos a ambos extremos del valor obtenido.

a) K= 4205 k2= 176 82 025 d=82

b) K= 7148 k2=510 93 904 d=93

3

Page 4: Unidad 8 metodos_de_busqueda

ESTRUCTURAS DE DATOS

Colisiones

La función de conversión H(k) no siempre proporciona valores distintos, puede suceder que para dos claves diferentes se obtenga la misma dirección. Esta situación se denomina Colisión y se deben encontrar métodos para su correcta resolución.

Por ejemplo: a) H(123445678) =123445678 mod 101=44

b)H(123445880) = 123445880 mod 101=44

Una primera forma para solucionar este conflicto es la utilización de algún método para la generación de una posición alternativa, es decir calcular una segunda dirección, y si esta aún no es una dirección correcta se produce una tercera dirección.

1° H(k): Aritmética modular

H( 12345678) = 44 Como esta dirección ya está ocupada, se

recurre a una segunda alternativa.

2° H(k) : Plegamiento

H(12345678) = 123+456+779= 1257 d=57

Resolución por Encadenamiento

Una solución más efectiva al conflicto de colisiones es permitir una lista enlazada de elementos formada a partir de cada posición del arreglo.

En este método de resolución de colisiones conocido como encadenamiento, cada posición del arreglo apunta a la referencia del elemento inicial de la lista.

 

43  

44 12345779

45  

…  

57  

 

 

43  

44

45  

46  

47  

  4

12 345678 12345779

Page 5: Unidad 8 metodos_de_busqueda

ESTRUCTURAS DE DATOS

5