Está en la página 1de 14

Estructura de Datos

Unidad 6 Mtodos de bsqueda


Mtodos de Bsqueda
El sentido de la ordenacin de informacin, sea
interna o externa, es poder llegar a los datos
ms rpidamente.
Existen varios mtodos de bsqueda:
Secuencial
Se recorre toda la estructura (arreglo, lista, archivo) hasta
encontrar el dato buscado
Lenta pero segura, rpida de implementar
Binaria
Busca por la mitad hasta llegar al dato buscado o terminar la
estructura
Hash
Usa una funcin para obtener la posicin donde est el dato
buscado
Bsqueda secuencial

public static void Buscar(int v[]){
int valor=Integer.parseInt(JOptionPane.showInputDialog("Valor a buscar:"));
int i=0;
boolean bandera=false;
while(i<v.length&&!bandera){
if(v[i]==valor){
System.out.println();
System.out.println("El valor "+valor+" fue encontrado en la posicion "+i);
bandera=true;
}
i++;
}
if(!bandera){
System.out.println();
System.out.println(" El valor no se encuentra en el Arreglo");
}

}
Bsqueda secuencial en vector ordenado
public static void Buscar(int v[]){
int valor=Integer.parseInt(JOptionPane.showInputDialog("Valor que
desea buscar: "));
int i=0;
while(i<v.length&&valor>v[i])
i++;
System.out.println();
if(i<v.length&&v[i]==valor)
System.out.println("El valor "+valor+" fue encontrado en la
posicion "+i);
else
System.out.println("SECUENCIAL ORDENADO: El valor no se
encuentra en el Arreglo");
}
Bsqueda binaria
public static void binaria(int v[]){
int val=Integer.parseInt(JOptionPane.showInputDialog("Valor que desea Buscar"));
int i=0,j=v.length-1,m=0;
boolean ban=true;
while(i<=j&&ban){
m=(i+j)/2;
if(val==v[m]){
ban=false; }
else{
if(val<v[m])
j=m-1;
else
i=m+1; }
}
System.out.println();
if(!ban)
System.out.println("BINARIA: El valor "+val+" fue encontrado en la posicion "+m);
else
System.out.println("BINARIA: El valor No fue encontrado en el Vector");
}
HASH
Si la estructura donde est la informacin es
muy grande, una bsqueda binaria puede
resultar ineficiente
La informacin generalmente tiene algo que la
identifica (nmero de control, RFC, nmero de
cliente, etc.) que se conoce como llave o clave
A veces esa clave indica por s misma la
posicin dentro de la estructura (ndice) pero no
siempre es posible
No es uno a uno (nmero de control)
La clave es alfanumrica (RFC)
HASH
HASH (cont.)
HASH = picar y mezclar (en ingls)
La funcin HASH es una funcin de conversin
o localizacin o dispersin para transformar la
clave en un ndice (posicin dentro de la
estructura)
Reduce un dominio amplio generando un
conjunto menor de valores
A veces, una funcin genera el mismo valor
para dos claves diferentes (colisin) y se aplican
otros algoritmos para resolver esa situacin
Ejemplo HASH
0
434343 Juan Prez


20
454545 Pedro Lpez
21
414141 Luis Luna

587
333333 Ricardo Tapia
588
333334 Peter Parker
589
333335 Tony Stark


999
939393 Harry Osmond
H(434343) = 0

H(333333) = 587

H(939393) = 999
Funcin HASH
Se espera que cumpla con:
Destribuir las claves uniformemente, generando
pocas colisiones
Manejo simple de colisiones, tal que no aumente
significativamente el tiempo medio de administracin
Asegurar tiempo ptimo para evitar retraso por
clculo
Usos
Tablas de Hash= tablas de ndices que agilizan el
proceso de bsqueda de informacin (bases de datos
sobre todo)
Algoritmos de encriptacin
Mtodos para HASH
Existen varios mtodos para implementar una funcin HASH
Restas sucesivas: esta funcin se emplea con claves numricas entre las
que existen huecos de tamao conocido, obtenindose direcciones
consecutivas. Por ejemplo, si el nmero de expediente de un alumno
universitario est formado por el ao de entrada en la universidad, seguido
de un nmero identificativo de tres cifras, y suponiendo que entran un
mximo de 400 alumnos al ao, se le asignaran las claves:
1998-000 --> 0 = 1998000-1998000
1998-001 --> 1 = 1998001-1998000
1998-002 --> 2 = 1998002-1998000
...
1998-399 --> 399 = 1998399-1998000

...
yyyy-nnn --> N = yyyynnn-1998000+(400*(yyyy-1998))

Mtodos para HASH
Aritmtica modular
Para claves numricas; asegura un mnimo de
colisiones siempre que el rango del ndice sea un
nmero primo
En el caso de claves alfanumricas se suma el
ASCII de cada carcter antes de realizar la
operacin
El ndice equivale al residuo de dividir la clave
entre el tamao del rango del ndice
Por ejemplo, rango de 11
Clave 33 ndice 0
Clave 30 ndice 8
Mtodos para HASH (cont.)
Mitad del cuadrado
Se eleva al cuadrado la clave y se toma como
ndice cierto nmero de dgitos siempre de las
mismas posiciones; la cantidad de dgitos a usar
depende del rango del ndice
Por ejemplo, tomar siempre los dgitos de las
posiciones 4, 2 y 0
Clave = 38, el cuadrado es 1444
Posicin 4 = 0, posicin 2 = 4, posicin 0 = 4
ndice = 044
Clave = 97, el cuadrado es 9409
Posicin 4 = 0, posicin2 = 4, posicin 0 = 9
ndice = 049
Manejo de colisiones
Colisin = dos o ms entradas producen la
misma salida
Opciones
Zona de excedentes o desbordamientos (bsqueda
secuencial)
Generar otra direccin
Direccionamiento abierto
Exploracin lineal x+1, x+2, x+3
Exploracin cuadrtica x+1, x+4, x+9, , x+i
2
Doble hash x+h
2
(), x+2h
2
(), x+3h
2
(),


Manejo de colisiones (cont.)
Encadenamiento
Semejante a la estructura usada en radixsort
Vector con tantas posiciones como posibles valores
pueda generar la funcin hash
Cada posicin del vector tiene una lista enlazada
Cada registro se agrega al vector
Es ms fcil de controlar las colisiones, pero requiere
una estructura auxiliar para guardar el vector en caso de
archivos
Compartimentos
Se almacenan varios elementos en la misma direccin

También podría gustarte