Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Unidad 6

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 11

Mtodos de bsqueda

Unidad VI

La bsqueda es la operacin ms importante en el procesamiento de informacin, ya que permite


recuperar datos previamente almacenados. El resultado de una bsqueda puede ser un xito, si se
encuentra la informacin o un fracaso, si no la encuentra.
La bsqueda se puede aplicar sobre elementos previamente ordenados o sobre elementos
desordenados, en el primer caso la bsqueda es ms fcil, en cambio en el segundo se dificulta un
poco ms el proceso, sobre todo cuando de se trata de encontrar una cantidad de elementos
similares.
Los mtodos de bsqueda se clasifican en:
Bsqueda interna.
Bsqueda externa.
Bsqueda interna.
La bsqueda interna es aquella en la que todos los elementos de la estructura esttica (arreglo) o
dinmica (lista ligada o rbol) se encuentran almacenados en la memoria principal de la
computadora.
Los mtodos de bsqueda interna ms importantes son:
Secuencial o lineal.
Binaria.
Hash (transformacin de claves)

6.1 Bsqueda secuencial


El mtodo de bsqueda secuencial consiste en revisar la estructura de datos elemento por elemento
hasta encontrar el dato que estamos buscando, o hasta llegar al final de la estructura de datos.
Normalmente cuando una funcin de bsqueda concluye con xito, lo que interesa es conocer en
qu posicin fue encontrado el elemento buscado.
La bsqueda secuencial se puede aplicar a estructuras de datos ordenadas o desordenadas.
Si se aplica a una estructura desordenada y el elemento que se est buscando existe ms de una
vez en la estructura, el proceso de bsqueda debe continuar hasta que se llegue al fin de la
estructura.
Ejemplo. Si tenemos una estructura con los elementos 5, 8, 3, 2, 9, 5, 7, 0, 5, 1 y estamos buscando
el nmero 5, el resultado de la bsqueda nos mostrara las posiciones 0, 5 y 8 y el proceso
terminara al llegar al numero 1 que es el ultimo de la lista de elementos.
1

Elementos
Posiciones
Posiciones donde

5 8 3 2 9 5 7 0 5 1
0 1 2 3 4 5 6 7 8 9

encontr el nmero 5
Ejercicio. Crear un programa que aplique una bsqueda secuencial de un dato dentro de un arreglo
de elementos desordenados y presenta la o las posiciones donde encontr el dato.
En cambio con una estructura ordenada al encontrar el elemento por primera vez podemos suponer
que una vez que el elemento ya no sea igual al que estamos buscando, ya no es necesario llegar
hasta el fin de la estructura.
Ejemplo. Si tenemos la estructura anterior pero ordenada 0, 1, 2, 3, 5, 5, 5, 7, 8, 9 y estamos
buscando el mismo nmero 5, el resultado de la bsqueda nos mostrara las posiciones 4, 5, y 6, y
el proceso terminara ya que el nmero 7 no es menor ni igual al que estamos buscando.
Elementos
Posiciones
Posiciones donde

0 1 2 3 5 5 5 7 8 9
0 1 2 3 4 5 6 7 8 9

encontr el nmero 5
Ejercicio. Crear un programa que aplique una bsqueda secuencial de un dato dentro de un arreglo
de elementos ordenados y presenta la o las posiciones donde encontr el dato.

6.2 Bsqueda binaria


El mtodo de bsqueda binaria divide el total de los elementos 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 bsqueda continua del lado izquierdo (menor) o derecho
(mayor) del central, repitiendo el mismo proceso de divisin y comparacin, hasta encontrar el
elemento buscado o que la divisin ya no sea posible.
Debemos destacar que este mtodo de bsqueda solo funciona con estructuras de datos
previamente ordenadas, dividiendo cada vez a la mitad el proceso de bsqueda, lo que hace que el
mtodo sea ms eficiente.

Hash
El mtodo de bsqueda hash o por transformacin de clave aumenta la velocidad de bsqueda sin
necesidad de que los elementos estn previamente ordenados, comparndolo con los mtodos
anteriores. Adems tiene la ventaja de que el tiempo de bsqueda es independiente del nmero de
elementos de la estructura que los almacena.
Este mtodo permite que el acceso a los datos sea por una llave que indica directamente la posicin
donde estn guardados los datos que se buscan. Prcticamente trabaja con una funcin que
transforma la llave o dato clave en una direccin (ndice) dentro de la estructura y que en ocasiones
puede generar una colisin, que se define como una misma direccin para dos o ms claves
distintas.
Para trabajar con este mtodo de bsqueda debe elegir previamente dos cosas:
Una funcin hash que sea facil de calcular y que distribuya uniformemente las
direcciones.
-

