Está en la página 1de 9

Universidad Nacional Autónoma de Nicaragua, Managua

UNAN-Managua
Facultad de Ciencias e Ingenierías
Departamento de Computación

Búsqueda Externa
INTRODUCCIÓN

La búsqueda externa es aquella en la que todos los elementos se encuentran


almacenados en un archivo, el cual se encuentra en un dispositivo de
almacenamiento secundario como un disco duro, una cinta o una memoria USB.

Los métodos de búsqueda externa más importantes son: secuencial, binaria y


por transformación de clave.

El método de búsqueda secuencial externa consiste en revisar el archivo


elemento por elemento hasta encontrar el dato que se está buscando, o hasta
llegar al final del archivo. Este método de búsqueda se puede aplicar a archivos
ordenadas o desordenadas.

El método de búsqueda binaria externa utiliza el mismo principio que la


búsqueda binaria interna. Divide el total de elementos del archivo en dos,
comparando el elemento buscado con el central, en caso de no ser iguales se
determina si el elemento buscado es menor o mayor al central, para determinar
si la búsqueda continua del lado izquierdo (menor) o derecho (mayor) del central,
repitiendo el mismo proceso de división y comparación, hasta encontrar el
elemento buscado o que la división ya no sea posible.

El método consiste en asignar el índice a cada elemento mediante una


transformación del elemento, esto se hace mediante una función de conversión
llamada función hash. Hay diferentes funciones para transformar el elemento y
el número obtenido es el índice del elemento.
BÚSQUEDA EXTERNA BÚSQUEDA LINEAL

La búsqueda secuencial es la técnica más simple para buscar en una lista de


datos. Este método consiste en recorrer una lista o arreglo en forma secuencial
y comparar cada elemento del arreglo con el valor deseado, hasta que éste se
encuentre o finalice el arreglo.

Normalmente cuando la función de búsqueda termina con éxito, es decir


encontró el dato buscado, interesa conocer en qué posición fue encontrado el
dato buscado. Esta idea se puede generalizar en todos los métodos de
búsqueda.

La búsqueda secuencial no requiere ningún requisito para el arreglo, y por lo


tanto no necesita estar ordenado

BÚSQUEDA EXTERNA BÚSQUEDA BINARIA

El algoritmo de búsqueda binaria elimina tras comparaciones la mitad de los


elementos del arreglo en los que se efectúa la búsqueda. Primero localiza el
elemento central del arreglo y luego lo compara con la clave de búsqueda. Si son
iguales, se ha encontrado dicha clave y se devuelve el subíndice de ese
elemento, de otro modo, el problema se reduce a buscar en una mitad del
arreglo. Si la clave de búsqueda es menor que el elemento central del arreglo,
se busca en la primera mitad, de otro modo se busca en la segunda mitad. Si la
clave de búsqueda no está en el elemento central del sub-arreglo especificado
(parte del arreglo original), se repite el algoritmo en una cuarta parte del arreglo
original. La búsqueda continua hasta que la clave de búsqueda sea igual al
elemento, el cual no es igual a la clave de búsqueda(es decir, no se encuentra
la clave de búsqueda).

Un algoritmo de búsqueda binaria (o corte binario) es una función para buscar


un valor particular en un arreglo ordenado. Eliminando la mitad de los datos en
cada paso. La búsqueda binaria encuentra la media, compara y determina si el
valor se encuentra en esa posición o esta antes o después. Una Búsqueda
Binaria es un ejemplo de la técnica “Divide y Conquista” (o mejor dicho “Decrece
y Conquista”).
BUSQUEDA EXTERNA METODO HASH

Búsqueda Hash

El método consiste en asignar el índice a cada elemento mediante una


transformación del elemento, esto se hace mediante una función de conversión
llamada función hash. Hay diferentes funciones para transformar el elemento y
el número obtenido es el índice del elemento.

La principal forma de transformar el elemento es asignarlo directamente, es decir


al 0 le corresponde el índice 0, al 1 el 1, y así sucesivamente pero cuando los
elementos son muy grandes se desperdicia mucho espacio ya que necesitamos
arreglo grandes para almacenarlos y estos quedan con muchos espacios libres,
para utilizar mejor el espacio se utilizan funciones más complejas.

La función de hash ideal debería ser biyectiva, esto es, que a cada elemento le
corresponda un índice, y que a cada índice le corresponda un elemento, pero no
siempre es fácil encontrar esa función, e incluso a veces es inútil, ya que puedes
no saber el número de elementos a almacenar. La función de hash depende de
cada problema y de cada finalidad, y se pueden utilizar con números o cadenas,
pero las más utilizadas son:

