Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Equipo 7
Octubre 2020
Facultad de ingeniería
Bogotá D.C
Tabla de contenidos
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)
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)
3
Un problema potencial son las colisiones, éstos son, dadas dos claves distintas
xi, xj se obtenga la misma dirección o índice:
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
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:
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).