Un mtodo para resolver colisiones, generando posiciones alternativas.

Para encontrar la funcin hash no existe una regla que permita determinar cul ser la funcin ms
apropiada para generar un conjunto de claves que aseguren la mxima uniformidad en la distribucin
de las mismas. Algunas de las funciones hash ms utilizadas son las siguientes:
Funcin mdulo (por divisin).
Funcin cuadrada.
Funcin plegamiento.
Funcin truncamiento.
La funcin mdulo o por divisin toma el residuo de la divisin entre la clave y el total de elementos
de la estructura, generando la siguiente frmula:
direccin = (clave % total elementos)
Para lograr una mayor uniformidad en la distribucin de los elementos, se debe buscar que el
valor que se usa en el total de elementos sea un nmero primo ms cercano al tamao de la
estructura.
Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones
generadas son las siguientes:
direccin = (7259%100) = 59
direccin = (9359%100) = 59
Estos dos casos generan una colisin, ya que los dos nmeros no se pueden asignar dentro de la
misma direccin en la estructura, para evitar la colisin, se cambia el valor de 100 por el numero
primo ms cercano a l, en este caso seria un 97, lo que generara las siguientes direcciones:
direccin = (7259%97) = 81
direccin = (9359%97) = 47
7

La funcin cuadrada como su nombre lo indica eleva al cuadrado la clave y del resultado, se toman
los dgitos centrales como la direccin. El nmero de dgitos a tomar se determina del por el rango
del ndice de toda la estructura. La frmula hash es la siguiente:
direccin = dgitos centrales (clave2)
Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones
generadas son las siguientes:
direccin = dgitos centrales (72592) = 52693081 = 93
direccin = dgitos centrales (93592) = 87590881 = 90
Como el rango de claves es de 1 a 100 se toman dos dgitos centrales.
La funcin plegamiento divide la clave en partes de igual nmero de dgitos (la ltima puede tener
menos dgitos), tomando como direccin los dgitos menos significativos, despus de realizar una
operacin entre las partes, ya sea una serie de sumas o de multiplicaciones. La frmula seria la
siguiente:
direccin = dgitos menos significativos (suma de partes)
direccin = dgitos menos significativos (multiplicacin de partes)
Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones
generadas son las siguientes:
direccin = dgitos menos significativos (72 + 59) =
dgitos menos significativos (131) = 31
direccin = dgitos menos significativos (93 + 59) =
dgitos menos significativos (152) = 52
Como el rango de claves es de 1 a 100 se toman dos dgitos para las particiones y para la direccin.
La funcin truncamiento toma algunos de los dgitos de las claves y forma con ellos una direccin. La
eleccin de los dgitos es arbitraria, podran tomarse los de las posiciones pares o impares para con
ellos generar la direccin donde se almacenara la clave, uniendo los dgitos de izquierda a derecha o
de derecha a izquierda, su frmula es la siguiente:
direccin = elegir dgitos (unin dgitos)
Ejemplo. Si tenemos un total de 100 elementos y dos claves que sean 7259 y 9359, las direcciones
generadas son las siguientes:
direccin = elegir dgitos (7, 5) = 75
direccin = elegir dgitos (9, 5) = 95
Para este caso se tomaron los dgitos impares y se unieron de izquierda a derecha.
Un mtodo para la solucin de colisiones es tan importante como la funcin hash, este mtodo debe
entrar en operacin cuando la funcin hash asigna la misma direccin a dos o mas claves diferentes.
Algunos de los mtodos para la solucin de colisiones ms utilizados son:
Reasignacin.
Arreglos anidados.
Encadenamiento.
8

