Sunteți pe pagina 1din 24

Estructura de Datos

Mtodos de Bsqueda

Ing. Mximo Tandazo.

Introduccin
Qu es Bsqueda?
La bsqueda es el proceso de localizar un registro
(elemento) con un valor de llave particular. La
bsqueda termina exitosamente cuando se localiza el
registro que contenga la llave buscada, o termina sin
xito, cuando se determina que no aparece ningn
registro con esa llave.

Bsqueda Secuencial
Qu es Bsqueda Secuencial?
El mtodo de bsqueda secuencial es de los mas fciles
que podemos utilizar para buscar datos (es aconsejable
utilizarlo cuando el vector no es de gran tamao), ya que
no requiere que el vector este ordenado, el mtodo
consiste en recorrer el vector de manera secuencial hasta
encontrar el dato a buscar.

Bsqueda Secuencial
Bsqueda Secuencial
Este mtodo se usa para buscar un elemento de un arreglo
(vector), es explorar secuencialmente el arreglo, es decir;
recorrer el arreglo desde el primer elemento hasta el
ltimo. Si se encuentra el elemento buscado se debe
visualizar un mensaje similar a Fin de Bsqueda o
Elemento encontrado y otro que diga posicin = en caso
contrario, visualizar un mensaje similar a Elemento no
existe en el arreglo.

Bsqueda Secuencial

20 35 40 1 5 10 100 500 25 60

Bsqueda Secuencial
public int Secuencial(int prmMatriz[], int prmValor) {
int t = prmMatriz.length;
int x = 0;
for (int i=0; i< t; i++) {
if (prmMatriz[i] == prmValor) {
x = i;
break;
}
}
return x;
}

Bsqueda Binaria
Consiste en dividir el arreglo por su elemento medio en
dos subarreglos ms pequeos, y comparar el elemento
con el del centro. Si coinciden la bsqueda se termina. Si
el elemento es menor debe estar en el primer subarreglo,
si es mayor est en el segundo.

Bsqueda Binaria
Condiciones de una Bsqueda Binaria

Definir el tamao del arreglo.


Los elementos del arreglo deben de estar ordenados.
Los elementos del arreglo no deben de estar duplicados.
Saber cual es el elemento a buscar.

Bsqueda Binaria
Funcionamiento de la Bsqueda
Binaria
Se determina el elemento central del arreglo y se
compara con el valor que se esta buscando, si coincide
termina la bsqueda y en caso de no ser as se determina
si el dato es mayor o menor que el elemento central, de
esta forma se elimina una mitad del arreglo junto con el
elemento central para repetir el proceso hasta
encontrarlo o tener solo un elemento en el arreglo.

