You are on page 1of 67

Dispersin

Docente: Carlos A. Ruiz De La Cruz Melo


Correo: zorroculto69@hotmail.com
Las tablas de dispersin o
hashing tables (en ingls) es
una tcnica que se utiliza
para implementar
inserciones, eliminaciones y
bsquedas en un tiempo
medio constante.

Una tabla Hash ideal
permite acceder a los
valores clave en tiempo
O(1).

La estructura de datos
central de esta tcnica es la
tabla de hashing (tabla de
dispersin.)


INTRODUCCIN
La estructura de datos ideal para la tabla
de dispersin es un arreglo de tamao fijo
que contiene las claves (elementos de la
tabla).

Una clave suele ser una cadena de
caracteres (o de nmeros) con un valor
asociado Si el tamao de la tabla es N, la
tabla se declara entre 0 y N-1. A cada
clave se le har corresponder un nmero
entre 0 y N-1 y se colocar en la celda
correspondiente.
TABLA HASH
- - -
0 1 2 N-1
N ubicaciones
4
CLAVE Y FUNCION HASH
Todos los elementos identificados
por una clave, debe de ser nica.

El mtodo por transformacin de
claves accesa a los datos por una
direccin (ndice).

Est basado en una funcin de
transformacin, clculo de direccin
o funcin hash.