El mtodo de reasignacin como su nombre lo indica consiste en reasignar otra direccin de forma
alternativa en caso de encontrar una colisin, con alguno de los siguientes mtodos:
Prueba lineal.
Prueba cuadrtica.
Doble direccin hash.
La prueba lineal consiste en recorrer la estructura secuencialmente a partir del punto de colisin,
hasta encontrar un lugar vaci, la estructura se debe controlar como una estructura circular, donde el
siguiente elemento despus del ltimo es el primero.
La prueba cuadrtica es similar a la anterior, con la diferencia de que la bsqueda de un lugar vaci
no se hace de forma consecutiva, se genera a partir de la elevacin de un valor al cuadrado, donde
ese valor inicia con el nmero 1 y lo suma a la direccin que se encuentra en colisin (d+i2), si se
genera nuevamente una colisin el valor del nmero se incrementa, se eleva al cuadrado y se suma
a la direccin inicial (d+1, d+4, d+9, d+16, , d+i2), este proceso se repite hasta que se encuentre
una direccin vaca. Est generacin de direcciones puede llegar a exceder el tamao de la
estructura, si es as, la direccin inicia en uno y el valor inicial a elevar es el cero.
La doble direccin hash consiste en generar otra direccin hash, una vez que se detecta la colisin,
la generacin de la nueva direccin se hace a partir de la direccin previamente obtenida ms uno.
La funcin hash que se aplique para generar la nueva direccin puede no ser la misma a la utilizada
en el proceso anterior, para esto no existe una regla establecida, lo que permite utilizar cualquiera de
las funciones hash conocidas hasta ahora.
El mtodo de arreglos anidados consiste en que cada elemento de la estructura contenga otra
estructura, en la cual se almacenen los elementos colisionados. Generando con esto una estructura
con dos dimensiones, controlando en la primera dimensin los elementos iniciales y en la segunda
dimensin los colisionados. Esta alternativa genera otro problema mayor, cul debe ser el tamao
de la segunda estructura que controla la segunda dimensin?
Ejemplo. Crear una estructura que almacena 10 elementos que son: 15, 20, 24, 51, 71, 13, 16, 22,
46 y 69, y utiliza la funcin truncamiento tomando los dgitos pares, ordenados de izquierda a
derecha, la solucin seria la siguiente:

0
1
2
3
4
5
6
7
8
9

15
20
46
51
69
71

13
24

16
22

Valor
15
20
24
51
71
13
16
22
46
69

Direccin
1
2
2
5
7
1
1
2
4
6

Si nos damos cuenta esta solucin tiene un gran costo en cuanto a memoria se refiere, ya
que se desperdician demasiados espacios.

El mtodo de encadenamiento consiste en que cada posicin de la estructura contenga una lista
ligada, la cual crecer con cada elemento que entre en la estructura, sobre todo con los elementos
que generen una colisin. Este es el mtodo ms eficiente debido a que las listas ligadas son
dinmicas y evitan tener tantos lugares libres como el mtodo arreglos anidados. Como desventaja
se puede encontrar que cuando la lista ligada crece demasiado se pierde la facilidad de acceso
directo del mtodo hash.
Ejemplo. Crear una estructura que almacena 10 elementos que son: 15, 20, 24, 51, 71, 13, 16, 22,
46 y 69, y utiliza la funcin truncamiento tomando los dgitos pares, ordenados de izquierda a
derecha, la solucin seria la siguiente:

0
1
2
3
4
5
6
7
8
9

15
20

13
24

46
51
69
71

null
null
null
null

16
22

null
null

Valor
15
20
24
51
71
13
16
22
46
69

Direccin
1
2
2
5
7
1
1
2
4
6

Bsqueda externa.
La bsqueda 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 mtodos de bsqueda externa ms importantes son:
Secuencial.
Binaria.
Hash (transformacin de claves)
Secuencial.
El mtodo de bsqueda secuencial externa consiste en revisar el archivo elemento por elemento
hasta encontrar el dato que se esta buscando, o hasta llegar al final del archivo. Este mtodo de
bsqueda se puede aplicar a archivos ordenadas o desordenadas.
Si la bsqueda se aplica a un archivo desordenado y el elemento que se est buscando existe ms
de una vez, el proceso de bsqueda debe continuar hasta que se llegue al fin del archivo.
Ejercicios. Crear un programa que genera N nmeros aleatorios, los guarde en un archivo y
posteriormente aplique la bsqueda secuencial.
Si la bsqueda se aplica a un archivo ordenado y el elemento que se est buscando existe ms de
una vez, el proceso de bsqueda termina cunado el elemento del archivo que se esta comparando
es mayor que el que se esta buscando.
10

Ejercicios. Crear un programa que genera N nmeros aleatorios, los guarde en un archivo, los
ordene de forma ascendente y posteriormente aplique la bsqueda secuencial.
Binaria.
El mtodo de bsqueda binaria externa utiliza el mismo principio que la bsqueda 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 bsqueda continua del lado izquierdo (menor) o derecho (mayor) del central,
repitiendo el mismo proceso de divisin y comparacin, hasta encontrar el elemento buscado o que
la divisin ya no sea posible.
El archivo debe estar ordenado y se debe conocer el nmero de elementos del mismo para aplicar
este mtodo.
Ejercicios. Crear un programa que genera N nmeros aleatorios, los guarde en un archivo y
posteriormente aplique la bsqueda binaria.

11

También podría gustarte