Está en la página 1de 5

Búsquedas por residuos.

Cristhian Camilo Martínez Rey

John Eddi Malagón González

Juan David Rosero Torres

Equipo 7

Octubre 2020

Universidad Distrital Francisco José de Caldas

Facultad de ingeniería

Bogotá D.C
Tabla de contenidos

¿Qué son las búsquedas por residuos?....................................................................3


Colisiones..................................................................................................................... 4
Ejemplo......................................................................................................................... 4

2
¿Qué son las búsquedas por residuos?
Varios métodos de búsqueda proceden de examinar las claves con una pieza
pequeña a la vez, en lugar de realizar comparaciones en cada paso. Este tipo
de métodos se denominan como “Búsquedas por residuos”, estos algoritmos
operan de manera similar a los Radix sort u ordenamiento por residuos. Son
útiles cuando las piezas de las claves de búsqueda son de fácil acceso, y
pueden presentar soluciones eficientes a una variedad de tareas de búsqueda.
Dependiendo del contexto, una clave puede ser una secuencia de caracteres,
una secuencia de bytes, etc.

Sedgwick plantea que, la principal ventaja que ofrece la búsqueda por residuos
es que proporciona un rendimiento razonable en el peor de los casos,
proporcionan una manera fácil de manejar llaves de longitud variable, permiten
almacenar espacio al almacenar parte de la clave implícitamente dentro de la
estructura de búsqueda, Las desventajas es que algunos de los métodos
pueden hacer uso ineficiente del espacio, y que, el rendimiento puede sufrir si
no se dispone de un acceso eficiente a los bytes de las claves. Implícitamente.
(2)

Para Cairo, la búsqueda por residuos es un tipo de búsqueda por


transformación de claves, la cual “consiste en tomar el residuo de la división de
la clave entre el número de componentes en el arreglo” (Cairó & Guarati, 2006).
El modelo matemático para una clave k y un arreglo de n elementos quedaría
de la siguiente forma:

H (k )=(k mod N )+1 (1)

Cairo suma un uno en la fórmula para así poder obtener valores entre 1 y N,
además considera que “para lograr mayor uniformidad en la distribución, es
importante que N sea un número primo o divisible entre muy pocos números.
Por lo tanto, si N no es un número primo, se debe considerar el primo más
cercano”(Cairó & Guarati, 2006)

Joyanes utiliza las funciones hash o tablas de dispersión para realizar la


búsqueda por residuos, estas implementan eficientemente los tipos de datos
denominados Diccionarios. Un diccionario asocia una clave con un valor. Por
ejemplo, el diccionario de inglés asocia una palabra con la traducción en inglés.
La operación búsqueda de una palabra se realiza frecuentemente; dada una
palabra, se localiza su posición, y se obtiene la traducción correspondiente.
(Joyanes, 2014)

Buscar (Tabla T, clave x)

devuelve el elemento de la tabla T[h(x)]

3
Un problema potencial son las colisiones, éstos son, dadas dos claves distintas
xi, xj se obtenga la misma dirección o índice:

Es necesario valorar el hecho que la función hash, h(x), no genera valores


distintos, es posible que dos claves diferentes c1 y c2 generen la misma
dirección, h(c1) = h(c2). Entonces se produce el fenómeno de la colisión.

Joyanes usa dos criterios a la hora de seleccionar una función. En primer lugar,
la función, h(x), sea fácil de evaluar (dependerá del campo clave) y que su
tiempo de ejecución sea mínimo, de complejidad constante, O(1). En segundo
lugar, h(x) debe distribuir uniformemente las direcciones sobre el conjunto L, de
forma que se minimice el número de colisiones. Nunca existirá una garantía
plena de que no haya colisiones, y más sin conocer de antemano las claves y
las direcciones. La experiencia enseña que siempre habrá que preparar la
resolución de colisiones para cuando éstas se produzcan. (Joyanes, 2014)

Colisiones

La función de dispersión, h(x), elegida puede generar la misma posición al


aplicarla a las claves de dos o más registros diferentes; esto es, obtener la
misma posición de la tabla en la que ubicar dos registros. Si ocurre, entonces
se produce una colisión que hay que resolver para que los registros ocupen
diferentes posiciones.

Una función hash ideal, h(x), debe generar direcciones distintas para dos
claves distintas. Aunque no siempre es así, proporcionando direcciones
distintas; en ocasiones ocurre que dadas dos claves diferentes x1, x2 => h(x1)
= h(x2). Este hecho es conocido como colisión.

Ejemplo
Tomado de Cairo
Supongamos que N= 100 es el tamaño del arreglo, y las direcciones que se
deben asignar a los elementos (al guardarlos o recuperarlos) son los números
del 1-10. Consideremos además que k1=7 259 y k2=9 359 son las dos claves a
las que se deben asignar posiciones del arreglo. Si aplicamos la ecuación 1
con N=100, para calcular las direcciones correspondientes a k1 y k2
obtenemos:

H (k 1)=(7 259 mod 100)+1=60 (2)


H (k 2)=(9 359 mod 100)+1=60 (3)
Como H ¿) es igual a H (k 2)y ambos k son distintos, se está ante una colision
que se debe resolver por que a dos elementos les corresponde la misma
dirección. Sin embargo se obtiene que si aplicamos la ecuación 1 con un
número primo cercano a 100 (97) el resultado cambia:

H (k 1)=(7 259 mod 97)+ 1=82 (4)


H (k 2)=(9 359 mod 97)+1=48 (5)

4
Con N=97 se ha eliminado la colisión.

Referencias
● Cairó, O., & Guarati, S. (2006). Estructuras de datos (3a. ed.) (3rd ed.,
pp. 403-404). McGraw-Hill Interamericana.
● Sedgewick, R. (1983). ALGORITHMS (2.a ed.). Addison-Wesley
Publishing Company. http://dsp-book.narod.ru/Algorithms.pdf
● Joyanes, L., & Zahonero, I. (2014). Estructura de datos C++ (406-413).

También podría gustarte