Convierte una clave en una direccin
que permite accesar directamente a
su contenido.




) (clave H Direccin =
5
La clave que es tomada para calcular
debe ser mayor o igual que el
nmero de elementos del arreglo.

Debe ser simple de calcular y debe
asignar direcciones de manera
uniforme.

Si H(K
1
)=D, H(K
2
)=D y K
1
<> K
2
,
entonces se dice que hay una
colisin.

Una colisin es la asignacin de
una misma direccin a dos o ms
claves distintas.
CLAVE Y FUNCION HASH
6
FUNCIONES DE CLCULO DE
DIRECCIN
Para seleccionar una funcin
hash:
Importante definirla y difcil a la vez.
Difcil de determinar.
No existen reglas.

Funciones:
Mdulo (por Divisin).
Cuadrado.
Plegamiento o Doblamiento.
Truncamiento.
7
FUNCIONES DE MDULO (POR
DIVISIN)
Se toma el resto de la divisin de la clave entre
el nmero de componentes del arreglo.

Si tenemos un arreglo de N elementos, y la
clave a buscar es K, la funcin estar definida
as:



Al residuo de la divisin se le suma 1, para
obtener un valor entre 1 y N.

Para lograr una mayor uniformidad en la
distribucin, N debe ser primo o divisible entre
pocos nmeros.
1 ) mod ( ) ( + = N K k H
FUNCIONES DE MDULO (POR
DIVISIN)
Sean N = 100 el tamao del arreglo, y sean sus
direcciones los nmeros entre 1 y 100.

Sean K
1
= 7259 y K
2
= 9359 dos claves a las que se
debe asignar posiciones en el arreglo.

Aplicando la frmula con N = 100:

H(K
1
) = (7259 mod 100) + 1 = 60
H(K
2
) = (9359 mod 100) + 1 = 60

En este caso hay una colisin.

ejemplo
FUNCIONES DE MDULO (POR
DIVISIN)
Se aplica la frmula con N igual a un
valor primo:

H(K
1
) = (7259 mod 97) + 1 = 82
H(K
2
) = (9359 mod 97) + 1 = 48

Con N = 97 se ha eliminado la colisin.
10
FUNCIONES DE CUADRADO
Consiste en elevar al cuadrado la clave y tomar los
dgitos centrales como direccin.

El nmero de dgitos queda determinado por el rango
del ndice del arreglo.

Si K es la clave a buscar, la funcin estara definida
como:



La suma de 1 es para obtener un valor entre 1 y N.
1 ) ( _ ) (
2
+ = K centrales dgitos k H
FUNCIONES DE CUADRADO
Sean N = 100 el tamao del arreglo, y sean sus direcciones los
nmeros entre 1 y 100.

Sean K
1
= 7259 y K
2
= 9359 dos claves a las que se debe
asignar posiciones en el arreglo.

Se aplica la frmula para calcular las direcciones
correspondientes a K
1
y K
2
.

K
1
2
= 52 693 081
K
2
2
= 87 590 881

H(K
1
) = dgitos_centrales(52 693 081) + 1 = 94
H(K
2
) = dgitos_centrales(87 590 881) + 1 = 91

Como el rango va de 1 a 100 se toman los dos dgitos centrales.
ejemplo
12
FUNCIONES DE PLEGAMIENTO O
DOBLAMIENTO
Consiste en dividir la clave en partes de igual nmero de
dgitos y operar con ellas.

Se toma como direccin los dgitos menos significativos.

La operacin entre las partes puede ser suma o
multiplicacin.

Sea K la clave del dato a buscar. K est formada por los
dgitos d
1
, d
2
, ..., d
n
. La funcin sera:




La suma de una unidad es para obtener un valor entre 1 y N.


1 )) ... ( ... ) ... ( ) ... (( ) (
1 1
+ + + + =
+ n l j i i
d d d d d d DgMenSig k H
FUNCIONES DE PLEGAMIENTO O
DOBLAMIENTO
Sean N = 100 el tamao del arreglo, y sean sus
direcciones los nmeros entre 1 y 100.

Sean K
1
= 7259 y K
2
= 9359 dos claves a las que se
debe asignar posiciones en el arreglo.

Se aplica la frmula para calcular las direcciones
correspondientes a K
1
y K
2
.

H(K
1
) = digmensig(72 + 59) + 1
H(K
1
) = digmensig(131) + 1 = 32

H(K
2
) = digmensig(93 + 59) + 1
H(K
2
) = digmensig(152) + 1 = 53

De la suma de las partes se toman dos dgitos porque
los ndices varan entre 1 y 100.
ejemplo
14
FUNCIONES DE
TRUNCAMIENTO
Consiste en tomar algunos dgitos de la clave y formar
con ellos una direccin.

Es ms sencillo, pero ofrece menos uniformidad en la
distribucin de claves.

Sea K la clave del dato a buscar. K est formada por los
dgitos d
1
, d
2
, ..., d
n
. La funcin sera:



La eleccin de dgitos es arbitraria.
1 ) ... , ( ) (
2 1
+ =
n
d d d tos ElegirDgi k H
FUNCIONES DE
TRUNCAMIENTO
N = 100, tamao del arreglo.

direcciones = nmero entre 1 y 100.

K
1
=7259 y K
2
=9359 son las claves a las que se les desea
asignar posiciones en el arreglo.

Se aplica la frmula con N=100.

H(K
1
) = elegirdigitos(7 2 5 9) + 1 = 76
H(K
2
) = elegirdigitos(9 3 5 9) + 1 = 96

En este ejemplo se toma el primer y tercer nmero de la
clave y se une ste de izquierda a derecha..
ejemplo
16
RESOLUCIN DE
COLISIONES
La eleccin del mtodo adecuado es
importante.
Mtodo de reservar una casilla por clave.
Mtodos ms usados:
Arreglos anidados.
Encadenamiento.

Resolucin de Colisin por Reasignacin
Prueba Lineal.
Prueba Cuadrtica.
Doble Direccin hash.
Se denomina hash abierto o externo o
encadenado, a la estructura que resuelve las
colisiones mediante una lista. En stas el nmero
n, de elementos almacenados en la tabla, podra
ser superior al nmero B de elementos del arreglo
(nB).
RESOLUCIN DE
COLISIONES
HASH ABIERTO
Se denomina hash cerrado, a las estructuras que
almacenan los datos en las mismas casillas del
arreglo; debiendo disponerse de un mtodo para
determinar si el elemento del arreglo est vaco,
ocupado o descartado. En stas el nmero n de
elementos almacenados en la tabla no puede ser
superior al nmero B de elementos del arreglo (nB).
HASH CERRADO
18
REASIGNACIN POR PRUEBA
LINEAL
Detectada la colisin, se recorre el
arreglo secuencialmente a partir del
punto de colisin, buscando el elemento.

El proceso concluye cuando se halla el
elemento o se llega a una posicin vaca.

Se trata el arreglo como una estructura
circular. El elemento que sigue al ltimo
es el primero.

Existe fuerte agrupamiento alrededor de
ciertas claves.

A concentraciones de claves muy
frecuentes, la bsqueda tender a ser
secuencial.
colisin
Busqueda de
un espacio
libre
ARREGLO
1
2
3
4 43
5
6 25
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
V
Ya esta ocupado
por otra clave
REASIGNACIN POR PRUEBA
LINEAL
1
2
3
4 43
5
6 25
7 56
8 35
9
10
K H(K)
25 6
43 4
56 7
35 6
V
REASIGNACIN POR PRUEBA
LINEAL
1
2
3
4 43
5 54
6 25
7 56
8 35
9
10
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
V
REASIGNACIN POR PRUEBA
LINEAL
Ya esta ocupado
por otra clave
1
2
3
4 43
5 54
6 25
7 56
8 35
9 13
10
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
V
REASIGNACIN POR PRUEBA
LINEAL
1 80
2
3
4 43
5 54
6 25
7 56
8 35
9 13
10
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
V
REASIGNACIN POR PRUEBA
LINEAL
Ya esta ocupado
por otra clave
1 80
2
3
4 43
5 54
6 25
7 56
8 35
9 13
10 104
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
V
REASIGNACIN POR PRUEBA
LINEAL
Algoritmo PruebaLineal(K)
D H(K)
Si (v(D) = K) entonces
Escribir El elemento est en la posicin D
Sino
Si (v(D) = Vacio) entonces
v(D) K
Sino
DX D + 1
Mientras ((v(DX) <> K) y (v(DX) <> Vaco) y (DX <> D)) hacer
DX DX + 1
Si (DX = nElementos + 1) entonces
DX 1
Finsi
finmientras
Si(v(DX) = K) entonces
Escribir El elemento est en la posicin DX
Sino
Si (DX = D) entonces
Escribir El arreglo no tiene casillas vacias
Sino
v(D) K
finsi
finsi
finsi
finsi
finPruebaLineal
REASIGNACIN POR PRUEBA
LINEAL
26
REASIGNACIN POR PRUEBA
CUADRTICA.
La diferencia consiste en que en este mtodo las
direcciones alternativas se generarn como:

D + 1
D + 4
D + 9

D + i
2

Esta variacin permite una mejor distribucin de las
claves en colisin.

Desventaja es que existe un agrupamiento alrededor
de ciertas claves y casillas no visitadas.
1
2
3
4 43
5
6 25
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
V
REASIGNACIN POR PRUEBA
CUADRTICA.
Ya esta ocupado
por otra clave
1
2
3
4 43
5
6 25
7 56
8
9
10 35
K H(K)
25 6
43 4
56 7
35 6
V
REASIGNACIN POR PRUEBA
CUADRTICA.
D= 6 + 1*1= 7
D= 6 + 2*2 = 10
1
2
3
4 43
5 54
6 25
7 56
8
9
10 35
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
V
REASIGNACIN POR PRUEBA
CUADRTICA.
Ya esta ocupado
por otra clave
1
2
3
4 43
5 54
6 25
7 56
8 13
9
10 35
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
V
REASIGNACIN POR PRUEBA
CUADRTICA.
D= 4 + 1*1= 5
D= 4 + 2*2 = 8
1 80
2
3
4 43
5 54
6 25
7 56
8 13
9
10 35
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
V
REASIGNACIN POR PRUEBA
CUADRTICA.
Ya esta ocupado
por otra clave
1 80
2
3
4 43
5 54
6 25
7 56
8 13
9 104
10 35
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
V
REASIGNACIN POR PRUEBA
CUADRTICA.
D= 5+ 1*1= 6
D= 5 + 2*2 = 9
1 80
2
3
4 43
5 54
6 25
7 56
8 13
9 104
10 35
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
55 6
V
REASIGNACIN POR PRUEBA
CUADRTICA.
Ya esta ocupado
por otra clave
1 80
2 55
3
4 43
5 54
6 25
7 56
8 13
9 104
10 35
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
55 6
V
REASIGNACIN POR PRUEBA
CUADRTICA.
Algoritmo pruebacuadratica(k)
d h(k)
si(v(d) = k) entonces
escribir el elemento est en la posicin d
sino
si (v(d) = vaci) entonces
v(d) k
sino
i 1
dx d + i * i
mientras((v(dx) <> k) y (v(dx) <> vaco)) hacer
i i + 1
dx dx + i * i
si(dx > nelementos) entonces
i 0
dx 1
finsi
fmientras
si(v(dx) = k) entonces
escribir el elemento est en la posicin dx
sino
v(d) k
finsi
finsi
finsi
finpruebacuadratica
REASIGNACIN POR PRUEBA
CUADRTICA.
36
REASIGNACIN POR DOBLE
DIRECCIN
El mtodo consiste en que cuando se detecta la
colisin, se debe generar otra direccin aplicando la
funcin hash a la direccin obtenida anteriormente.

Se detiene el proceso cuando se halla el elemento,
o cuando se encuentra una posicin vaca.

La funcin hash que se aplique puede ser diferente
con respecto a la que se aplic originalmente a la
clave.

No existen reglas para decidir cul funcin es la
mejor para emplear en el clculo de las direcciones
sucesivas.
1
2
3
4 43
5
6 25
7 56
8
9
10
K H(K) H(D) H(D) H(D)
25 6
43 4
56 7
35 6
V
REASIGNACIN POR DOBLE
DIRECCIN
Ya esta ocupado
por otra clave
1
2
3
4 43
5
6 25
7 56
8 35
9
10
K H(K) H(D) H(D) H(D)
25 6
43 4
56 7
35 6 8
V
REASIGNACIN POR DOBLE
DIRECCIN
D=H (6)=8
1
2
3
4 43
5 54
6 25
7 56
8 35
9
10
K H(K) H(D) H(D) H(D)
25 6
43 4
56 7
35 6
54 5
13 4
V
REASIGNACIN POR DOBLE
DIRECCIN
Ya esta ocupado
por otra clave
1
2
3
4 43
5 54
6 25
7 56
8 35
9
10 13
K H(K) H(D) H(D) H(D)
25 6
43 4
56 7
35 6
54 5
13 4 6 8 10
V
REASIGNACIN POR DOBLE
DIRECCIN
D=H (4)=6
D=H (6)=8
D=H (8)=10
1
2
3
4 43
5 54
6 25
7 56
8 35
9
10 13
K H(K) H(D) H(D) H(D)
25 6
43 4
56 7
35 6
54 5
13 4 6 8 10
104 5
V
REASIGNACIN POR DOBLE
DIRECCIN
Ya esta ocupado
por otra clave
1
2
3
4 43
5 54
6 25
7 56
8 35
9 104
10 13
K H(K) H(D) H(D) H(D)
25 6
43 4
56 7
35 6
54 5
13 4 6 8 10
104 5 7 9
V
REASIGNACIN POR DOBLE
DIRECCIN
D=H (5)=7
D=H (7)=9
algoritmo dobledireccion(k)
d h(k)
si(v(d) = k) entonces
escribir el elemento est en la posicin d
sino
si (v(d) = vaci) entonces
v(d) k
sino
dx h2(d)
mientras((v(dx) <> k) y (v(dx) <> vaco) y (dx <> d) y (dx nelementos)) hacer
dx h2(dx)
finmientras
si(v(dx) = k) entonces
escribir el elemento est en la posicin dx
sino
si (dx = d) entonces
escribir el arreglo no tiene casillas vacias
sino
v(d) k
finsi
finsi
finsi
finsi
findobledireccion

REASIGNACIN POR DOBLE
DIRECCIN
44
RESOLUCIN DE COLISIONES POR
ARREGLOS ANIDADOS
Este mtodo consiste en que cada elemento del
arreglo tenga otro arreglo en el cual se almacenen
los elementos colisionados.

Aunque la solucin parece sencilla, es ineficiente.

Al trabajar con arreglos, estamos limitados por el
espacio que tienen asignados.

Surge un problema: elegir el tamao adecuado del
arreglo que permita un equilibrio entre el costo de
memoria y el nmero de valores colisionados que
puede almacenar.
RESOLUCIN DE COLISIONES POR
ARREGLOS ANIDADOS
1
2
3
4 43
5
6 25
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
Ya esta ocupada esta
posicin
RESOLUCIN DE COLISIONES POR
ARREGLOS ANIDADOS
1
2
3
4 43
5
6 25 35
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
RESOLUCIN DE COLISIONES POR
ARREGLOS ANIDADOS
1
2
3
4 43
5 54
6 25 35
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
Ya esta ocupada esta
posicin
RESOLUCIN DE COLISIONES POR
ARREGLOS ANIDADOS
1
2
3
4 43 13
5 54
6 25 35
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
RESOLUCIN DE COLISIONES POR
ARREGLOS ANIDADOS
1 80
2
3
4 43 13
5 54
6 25 35
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
Ya esta ocupada esta
posicin
RESOLUCIN DE COLISIONES POR
ARREGLOS ANIDADOS
1 80
2
3
4 43 13
5 54 104
6 25 35
7 56
8
9
10
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
51
RESOLUCIN DE COLISIONES POR
ENCADENAMIENTO
Consiste en que cada elemento del arreglo tenga un
apuntador a una lista enlazada.

La lista se ir generando e ir almacenando los valores
colisionados a medida que se requiera. Es el mtodo
ms eficiente.

Cualquiera que sea el nmero de colisiones, siempre se
puede tratar una ms.

La desventaja del mtodo es que ocupa espacio
adicional al de la tabla y requiere el manejo de listas
ligadas.

Si las listas crecen demasiado se pierde la facilidad de
acceso directo del mtodo hash.
K H(K)
25 6
43 4
56 7
35 6
RESOLUCIN DE COLISIONES POR
ENCADENAMIENTO
1
2
3
4 43
5
6 25
7 56
8
9
10
Ya esta ocupada
esta posicin
K H(K)
25 6
43 4
56 7
35 6
RESOLUCIN DE COLISIONES POR
ENCADENAMIENTO
1
2
3
4 43
5
6 25
7 56
8
9
10
35
nulo
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
RESOLUCIN DE COLISIONES POR
ENCADENAMIENTO
1
2
3
4 43
5 54
6 25
7 56
8
9
10
35
nulo
Ya esta ocupada
esta posicin
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
RESOLUCIN DE COLISIONES POR
ENCADENAMIENTO
1
2
3
4 43
5 54
6 25
7 56
8
9
10
35
nulo
13
nulo
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
RESOLUCIN DE COLISIONES POR
ENCADENAMIENTO
1 80
2
3
4 43
5 54
6 25
7 56
8
9
10
35
nulo
13
nulo
Ya esta ocupada
esta posicin
K H(K)
25 6
43 4
56 7
35 6
54 5
13 4
80 1
104 5
RESOLUCIN DE COLISIONES POR
ENCADENAMIENTO
1 80
2
3
4 43
5 54
6 25
7 56
8
9
10
35
nulo
13
nulo
104
nulo
Llamamos factor de carga de una tabla de
dispersin, , a la razn entre el nmero
de elementos en la tabla y el tamao de la
misma:
FACTOR DE CARGA EN
ENCADENAMIENTO
tabla la de tamao
tabla la en elementos de numero
=
FACTOR DE CARGA EN
ENCADENAMIENTO
La longitud media de una lista es .

El tiempo que se tarda en realizar una bsqueda
ser el tiempo en que se calcula la funcin de
dispersin ms el tiempo necesario para recorrer
la lista.

Si la bsqueda es infructuosa, el nmero medio
de enlaces por recorrer es .

Si la bsqueda tiene xito los enlaces por
recorrer son, por trmino medio, 1 + /2.
De esto se deduce que el factor de carga es
importante a la hora de disear una tabla.

En el caso de la dispersin por
encadenamiento la regla general es que
tienda a 1 (es decir, el tamao de la tabla
igual a los elementos esperados).
CONCLUSIN RESPECTO AL
FACTOR DE CARGA
La dispersin cerrada o por reasignacin,
soluciona las colisiones buscando celdas
alternativas hasta encontrar una vaca (dentro
de la misma tabla).

Las estrategias son:

Prueba Lineal.
Prueba Cuadrtica.
Doble Direccin hash.

DISPERSIN POR REASIGNACIN
PRUEBA LINEAL
Las desventajas que tiene este mtodo son: el tiempo que se
tarda en encontrar una celda vaca y la formacin de bloques de
celdas ocupadas, llamada efecto agrupamiento primario.

A causa de este efecto, cualquier clave que se disperse en un
agrupamiento realizar varios intentos para resolver la colisin, y
agrandar el agrupamiento.

Para inserciones y bsquedas no exitosas el nmero de intentos
aproximado sera:





Para bsquedas exitosas sera:
2
)
) 1 (
1
1 (
2

+
= total
2
)
) 1 (
1
1 (

+
= total
PRUEBA CUADRTICA
En este tipo de exploracin no hay garanta de encontrar
una celda vaca si la tabla se llena a ms de la mitad, o
antes si el tamao de la tabla no es primo.

Si se usa la exploracin cuadrtica, y el tamao de la tabla
es primo, entonces siempre se puede insertar un elemento
nuevo si la tabla est, al menos, medio vaca.

Aunque la exploracin cuadrtica elimina el agrupamiento
primario, se produce otro fenmeno llamado agrupamiento
secundario, ya que las claves que se dispersan a la misma
posicin intentarn las mismas celdas.

Para inserciones y bsquedas no exitosas, Cul es el
numero de intentos?

Cuantos intentos para bsquedas exitosas?
Con la dispersin doble se consiguen
buenos resultados, aunque es ms
compleja y, por lo tanto, ms lenta que
otras soluciones (como la exploracin
cuadrtica).

Para inserciones y bsquedas no
exitosas, Cul es el numero de
intentos?

Cuantos intentos para bsquedas
exitosas?

PRUEBA DE DOBLE
DIRECCIN
DISTRIBUCIN DE UNA
ESTRUCTURA DE HASH
Es posible predecir cmo se van a
distribuir los registros en un archivo, esto
se hace a travs de probabilidades

La Distribucin e Poisson

Probabilidad de que la direccin "b"
sea escogida en una estructura de N
posiciones es:


N
b B P
1
) ( = =
DISTRIBUCIN DE UNA
ESTRUCTURA DE HASH
Probabilidad de que la direccin(a) no
sea escogida:

N N
N
a A P
1
1
1
) ( =

= =
Probabilidad de que una posicin sea
escogida 2 veces:
bxb BB P = ) (
Probabilidad de que x registros tengan
la misma direccin:
( )
N
r
x
x
e
N
r
x P

|
.
|

\
|
=
!
) (
Implemente un programa usando archivos que permita
gestionar las operaciones(crear cuenta de ahorro, retirar,
depositar, ver estado de cuenta, ver movimientos sobre la
cuenta de ahorro) en las cuentas de ahorros en un banco. No
utilice ningn tip de estructura temporal como arreglos o listas
u otro archivo

Aplique:
1. Dispersin de claves (hash)
2. Utilice alguna de las tcnicas de colisiones conocidas

You might also like