1.- Restas sucesivas:

Esta función se emplea con claves numéricas entre las que existen huecos de
tamaño conocido, obteniéndose direcciones consecutivas. Un ejemplo serían los
alumnos de ingeniería en sistemas que entraron en el año 2005 sus números de
control son consecutivos y está definido el número de alumnos.

2.- Aritmética modular:

El índice de un número es resto de la división de ese número entre un número N


prefijado, preferentemente primo. Los números se guardarán en las direcciones
de memoria de 0 a N-1. Este método tiene el problema de que dos o más
elementos pueden producir el mismo residuo y un índice puede ser señalado por
varios elementos. A este fenómeno se le llama colisión.

Mientras más grande sea número de elementos es mejor escoger un número


primo mayor para seccionar el arreglo en más partes. El número elegido da el
número de partes en que se secciona el arreglo, y cada sección está compuesta
por todos los elementos que arrojen el mismo residuo, y mientras más pequeñas
sean las secciones la búsqueda se agilizara mas que es lo que nos interesa.
ALGORITMO

A continuación se muestra el pseudocódigo del algoritmo búsqueda secuencial:


Datos de Entrada:
vec: vector en el que se desea buscar el elemento
tam: tamaño del vector
dato: elemento que se quiere buscar.

Variables
pos: posición actual en el array

pos = 0
Mientras pos < tam:
Si vec[pos]== dato devolver verdadero y/o pos, de lo contrario:
pos = pos + 1

Fin (Mientras)
Devolver falso

PASOS A SEGUIR PARA REALIZAR UNA BÚSQUEDA BINARIA


1. Se declaran los índices superior e inferior. El inferior en 0 y el superior
con el tamaño del arreglo menos 1.
2. Se calcula el centro del arreglo con la siguiente formula: centro =
(superior + inferior) / 2
3. Verificamos si el arreglo en la posición centro es igual al dato que
buscamos. Si es igual significa que encontramos el dato y retornamos
centro.
4. Si son diferentes verificamos si el arreglo en la posición centro es mayor
al dato que queremos buscar. Si es mayor actualizamos superior:
superior = centro - 1, si no actualizamos inferior: inferior = centro + 1.
5. Volvemos al paso 2.

EJEMPLO DEL FUNCIONAMIENTO DE UNA BÚSQUEDA BINARIA:

Si se quiere buscar el 10 en el siguiente arreglo:

3 5 1 1 2 5 10 156 156 1000


0 5 1 0 0 4 5 00

Paso 1: La búsqueda binaria busca la mitad:


3 5 1 1 2 5 10 156 156 1000
0 5 1 0 0 4 5 00

Si es el resultado devuelve su posición, en otro caso busca de qué lado está


el valor, y desecha la mitad del arreglo

Paso 2: busca la mitad.

3 5 10 15

Si es el resultado devuelve su posición, en otro caso busca de qué lado está


el valor, y desecha la mitad del arreglo

Paso 3: busca la mitad.

10 15

Como se encontró el resultado, se regresa su posición que es la 3.

La complejidad de la búsqueda binaria de O( log2 n ).

Por ejemplo si se quiere buscar un numero en un arreglo de 1,000,000 de


números, la búsqueda binaria solo requerirá 20 pasos para encontrar el
valor o determinar que no existe en el arreglo.

Nota: Recordemos que el arreglo debe estar ordenado para poder aplicar
este algoritmo.

BUSQUEDA HASH

Para recuperar los datos, es necesario únicamente conocer la clave del


elemento, a la cual se le aplica la función resumen.

El valor obtenido se mapea al espacio de direcciones de la tabla.

Si el elemento existente en la posición indicada en el paso anterior tiene la misma


clave que la empleada en la búsqueda, entonces es el deseado.
Si la clave es distinta, se ha de buscar el elemento según la técnica empleada al
almacenar el elemento.
ANALISIS DE EFICIENCIA

BUSQUEDA SECUENCIAL

 El método es solo adecuado para listas cortas de datos.


 A la hora de analizar la complejidad del método secuencial, tenemos que
tener en cuenta el caso más favorable y el más desfavorable.
 Cuando el elemento no se encuentra tiene que realizar n comparaciones.
Y en los casos en que el elemento buscado se localiza, este podrá estar
en el primer lugar, en el último o en un lugar intermedio.
 Entonces, al buscar un elemento en un arreglo de N componentes se
