Sunteți pe pagina 1din 5

04/07/2017

ESTRUCTURA DE Búsqueda mediante transformación de claves


DATOS-SIC334 Objetivo

• Analizar los algoritmos de búsqueda por transformación


HASHING de claves.

• Estudiar y analizar las técnicas de solución de las


colisiones.
04 de julio de 2017

Maria G. Pérez
maria.espanya@gmail.com
0979173721

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves

Introducción Introducción

Los métodos de búsqueda secuencial y binaria permiten El método por transformación de claves o hash, permite
encontrar un elemento en un array. En los dos casos, el aumentar la velocidad de búsqueda sin necesidad de tener
tiempo de búsqueda es proporcional al numero de los elementos ordenados.
elementos.
En el caso de la búsqueda binaria, a pesar de ser más El tiempo de búsqueda es independiente del numero de
eficiente que el método lineal, tiene como restricción que elementos del array.
el array debe estar ordenado.
Las tablas hash surgieron por la necesidad de encontrar la
Por ello, han surgido otras alternativas de búsqueda, tales información en O(1), respecto a las búsquedas
como los métodos por transformación de claves o hash. secuenciales.

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves

Introducción
Función hash
El método por transformación de claves, permite localizar
La función hash (tablas de dispersión: hastable) son algoritmos
el dato a buscar en forma directa utilizando una función
matemáticos que consiguen crear a partir de una entrada
(función hash) que convierte una clave dada en una
(contraseña, archivo,…) una salida alfanumérica de longitud
dirección (índice) dentro del array.
normalmente fija que representa un resumen de toda la
información que se ha ingresado.
dirección ← H (clave)
Es quizá una de las estructuras de datos más flexibles.
La función hash aplicada a la clave genera un índice que
permite acceder directamente al elemento. El caso más
Desde el punto de vista del usuario (programador que la utiliza),
trivial se presenta cuando las claves son números enteros
la hastable es una especie de array que permite relacionar un
consecutivos
valor (value) a una clave (key), ambos de cualquier tipo de dato.

1
04/07/2017

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves


Función hash
Función hash
Cuando las claves no se corresponden con índices, es decir,
cuando son alfanuméricos, o cuando las claves representen
Suponga que se desea almacenar la información de
valores numéricos muy grandes, se utiliza una función hash que
matriculas de 100 alumnos. Las matriculas son números del
permita transformar la clave para obtener una dirección
1 al 100.
apropiada.
Para ello, conviene definir un array de 100 elementos con
Dicha función hash debe ser simple de calcular y asignar
índices numéricos comprendidos entre 1 y 100.
direcciones de la manera más uniforme posible. Es decir, debe
generar posiciones diferentes dadas dos claves también
Los datos de cada alumno ocuparán la posición del array
diferentes.
que se corresponda con el número de la matricula, así se
podrá acceder directamente a la información de cada
Si esto último no ocurre (H(K1) = d, H(K2)=d, y K1 ≠ K2) hay una
alumno
colisión, que se define como la asignación de una misma dirección
a dos o más claves distintas.

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves


Función hash Tipos de funciones hash

En este contexto, para trabajar con este método de búsqueda se Seleccionar una buena función hash es muy importante, pero es
debe seleccionar previamente: difícil encontrarla. Básicamente, porque no existen reglas que
permitan determinar cuál será la función hash más apropiada
• Una función hash que sea fácil de calcular y distribuya para un conjunto de claves que asegure la máxima uniformidad en
uniformemente las claves. su distribución.

• Un método para resolver colisiones, si estas se presentan, será Las funciones hash más utilizadas son:
utilizar algún método que genere posiciones alternativas.
1. hash por modulo: División
2. hash cuadrado
3. hash por plegamiento
4. hash por truncamiento

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves


1. Función hash por modulo o división 1. Función hash por módulo

La función hash por módulo o división toma el residuo de la Para lograr mayor uniformidad en la distribución, es importante
división entre la clave y el número de componentes del arreglo. que N sea un número primo o divisible entre muy pocos números.
Por ejemplo, suponga que se tiene un arreglo de N elementos, y K,
la clave del dato a buscar. En caso, de que N no sea un número primo, se debe considerar el
valor primo más cercano a N.
Esta función hash estaría definida por la formula:

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

Donde se puede observar que al residuo de la división se le suma


1. Esto es para obtener un valor comprendido entre 1 y N.

2
04/07/2017

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves


1. Función hash por módulo 1. Función hash por módulo

Ejemplo Ejemplo

Suponga que N es igual a 100 (tamaño del array), y las Como H(K1) es igual a H(K2) y K1 es distinto de K2, este es un
direcciones que se deben asignar a los elementos (al guardarlos o problema de colisión que se debe resolver debido a que los dos
recuperarlos) son los números del 1 al 100. elementos les correspondería la misma dirección.
Considere además que, K1=7259 y K2 = 9359, son las dos claves a
las que se deben asignar posiciones en el arreglo. Pero, observe, que si se aplica dicha expresión con un número
muy próximo a N, el resultado cambiaría:
Si se aplica la expresión anterior con N = 100, para calcular las
direcciones correspondientes a K1 y K2, obtenemos: H(K1) = (7259 mod 97)+1 = 82
H(K2) = (9359 mod 97)+1 = 48
H(K1) = (7259 mod 100) + 1 = 60
H(K2) = (9359 mod 100) + 1 = 60 Con N = 97 se ha solucionado el problema de la colisión.

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves

