Sie sind auf Seite 1von 7

Mtodos de Bsqueda La bsqueda se utiliza bsicamente para recuperar datos que se haban almacenado con anticipacin.

El resultado puede ser de xito si se encuentra la informacin deseada, o de fracaso, en caso contrario. Los mtodos de bsqueda se pueden clasificar en internos y externos, segn la ubicacin de los datos sobre los cuales se realiza la bsqueda. Se denomina bsqueda interna cuando todos los elementos se encuentran en la memoria principal de la computadora: por ejemplo, almacenados en arreglos, listas o arboles. Es bsqueda externa si los elementos estn en memoria secundaria: es decir, si hubieran archivos en dispositivos como cintas o discos magnticos.

9.2 Bsqueda Interna


9.2.1 Mtodo de Bsqueda Secuencial

Este mtodo consiste en ir comparando el elemento que se busca de izquierda a derecha, con cada elemento del arreglo hasta que se encuentre o se termine de leer el vector completo. El mtodo de bsqueda secuencial tambin se puede utilizar en listas, consiste en recorrer nodo tras nodo, hasta encontrar el elemento buscado o hasta que se llegue al final de la lista. Ejemplo:

Algoritmo Bsqueda Secuencial for (i=0; i < LARGO; i++) if (a[i]==Elemento_buscado) printf(Elemento encontrado en: %d\n, i);

9.2.2 Mtodo de Bsqueda Binaria La bsqueda binaria consiste en dividir el intervalo de bsqueda en dos partes, comparando el elemento buscado con el que ocupa la posicin central en el arreglo. En caso de que no fueran iguales se redefinen los extremos del intervalo, segn el elemento central sea mayor o menor que el elemento buscado. Este mtodo funciona exclusivamente con arreglos ordenados. Ejemplo:

32 3 4 6 7 0 1 3 2 3 3 2 4 5 6

M
Algoritmo Bsqueda Binaria tipo A[LARGO] Max=LARGO-1; min=0; Encontrado=0; while(min+1<max && !Encontrado){ Medio=(Max+min)/2 if (A[Medio]==Elemento){

ndice resultado = 4

printf(Elemento Encontrado\n); Encontrado=1; /*Fuerza la salida del ciclo*/ } if (A[Medio]<Elemento) Max=Medio; if (A[Medio]>Elemento) min=Medio; }

9.2.3 Bsqueda por Transformacin de Claves Este mtodo es tambin llamado hash, permite aumentar la velocidad de la bsqueda sin necesidad de tener los elementos ordenados. Cuenta con la ventaja de que el tiempo de bsqueda es independiente del nmero de componentes del arreglo. El mtodo por transformacin de claves permite localizar el dato en forma directa y trabaja utilizando una funcin que convierte una clave dada en una direccin dentro del arreglo. Para trabajar con este mtodo primero se debe seleccionar: Una funcin hash que sea fcil de calcular y distribuya uniformemente las claves. Un mtodo para resolver colisiones. Las colisiones son la asignacin de una misma direccin a dos o ms claves distintas. 9.2.4 Funcin hash por modulo: divisin La funcin hash por divisin consiste en tomar el residuo de la divisin de la clave entre el nmero de componentes del arreglo. La funcin hash esta definida por la siguiente formula: H(K)=(K mod N) + 1 Para lograr mayor uniformidad en la distribucin, es importante que N sea un nmero primo o divisible entre muy pocos nmeros. Por lo tanto si N no es un nmero primo, se debe considerar el valor primo ms cercano. 9.2.5 Funcin hash cuadrado La funcin hash cuadrado consiste en elevar al cuadrado la clave y tomar los dgitos centrales como direccin. El nmero de dgitos que se debe considerar se encuentra determinado por el rango del ndice. Sea K la clave a buscar, la funcin hash cuadrada se define por la siguiente formula: H(K)=digitos_centrales(K^2) + 1 La suma de una unidad a los dgitos centrales es til para obtener un valor correspondido entre 1 y N.

9.2.6 Funcin hash por plegamiento La funcin hash por plegamiento consiste en dividir la clave en partes, tomando igual numero de dgitos aunque la ltima puede tener menos, y operar con ellas, asignando como direccin los dgitos menos significativos. La operacin entre las partes se puede realizar por medio de sumas o multiplicaciones. Sea K la clave del dato a buscar, la funcin hash por plegamientos queda definida por la siguiente formula: H(K)= digmensig ((d1...di)+(di+1d1)++(de1dn)) + 1 La suma de una unidad a los dgitos menos significativos digmensig- es para obtener un valor comprendido entre 1 y N. 9.2.7 Funcin hash por truncamiento La funcin hash por plegamiento consiste en tomar algunos dgitos de la clave y formar con ellos una direccin. Sea K la clave del dato a buscar y la formula para este mtodo es la siguiente: H(K)= elegirdigitos (d1,d2,,dn) + 1 La eleccin de los dgitos es arbitraria. 9.2.8 Solucin de colisiones Cuando se obtiene una misma direccin para dos claves diferentes, se esta ante una colisin. La manera de resolver el problema es reservar una casilla por clave. Algunos de los mtodos ms utilizados para resolver colisiones, que se pueden clasificar en: Reasignacin. Arreglos anidados. Encadenamiento.

