Sei sulla pagina 1di 6

INSTITUTO TECNOLÓGICO SUPERIOR DE

HOPELCHÉN

ASIGNATURA:
ESTRUCTURA DE DATOS

METODOS DE BUSQUEDA

CARRERA:
INGENIERÍA EN SISTEMAS COMPUTACIONALES

NOMBRE DEL ALUMNO:


ANDREI ALEXANDER HOO CHAN

FECHA DE ENTREGA:
30/NOVIEMBRE/2018

MATRÍCULA:
5876

GRADO: GRUPO:
3A 3er SEMESTRE
METODOS DE BUSQUEDA
BÚSQUEDA.
Con mucha frecuencia los programadores trabajan con grandes cantidades de
datos almacenados en arrays y registros y, por ello, será necesario determinar
si un array contiene un valor que coincida con un valor clave. El proceso de
encontrar un elemento específico de un array se denomina búsqueda [Joyanes,
L., Zahonero, I. (2007) Estructura de datos en C++. Primera edición. McGraw Hill.
Página 235]

La búsqueda (searching) de información está relacionada con las tablas para


consultas (lookup). Estas tablas contienen una cantidad de información que se
almacena en forma de listas de parejas de datos. La búsqueda por claves para
localizar registros es, con frecuencia, una de las acciones que mayor consumo
de tiempo conlleva y, por consiguiente, el modo en que los registros están
dispuestos y la elección del modo utilizado para la búsqueda pueden redundar
en una diferencia sustancial en el rendimiento del programa.

Si existen muchos registros, puede ser necesario almacenarlos en archivos de


disco o cinta, externo a la memoria de la computadora. En este caso se llama
búsqueda externa. En el otro caso, los registros que se buscan se almacenan
por completo dentro de la memoria de la computadora. Este caso se denomina
búsqueda interna. [Joyanes, L. (2008) Fundamentos de programación.
Algoritmos, estructura de datos y objetos. Cuarta edición. McGraw Hill. Página
374]

BÚSQUEDA SECUENCIAL O LINEAL.


La búsqueda secuencial busca un elemento de una lista utilizando un valor
destino llamado clave. En una búsqueda secuencial (a veces llamada búsqueda
lineal), los elementos de una lista se exploran (se examinan) en secuencia, uno
después de otro.

El algoritmo de búsqueda secuencial compara cada elemento del array con la


clave de búsqueda. Dado que el array no está en un orden prefijado, es probable
que el elemento a buscar pueda ser el primer elemento, el último elemento o
cualquier otro. [Joyanes, L., Zahonero, I. (2007) Estructura de datos en C++.
Primera edición. McGraw Hill. Página 235]

El método más sencillo de buscar un elemento en un vector es explorar


secuencialmente el vector o, dicho en otras palabras, recorrer el vector desde el
primer elemento al último. Si se encuentra el elemento buscado, visualizar un
mensaje similar a 'Fin de búsqueda'; en caso contrario, visualizar un mensaje
similar a 'Elemento no existe en la lista'.

En otras palabras, la búsqueda secuencial compara cada elemento del vector


con el valor deseado, hasta que éste encuentra o termina de leer el vector
completo. [Joyanes, L. (2008) Fundamentos de programación. Algoritmos,
estructura de datos y objetos. Cuarta edición. McGraw Hill. Página 374]

BÚSQUEDA BINARIA.
La búsqueda secuencial se aplica a cualquier lista. Si la lista está ordenada, la
búsqueda binaria proporciona una técnica de búsqueda mejorada. Localizar una
palabra en un diccionario es un ejemplo típico de búsqueda binaria. Dada la
palabra, se abre el libro cerca del principio, del centro o del final dependiendo de
la primera letra de la palabra que busca. Se puede tener suerte y acertar con la
página correcta; pero, normalmente, no será así y se mueve el lector a la página
anterior o posterior del libro. [Joyanes, L., Zahonero, I. (2007) Estructura de datos
en C++. Primera edición. McGraw Hill. Página 235]

Si el número de elementos del vector es grande, el algoritmo de búsqueda lineal


se ralentizaría en tiempo de un modo considerable. Si los datos que se buscan
están clasificados en un determinado orden, el método citado anteriormente se
denomina búsqueda binaria.

La búsqueda binaria utiliza un método de “divide y vencerás” para localizar el


valor deseado. 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 la
segunda mitad de la lista y, a continuación, se repite este proceso, utilizando el
elemento central de esa sub lista. [Joyanes, L. (2008) Fundamentos de
programación. Algoritmos, estructura de datos y objetos. Cuarta edición. McGraw
Hill. Página 379]

BÚSQUEDA POR TRANSFORMACIÓN DE CLAVES


