Está en la página 1de 18

ESTRUCTURAS DE DATOS

y ALGORITMOS
Licenciatura en Ciencias de la Computación

TRANSFORMACIÓN DE CLAVES

HASHING

DISPERSIÓN
Estructuras de Datos y Algoritmos

HASHING
Problema:

Almacenar y recuperar un elemento


particular, identificado por medio de su
valor de clave, con el menor costo posible.

¿Cómo deben, los elementos, ser almacenados?

TABLAS DE ACCESO TABLAS


DIRECTO HASH
Estructuras de Datos y Algoritmos

HASHING
Los elementos se almacenan en direcciones de
memoria, entonces:

¿Cómo determinar la dirección de memoria en la cual


almacenar cada elemento?

H:KD

transformación –H- de claves –K- en direcciones –D-


Estructuras de Datos y Algoritmos

HASHING
Si K = { ki / 000 <= ki <= 999} D = { di / 000 <= di <= 999}

y |K| = 1000 y |D| = 1000

¿Cuál es la función H: KD ?

Identidad : K  D, esto es:


h (ki) = id (ki ) = d 100 100

Si k = 100 entonces id(100) = 100 = d 999


T
Estructuras de Datos y Algoritmos

HASHING
Situación ideal ya que:
HASHING • todas las posiciones de la tabla T están ocupadas
PERFECTO • para dos claves distintas k1 y k2, se cumple que
h(k1) es distinta de h(k2).

Problema!!!!
k1  k2 y h (k1) = h (k2) = d

k1 y k2 son claves sinónimas que colisionan en la dirección d bajo la


transformación h.
Estructuras de Datos y Algoritmos

HASHING
Método de la División
A
s a ) Elección de la función de
Extracción
p transformación H.
e
c • distribuir las claves Plegado
t
o
uniformemente
s Cuadrado Medio
• ser calculable de modo
R eficiente
e Funciones aplicables a claves
l alfanuméricas
e
v
a
n Encadenamiento
t
e b) Política de manejo de
s colisiones. Uso de Buckets o cubos

Direccionamiento abierto.
Estructuras de Datos y Algoritmos

HASHING –
Funciones de transformación (1)

Método de la División

h ( k) = k mod M

Extracción

Extraer de la clave, los dígitos que varían mas aleatoriamente

Plegado

Si ki = ki1 ki2 | ... | kin-1 kin

h(ki ) = ki1 ki2 + ...+ kin-1 kin


Estructuras de Datos y Algoritmos

HASHING –
Funciones de transformación (2)

Cuadrado Medio
ki = ki1 ki2 ... kin-1 kin

h(ki ) = ki 2 y luego se extraen los dígitos centrales

di = kij kij+1 .... kij+l 1< j < j+l < n y 0<= kij kij+1 .... kij+l <= M-1

Funciones aplicables a claves alfanuméricas

h (ki ) = ASCII (ci1 ) + ASCII (ci2 ) +......+ ASCII (cin )


ki = ci1 ci2 ci3 .... cin
h (ki ) = ASCII (ci1 ) * b1 + ASCII (ci2 ) * b2 +......+
ASCII (cin ) * bn
Estructuras de Datos y Algoritmos

HASHING –
Funciones de transformación (3)

Claves = {18123, 17705, 16141, 17597, 18472, 17159, 17192,


14567, 16045, 17087, 17163, 18343, 18050, 17719, 17704, 16406,
16482, 16287}
División
18123 Mod 18= 15

Extracción

16656 23 23 Mod 18 = 5

Plegado

18 + 12 + 3 = 33 33 Mod 18 = 15

Cuadrado Medio

181232 = 328443129 44 Mod 18 = 7


Estructuras de Datos y Algoritmos

CLAVES MOD 18 EXTRACCIÓN PLEGADO CUADRADO


MEDIO
18123 15 5 15 7
17705 11 5 2 13
16141 13 5 13 13
17597 11 7 14 0
18472 4 0 0 14
17159 5 5 5 13
17192 2 2 2 10
14567 5 13 5 7
16045 7 9 7 6
17087 5 15 14 11
17163 9 9 0 14
18343 1 7 1 11
18050 14 14 5 2
17719 7 1 7 8
17704 10 4 1 13
16406 8 6 8 2
16482 12 10 12 2
16287 15 15 15 12
Estructuras de Datos y Algoritmos

HASHING –
Funciones de transformación (5)

h1 (ki ) = ASCII (ci1 ) + ASCII (ci2 ) +......+ ASCII (cin )


Caracter ASCII
R 82 k1 : ROMA k2 : RAMO
O 79
M 77
A 65

h1 (ROMA ) = 82 + 79 + 77 + 65 =303 = 82 + 65 + 77 + 79 = h1(RAMO)

h2 (ki ) = ASCII (ci1 ) * b1 + ASCII (ci2 ) * b2 +......+ ASCII (cin ) * bn

h2 (ROMA ) = 82 *101+ 79 * 102+ 77 * 103 + 65 * 104 = 735720


h2 (RAMO ) = 82 *101+ 65 * 102 + 77 *103+ 79 *104 = 163320
Estructuras de Datos y Algoritmos

HASHING
Método de la División
A
s a ) Elección de la función de
Extracción
p transformación H.
e
c • distribuir las claves Plegado
t
o
uniformemente
s Cuadrado Medio
• ser calculable de modo
R eficiente
e Funciones aplicables a claves
l alfanuméricas
e
v
a
n Encadenamiento
t
e b) Política de manejo de
s colisiones. Uso de Buckets o cubos

Direccionamiento abierto.
Estructuras de Datos y Algoritmos

HASHING –
Políticas de manejo de colisiones (1)

Encadenamiento o Dispersión Abierta

M-1

T
Estructuras de Datos y Algoritmos

HASHING –
Políticas de manejo de colisiones (2)

Uso de Buckets
0 b

0 Enlace o Contador

Área Primaria

M-1

Área de Overflow

T
Estructuras de Datos y Algoritmos

HASHING –
Políticas de manejo de colisiones (3)

Direccionamiento Abierto

M-1

T
Estructuras de Datos y Algoritmos

HASHING –
Políticas de manejo de colisiones (4)
• Secuencia de prueba lineal

h(k), h(k)-1,.......,1, 0, M-1, M-2,....., h(k)+1 reducida a módulo tamaño de la tabla

Agrupamientos
Primarios!!!

• Secuencia de prueba pseudo random

h(k)+0, h(k)+r1, ...., h(k)+rm-1 reducida a módulo tamaño de la tabla

Agrupamientos
Secundarios!!!

• Doble Hashing
h(k) – i * h2 ( k) para 0 <= i <= M-1
Estructuras de Datos y Algoritmos

HASHING
Factor de Carga
Standish define al factor de carga  de una tabla como la razón entre el número
de entradas N ocupadas en la tabla y el número total de entradas M en la tabla
=N/M
Este autor expresa que si  <= 0.7, la cantidad de comparaciones involucradas en
la recuperación de un elemento es adecuada, mientras que la performance se
deteriora, especialmente al aplicar la secuencia de prueba lineal, a medida que la
tabla se aproxima a la saturación total – cuando N se aproxima a M.

También podría gustarte