Bsqueda Binaria
public int Binaria(int prmMatriz[], int prmClave) {
int central, bajo, alto;
int valorCentral;
bajo = 0;
alto = prmMatriz.length - 1;
while
(bajo <= alto) {
central = (bajo + alto)/2;
valorCentral = prmMatriz[central];
if (prmClave == valorCentral) {
return central;
} else if (prmClave < valorCentral) {
alto = central -1;
} else {
bajo = central + 1;
}
}
return

-1; //elemento no encontrado

// ndice de elemento central


// valor del ndice central

// encontrado, devuelve posicin


// ir a sublista inferior

// ir a sublista superior

Bsqueda
Transformacin de claves

Bsqueda Transformacin
de claves
Es una tcnica de bsqueda que permite que un registro
se recupere directamente con un mnimo de
comparaciones o sin ellas.
Esto se lleva a cabo reservando una posicin en la tabla
para cada posible valor de clave, de tal manera que todas
las posiciones queden incluidas de acuerdo al valor de la
clave.

Un registro se recupera simplemente usando la clave, o


una funcin de la clave, como ndice en la tabla.

Bsqueda Transformacin
de claves

Para almacenar cada valor clave en una nica posicin, se requiere


que la clave sea tan grande como el rango de claves. Si se presenta
una proporcin pequea de claves, se desperdicia mucho espacio en
la tabla.

Una mejor manera de proporcionar recuperacin directa de registros,


es conformar la tabla de tal forma que ciertas claves compartan en la
posicin de la tabla. De esta manera tenemos la esencia del HASH.

En particular, es claro que las claves que tericamente comparten el


mismo lugar en la tabla, naturalmente no pueden compartir la
posicin asignada. Este conflicto se debe resolver de alguna forma.

Bsqueda Transformacin
de claves

Dado un rango M de claves posibles, se proporciona una tabla con N


entradas, donde N < M.

La posicin de una clave particular se determina transformando la


clave en un entero dentro del rango de 1 a N.

El proceso de transformacin se llama HASHING y una


transformacin particular se llama HASH.

Bsqueda Transformacin
de claves
Funciones Hash.

La funcin HASH es una transformacin matemtica que sirve como


base para obtener una direccin. Hay varias tcnicas incorporadas en
la determinacin de direcciones, las ms comunes son:

Funcin Mdulo.
Funcin Cuadrado.
Funcin Truncamiento.
Funcin Plegamiento.

Bsqueda Transformacin
de claves
Funcin Mdulo.

Consiste en tomar el residuo de la divisin de la clave entre el


numero de componentes del arreglo. Suponga que se tiene un arreglo
de N elementos y K es la clave del dato a buscar.
H(K)=(K MOD N)+1

Bsqueda Transformacin
de claves
Funcin Mdulo.
Sea N=100, el tamao del arreglo
Sus direcciones de 1-100.
Sea K1 = 7259
K2 = 9359
Dos claves que deban asignarse posiciones en el arreglo
H(K1)=(7259 mod 100)+1=60
H(K2)=(9359 mod 100)+1=60
Donde H(K1) es igual a H(k2) y K1 es distinto de K2, es una colisin

Bsqueda Transformacin
de claves
Funcin Mdulo.
Se aplica N igual a un valor primo en lugar de utilizar N=100
H(K1)=(7259 mod 97)+1=82
H(K1)=(9359 mod 97)+1=48

Con N=97 se ha eliminado la colisin

Bsqueda Transformacin
de claves
Funcin Cuadrado.
Consiste en elevar al cuadrado la clave y coger las cifras centrales. Este
mtodo tambin presenta problemas de colisin.
K1=7259
K2=136
H(k1*k1)=DigitosCentrales(52693081)+1=94
H(k2*k2)=DigitosCentrales(18496)+1=85

Bsqueda Transformacin
de claves
Funcin Truncamiento.
Consiste en tomar algunos dgitos de la clave y formar con ellos una
direccin.
Este mtodo es de los mas sencillos, pero es tambin de los que ofrece
menos uniformidad en la distribucin de las claves.
Se pueden elegir los dgitos de las posiciones pares o impares. H(k)=
elegir_digitos(d1,d2,...,dn)+1)

Bsqueda Transformacin
de claves
Funcin Truncamiento.
Sea K1=7259
K2=9359
Dos claves que deban asignarse posiciones en el arreglo
H(k1)=Elegir_digito(7259)+1=76
H(K2)= Elegir_digito(9359)+1=96
Se toman el primer y tercer nmero de la clave y une de izquierda a
derecha

Bsqueda Transformacin
de claves
Funcin Plegamiento.
Consiste en dividir la clave en partes de igual nmero de dgitos (La ultima
puede tener menos dgitos) y operar con ellos tomando como
direccin los dgitos menos significativos.
La operacin entre las partes puede hacerse por medio de sumas o
multiplicaciones.
H(K)=digitos_menos_significativos((d1..di)+(di+1..dj)++(d1..dn))+1

Bsqueda Transformacin
de claves
Funcin Plegamiento.
Sea K1=7259
K2=12345678
Dos claves que deban asignarse posiciones en el arreglo
H(k1)=(72+59)+1=(131)+1=32
H(k2)=(123+456+78)=(657)+1=658

Bsqueda Transformacin
de claves
Soluciones de Colisiones.
Existe una colisin cuando hay una sola direccin para dos
claves diferentes.

Hay un costo excesivo para resolver colisiones

Mtodos:
Reasignacin
Encadenamiento o Tablas Hash Abiertas.
Arreglos anidados

S-ar putea să vă placă și