(HASHING)
El método conocido como trasformación de claves o hash, permite aumentar la
velocidad de búsqueda sin necesidad de tener los elementos ordenados. Cuenta
con la ventaja de que el tiempo de búsqueda es independiente del número de
componentes del arreglo. Supongamos que se tiene una colección de datos,
cada uno de ellos identificado por una clave y necesitamos tener acceso a ellos
de manera directa sin recorrer algunos datos antes de localizar al buscarlo. El
método por transformación de claves permite realizar justamente esa actividad,
es decir, localizar el dato en forma directa. El método trabaja utilizando una
función que convierta una clave dada en una dirección o índice dentro del
arreglo. La función hash (h) aplicada a la clave genera un índice del arreglo que
permite acceder directamente a elemento. [Cairo, O. y Guardati, S. (2006)
estructura de Datos, Tercera Edición. Mc Graw Hill. Páginas: 402-403]

Existen otros métodos que pueden aumentar la velocidad de búsqueda en el que


los datos no necesitan estar ordenados, este método se conoce como
transformación de claves (clave-dirección) o hashing. El método de
transformación de claves consiste en convertir la clave dada (numérica o
alfanumérica) en una dirección (índice) dentro del array. La correspondencia
entre las claves y la dirección en el medio de almacenamiento o en el array se
establece por una función de conversión (función o hash). [Joyanes, L. (2008)
Fundamentos de programación. Algoritmos, estructura de datos y objetos. Cuarta
edición. McGraw Hill. Página 383]
FUNCIÓN HASH POR RESIDUO O MÓDULO.
Convertir la clave a un entero, dividir por el tamaño del rango del índice y tomar
el resto como resultado. La función de conversión utilizada es mod (módulo o
resto de la división entera).
h(x) = x mod m donde mes el tamaño del array con índices de 0 a m – 1. Los
valores de la función —direcciones— (el resto) irán de 0 a m – 1, ligeramente
menor que el tamaño del array. La mejor elección de los módulos son los
números primos.
Por ejemplo, en un array de 1.000 elementos se puede elegir 997 o 1.009. Otros
ejemplos son
18 mod 6 19 mod 6 20 mod 6 que proporcionan unos restos de 0, 1 y 2
respectivamente.
Si se desea que las direcciones vayan de 0 hasta m, la función de conversión
debe ser
h(x) = x mod (m + 1)
[Joyanes, L. (2008) Fundamentos de programación. Algoritmos, estructura de
datos y objetos. Cuarta edición. McGraw Hill. Página 386]

Se debe tomar el residuo que se obtiene de la división de la clave (debe ser


numérica) entre el tamaño del arreglo, el cual será un valor comprendido entre 0
y el máximo menos uno. [[Guardati, S. (2007) Estructura de Datos Orientada a
Objetos Algoritmos con C++. Primera edición. Prentice Hall. Páginas: 523]

FUNCIÓN HASH POR PLEGAMIENTO.


La técnica del plegamiento consiste en la partición de la clave en diferentes
partes y la combinación de las partes en un modo conveniente (a menudo
utilizando suma o multiplicación) para obtener el índice.

La clave x se divide en varias partes, x1, x2,..., xn, donde cada parte, con la única
posible excepción de la última parte, tiene el mismo número de dígitos que la
dirección más alta que podría ser utilizada. A continuación se suman todas las
partes

h (x) = x1+ x2+ ... + xn


En esta operación se desprecian los dígitos más significativos que se obtengan
de arrastre o acarreo. [Joyanes, L. (2008) Fundamentos de programación.
Algoritmos, estructura de datos y objetos. Cuarta edición. McGraw Hill. Página
385]

Se deben generar dos o más números a partir de los dígitos de la clave (debe
ser numérica) sumarlos para obtener un único número del cual se toman los
dígitos menos significativos como dirección. [Guardati, S. (2007) Estructura de
Datos Orientada a Objetos Algoritmos con C++. Primera edición. Prentice Hall.
Páginas: 523]

FUNCIÓN HASH POR TRUNCAMIENTO.


Ignora parte de la clave y se utiliza la parte restante directamente como índice
(considerando campos no numéricos y sus códigos numéricos). Si las claves,
por ejemplo, son enteros de ocho dígitos y la tabla de transformación tiene mil
posiciones, entonces el primero, segundo y quinto dígitos desde la derecha
pueden formar la función de conversión. Por ejemplo, 72588495 se convierte en
895. El truncamiento es un método muy rápido, pero falla para distribuir las
claves de modo uniforme. [Joyanes, L. (2008) Fundamentos de programación.
Algoritmos, estructura de datos y objetos. Cuarta edición. McGraw Hill. Página
385]

Se deben elegir algunos dígitos de la clave y formar con ellos la dirección. El


criterio de elección se determina en cada aplicación. Por ejemplo, se pueden
elegir los primeros n dígitos o los últimos, los que ocupan posiciones pares o los
que ocupan posiciones impares, dependiendo del tamaño de la clave se deben
sumar los dígitos y tomar los menos significativos. [Guardati, S. (2007) Estructura
de Datos Orientada a Objetos Algoritmos con C++. Primera edición. Prentice Hall.
Páginas: 524]

Potrebbero piacerti anche