harán:
 N comparaciones si el elemento no se localiza
 N comparaciones si el elemento está en la última posición
 1 comparación si está en el primer lugar
 i comparaciones si está en un lugar intermedio (posición 1 < i < N)
 •Analizando lo escrito anteriormente podemos suponer que el número
medio de comparaciones a realizar es de (n + 1) / 2, que es
aproximadamente igual a la mitad de los elementos de la lista.

BUSQUEDA BINARIA
 Este mecanismo es muy eficaz para buscar un elemento cualquiera que
esté en una lista ordenada, y recibe el nombre de Búsqueda Binaria o
Dicotómica cuya resolución se base en el algoritmo de divisiones
sucesivas en mitades.

 Igual que en el método secuencial la complejidad del método se va a


medir por los casos extremos que puedan presentarse en el proceso de
búsqueda.

 El caso más favorable se dará cuando el primer elemento central es el


buscado, en cuyo caso se hará una sola comparación. El caso más
desfavorable se dará cuando el elemento buscado no está en las
sablistas, en este caso se harán en forma aproximada log 2(n)
comparaciones, ya que en cada ciclo de comparaciones el número de
elementos se reduce a la mitad, factor de 2. Por lo tanto, el número
medio de comparaciones que se realizarán con este método es de: (1 +
log 2(n)) / 2

 Si comparamos las fórmulas dadas en ambos métodos (Método


secuencial), resulta que para el mismo valor de N el método binario es
más eficiente que el método secuencial; además la diferencia es más
significativa cuanto más crece N.
BUSQUEDA HASH
Como ya es mencionado este método es de acceso muy rápido, con una
eficiencia aproximada O (k) donde k es una constante esto quiere decir que
trabaja casi de manera independiente a la cantidad de elementos que se
encuentren en el arreglo.

Mejor de los casos: es cuando el elemento buscado se encuentra en la primera


posición, en cuyo caso el algoritmo indicara que se encontró la clave en una sola
comparación.

El peor de los casos: es cuando se produce una colisión en las posiciones, esto
quiere decir que la posición que se va almacenar una clave ya está haciendo
utilizada por otra (para este tipo de problema existe el sistema de colisiones).

VENTAJAS
BUSQUEDA SECUENCIAL

 Es un método sumamente simple que resulta útil cuando se tiene un


conjunto de datos pequeños (Hasta aproximadamente 500 elementos)
 Es fácil adaptar la búsqueda secuencial para que utilice una lista enlazada
ordenada, lo que hace la búsqueda más eficaz.

 Si los datos buscados no están en orden es el único método que puede


emplearse para hacer dichas búsquedas

BUSQUEDA BINARIA
 La búsqueda binaria es un método eficiente siempre que el vector este
ordenado de manera ascendente y descendente.
 La búsqueda binaria proporciona un medio para reducir el tiempo
requerido para buscar un elemento dentro de una lista de gran tamaño.
 Es altamente recomendado para buscar en arreglo extremadamente
extensos ya que si se tiene un arreglo de más de 100 elemento, este en
una sola iteración desecha la mitad del arreglo reduciendo elementos y
de esta manera tiempo.
 El código del procedimiento de esta búsqueda es corta en comparación
con las damas técnicas de búsqueda.

BUSQUEDA HASH
 Se pueden usar los valores naturales de la llave, puesto que se traducen
internamente a direcciones fáciles de localizar
 Se logra independencia lógica y física, debido a que los valores de las
llaves son independientes del espacio de direcciones
 No se requiere almacenamiento adicional para los índices.

DESVENTAJAS

BUSQUEDA SECUENCIAL

 Consumo excesivo de tiempo en la localización del elemento a encontrar


si el vector contiene grandes cantidades de elementos, que recorre todo
el vector.

 No es factible para vectores con gran número de elementos.

 Este método tiende hacer muy lento.

 Si los valores de la clave no son únicos, para encontrar todos los


elementos con una clave particular, se requiere buscar en todo el arreglo,
lo que hace el proceso muy largo.

BUSQUEDA BINARIA
 El archivo debe estar ordenado y el almacenamiento de un archivo
ordenado suele plantear problemas en las inserciones y eliminaciones de
elementos.
 No revisa todos los elementos del archivo, requiere que todos los
elementos estén ordenados.

BUSQUEDA HASH

 Cuando existen demasiadas colisiones tiende a usar demasiada


memoria.

También podría gustarte