9.2.9 Reasignacin Existen varios mtodos que trabajan bajo el principio de comparacin y reasignacin de elementos. A continuacin se analizan tres de ellos: Prueba lineal. Prueba cuadrar Doble direccin hash.

Prueba Lineal El mtodo de prueba lineal consiste en que una vez que se detecta la colisin, se recorre el arreglo secuencialmente a partir del punto de colisin, buscando al elemento. El proceso de bsqueda concluye cuando el elemento es hallado, o cuando se encuentra una posicin vaca.

9.2 Bsqueda Externa


9.3.1 Bsqueda en archivos secuenciales Los archivos secuenciales son aquellos cuyos componentes o registros ocupan posiciones relativas consecutivas. Todo componente o registro de un archivo tiene generalmente un campo que lo identifica, llamado campo clave. Este se encuentra formado por un conjunto de caracteres o dgitos. 9.3.2 Bsqueda secuencial La bsqueda secuencial consiste en recorrer el archivo comparando la clave buscada con la clave del registro en curso. El recorrido lineal del archivo termina cuando se encuentra el elemento, o cuando se alcanza el final del archivo. La diferencia entre este algoritmo y el anterior consiste en que la bsqueda tambin se detiene cuando la clave de R es mayor que K. 9.3.3 Bsqueda secuencial mediante bloques La bsqueda secuencial mediante bloques consiste en tomar bloques de registros en vez de registros aislados. Un bloque es un conjunto de registros. Su tamao es arbitrario y depende del nmero de elementos del archivo. El archivo debe estar ordenado. La bsqueda se realiza al comparar la clave en cuestin con el ltimo registro de cada bloque. Si la clave resulta menor, entonces se busca en forma secuencial a travs de los registros salteados en el bloque. En caso contrario se contina con el siguiente bloque. En este algoritmo se lee el ultimo registro de cada bloque, y de la comparacin del elemento buscado con l se decide como continuar con la bsqueda.

9.3.4 Bsqueda secuencial con ndices La bsqueda secuencial con ndices trabaja con bloques y con archivos de ndices. En el archivo de ndices se almacenan las claves que hacen referencia a cada bloque y la direccin de los bloques en el archivo. La bsqueda de un elemento comienza recorriendo el archivo de ndices, comparando las claves all almacenadas con la clave del elemento en cuestin. La desventaja de este mtodo es que requiere ms espacio de memoria, ya que se trabaja con dos archivos: el principal, en el cual se almacenan los registros, y el de ndices. El archivo de ndices se recorre secuencialmente hasta encontrar la clave que sea mayor o igual a la clave buscada. Cuando esto ultimo suceda, se tomara la direccin del bloque apuntado por dicha clave y se aplicara bsqueda secuencial en dicho bloque. Determinacin del tamao del bloque El tamao del bloque se debe elegir de tal forma que permita reducir el nmero de comparaciones. 9.3.5 Bsqueda Binaria El mtodo de bsqueda binaria externa, funciona igual que en la bsqueda interna. El archivo debe estar ordenado y se debe conocer su nmero de elementos (N) para aplicar este mtodo. Un gran inconveniente de la bsqueda binaria externa es que requiere accesos a diferentes posiciones del dispositivo perifrico en el cual esta almacenado el archivo; ello produce alto costo en tiempo de acceso, que hace muy imprctica esta bsqueda. 9.3.6 Bsqueda por transformacin de claves (hash) El mtodo de bsqueda externa por transformacin de claves tiene las mismas caractersticas, que la bsqueda por transformacin de claves de la bsqueda interna. Los archivos normalmente se encuentran organizados en reas llamadas cubetas. Estas se encuentran formadas por cero, uno o ms bloques de registros. Por lo tanto, la funcin hash, aplicada a una clave, dar como resultado un valor que hace referencia a una cubeta en la cual se puede encontrar el registro buscado.

Es importante elegir una funcin hash que distribuya las claves en forma homognea a travs de las cubetas, de manera que se evite la concentracin de numerosas claves en una cubeta mientras otras permanecen vacas. Funciones hash Una funcin hash se puede definir como una transformacin de clave a una direccin. Al aplicar una funcin hash a una clave se obtiene el nmero de cubetas en la cual se puede encontrar el registro con dicha clave. Las funciones modulo, cuadrado, plegamiento y truncamiento de la bsqueda interna son validas tambin para la bsqueda externa. Conversin de bases La conversin de bases consiste en modificar de manera arbitraria la base de la clave obteniendo un nmero que corresponda a una cubeta. Si el numero de dgitos del valor resultante excede el orden de las direcciones, entonces se suprimiran los dgitos mas significativos. 9.3.7 Solucin de colisiones Cuando dos o mas elementos con distintas claves tienen una misma direccin, se origina una colisin. Para evitar las colisiones se debe elegir un tamao adecuado de cubetas y de bloques Con respecto a las cubetas, si se definen muy pequeas el numero de colisiones aumenta, mientras que si se definen muy grandes se pierde eficiencia en cuanto a espacio de almacenamiento. Con respecto al tamao de los bloques, es importante considerar la capacidad de estos para almacenar registros. Un bloque puede almacenar uno, dos o mas registros. Los tamaos de las cubetas y los bloques dependen de las capacidades del equipo con el que se est trabajando.

Das könnte Ihnen auch gefallen