2. Función hash cuadrado 2. Función hash cuadrado

Ejemplo
La función hash cuadrado consiste en elevar al cuadrado la
clave y tomar los dígitos centrales como dirección. Sea N=100 el tamaño del arreglo, y sus direcciones los
El número de dígitos que se debe considerar se encuentra números comprendidos entre
52693081
1 y 100.
determinado por el rango del índice. Sea K la clave del dato a Sean K1 = 7259 y K2=9359 dos claves a las que se deben
buscar, la función hash cuadrado queda definida, por la asignar posiciones en el array. Se aplica la anterior fórmula
fórmula: para obtener las direcciones de k1 y k2.
k1 = 52 693 081
H(K) = digitos_centrales (K2) + 1 k2 = 87 590 881

La suma de una unidad a los dígitos centrales es útil para H(K1) = digitos_centrales (52 693 081) + 1 = 94
obtener un valor comprendido entre 1 y N. H(K2) = digitos_centrales (87 590 881) + 1 = 91

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves

2. Función hash cuadrado 3. Función hash por plegamiento

Como el rango de índice en el ejemplo varia de 1 a 100, se La función hash por plegamiento consiste en dividir la clave
toman solamente los dos dígitos centrales del cuadrado de en partes, tomando igual número de dígitos aunque la última
las claves. puede tener menos, y operar con ellas, asignando como
dirección los dígitos menos significativos.

La operación entre las partes se puede realizar por medio


de sumas o multiplicaciones.

Sea K la clave del dato a buscar. K está formada por los


dígitos d1, d2,...,dn.

3
04/07/2017

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves

3. Función hash por plegamiento


3. Función hash por plegamiento
Ejemplo
La función hash por plegamiento se define como sigue:
Sea N = 100 el tamaño del arreglo, y las direcciones que deben tomar sus
H(K) = digitosMenosSignificativos ((d1,...di) +
elementos los números comprendidos entre 1 y 100. Sean ki = 7259 y K2 =
(di+1...dj)+...+(d1...dn)) + 1
9359 dos claves a las que se deben asignar posiciones en el arreglo. Para
calcular las direcciones correspondientes a K1 y K2, se procede así:
El operador que aparece en la fórmula operando las partes
de la clave es el de suma, pero, como ya se aclaró, puede
H(K1) = digitosMenosSignificativos (72+59)+1 = digitosMenosSignificativos (131)+1 = 32
ser el de la multiplicación… H(K2) = digitosMenosSignificativos (93+59)+1 = digitosMenosSignificativos (152)+1 = 53

En este contexto, la suma de una unidad a los dígitos menos De la suma de las partes se toman solamente dos dígitos porque los índices
significativos (digitosMenosSignificativos) es para obtener del arreglo varían de 1 a 100.
un valor comprendido entre 1 y N.

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves

4. Función hash por truncamiento 4. Función hash por truncamiento

La función hash por truncamiento consiste en tomar algunos dígitos de Ejemplo


la clave y formar con ellos una dirección. Esta técnica es una de las
más sencillas y a la vez es la menos uniforme en la distribución de las Sea N=100 el tamaño del array, y las direcciones de sus elementos
claves. los números entre 1 y 100. Sean K1=7259 y K2=9359 dos claves a las
Sea K la clave del dato a buscar. K está formada por los dígitos d 1, que se deben asignar posiciones en el array.
d2,...,dn. La función hash por truncamiento se representa como:
para calcular las direcciones correspondientes, por truncamiento a K1
H(k) = digitosElegidos (d1, d2...dn)+1 y K2:.

La elección de los dígitos es arbitraria. Se podrían tomar los de las H(K1)= digitosElegidos (7259)+1 = 75 + 1 = 76
posiciones impares o de las pares… Después se podrían unir de H(K2)= digitosElegidos (9359)+1 = 95 + 1 = 96
izquierda a derecha o de derecha a izquierda.
La suma de una unidad a los dígitos seleccionados es útil para obtener En este ejemplo se toman el primero y tercer digito de la clave y se
un valor entre 1 y 100. unen de izquierda a derecha.

Búsqueda mediante transformación de claves Búsqueda mediante transformación de claves

4. Función hash por truncamiento 4. Función hash por truncamiento

Observación. Las claves estudiadas hasta ahora han sido numéricas, Si hubiera combinación de letras y números, se procedería de la
pero en la práctica pueden ser alfabéticas o alfanuméricas. misma manera.

En general, cuando las claves presentan letras se suele asociar a cada Ejemplo
una un entero para convertirlas en valores numéricas.
Dada la clave Z4F21, su equivalente numérica sería 2740621.
A B C D ...Z
01 02 03 04 ...27
Otra alternativa sería tomar el valor decimal asociado para cada
carácter según el código ASCII. Una vez obtenida la clave en su
Así, si la clave fuera ADA, su equivalente numérica sería 010401.
forma numérica, se puede utilizar normalmente cualquiera de las
funciones antes estudiadas.

4
04/07/2017

Búsqueda mediante transformación de claves


Ejercicios. En todos los casos, N=1000.
Resuelva por modulo la siguientes claves.
• 7929
• 8575
• 6417
Resuelva por cuadrado medio la siguiente claves:
• 4321
• 3425
• 8765
Resuelva por truncamiento las siguientes claves:
• 25884
• 11402
• Aa
• BB
Resuelva por plegamiento las siguientes claves:
• 98652
• 43211
• 67103
• 71049

S-ar putea să vă placă și