Professional Documents
Culture Documents
diseo de algoritmos
Tablas Hash
Tablas hash
Funciones hash
Mtodo de divisin
Mtodo de multiplicacin
Tablas Hash
programa1(int n)
x1
var1n
var20
while (x<n)
var2var2 + var1
xx+1
print x
var1
10
var2
10
Tablas Hash
programa1(int n)
x1
var1n
var20
while (x<n)
var2var2 + var1
xx+1
print x
var1
10
2
3
var2
10
5
6
7
8
9
Tablas Hash
programa1(int n)
x1
var1n
var20
while (x<n)
var2var2 + var1
xx+1
print x
var1
10
2
3
var2
10
5
6
7
8
9
Tablas Hash
x
var1
10
2
3
var2
10
5
6
7
8
9
En qu posicin de la tabla se
debera almacenar un nuevo
dato?
Tablas Hash
x
var1
10
2
3
var2
10
5
6
7
8
9
Tablas Hash
192
17
10
2
3
18
128
10
5
6
7
8
9
Tablas Hash
0
5
6
10
7
8
10
0
1
2
3
Tablas Hash
0
1
2
3
4
5
6
10
7
8
10
DIRECT-ADDRESS-INSERT(T,X)
T[key[x]]x
DIRECT-ADDRESS-SEARCH(T,k)
return T[k]
DIRECT-ADDRESS-DELETE(T,k)
T[key[x]]nil
Tablas Hash
0
1
2
3
4
5
6
10
7
8
10
DIRECT-ADDRESS-INSERT(T,X)
T[key[x]]x
DIRECT-ADDRESS-SEARCH(T,k)
return T[k]
DIRECT-ADDRESS-DELETE(T,k)
T[key[x]]nil
Todas estas operaciones toman
tiempo constante O(1)
Tablas Hash
Universo de llaves U
5
6
10
7
8
10
9
Llaves utilizadas K
6
4
8
2
3
4
Tablas Hash
T
Universo de llaves U
5
6
10
7
8
10
9
Llaves utilizadas K
6
4
8
2
3
4
9
U={0, 1, ..., m-1}, donde |U|=m
La tabla de direccionamiento directo T, se puede ver como un arreglo T[0, ..., m-1]
donde cada posicin, o slot, corresponde a una llave en U
Tablas Hash
Tabla de direccionamiento directo T
DIRECT-ADDRESS-INSERT(T,4)
DIRECT-ADDRESS-INSERT(T,3)
DIRECT-ADDRESS-INSERT(T,1)
Tablas Hash
Describa un procedimiento para encontrar el elemento
mximo de una tabla T de tamao m. Indique su
complejidad
Tablas Hash
Considere el caso en el que tuviese que almacenar 1000
datos utilizando una tabla de direccionamiento directo
Qu pasa si |K|<<|U|?
Tablas Hash
Considere el caso en el que tuviese que almacenar 1000
datos utilizando una tabla de direccionamiento directo
Qu pasa si |K|<<|U|?
Los requerimientos de memoria pueden llegan a ser de
O(|U|) aun cuando no se utilicen todos los slots
Las tablas hash ofrecen una mecanismo para asignar la
posicin de almacenamiento para las llaves, de tal forma
que los requerimientos de memoria pueden ser de O(|K|)
Tablas Hash
T
10
12
11
9
Llaves utilizadas K
0
2
3
4=h(5)
10
5=h(2)
6
7
8=h(7)
10
9=h(0)
Tablas Hash
T
Llaves utilizadas K
k1
h(k2)
k2
k7
h(k7)
k5
h(k5)
m-1
Tablas Hash
T
Llaves utilizadas K
k1
k100
h(k2)
k2
k7
h(k7)=h(k100)
k5
h(k5)
m-1
Tablas Hash
Tabla hash (suponga que key(x)=x y m=5)
HASH-INSERT(T,4)
HASH-INSERT(T,5)
Muestre la tabla hash
Tablas Hash
T
Llaves utilizadas K
k1
k100
h(k2)
k2
k7
h(k7)=h(k100)
k5
h(k5)
m-1
Tablas Hash
T
k1
h(k2)
k2
Llaves utilizadas K
k1
k100
k2
k7
h(k7)=h(k100)
k7
k5
h(k5)
k5
m-1
Cada slot T[j] tiene una lista encadenada de todas las llaves cuyo
valor hash es j
k100
Tablas Hash
T
CHAINED-HASH-INSERT(T,x)
insertar x en la cabeza de la lista
T[h(key(x))]
0
h(k1)
h(k2)
k7)=h(k100)
h(k5)
m-1
k1
CHAINED-HASH-SEARCH(T,k)
buscar por un elemento con llave k
en la lista T[h(key(k))]
k2
k7
k100
CHAINED-HASH-DELETE(T,k)
borrar x de la lista T[h(key(k))]
k5
Tablas Hash
T
CHAINED-HASH-INSERT(T,x)
insertar x en la cabeza de la lista
T[h(key(x))]
0
h(k1)
h(k2)
k7)=h(k100)
h(k5)
k1
CHAINED-HASH-SEARCH(T,k)
buscar por un elemento con llave k
en la lista T[h(key(k))]
k2
k7
k100
CHAINED-HASH-DELETE(T,k)
borrar x de la lista T[h(key(k))]
k5
m-1
Tablas Hash
Muestra la tabla T despus de insertar las llaves 5, 28, 19 ,15,
20, 33, 12, 17, 10 en una tabla hash con 9 slots siendo la funcin
hash h(k)=k mod 9
Tablas Hash
Si se mantuvieran ordenados los elementos de cada lista
encadenada, cmo cambian los tiempo para insertar, borrar, y
buscar?
Tablas Hash
T
0
k1
k7
k2
k6
Tablas Hash
T
0
k1
k7
k2
k6
Tablas Hash
Teorema 1
Tablas Hash
Una buena funcin hash:
1
P(k )
m
k :h ( k ) j
, para j= 0, 1, , m-1
Tablas Hash
Es comn tener en un programa nombres de
identificadores que son similares, var1, var2, por ejemplo.
Una buena funcin hash deberas asignarlos a slots
diferentes, as se muestra que existe independencia entre
cada par de llaves
Tablas Hash
Llaves de tipo string
Tablas Hash
Funciones hash
Tablas Hash
Una funcin hash
Tablas Hash
Una funcin hash
Tablas Hash
Complete la tabla utilizando la fucion:
h(k)= km,
para almacenar las llaves
k1=0.4
k2=1.2
k3=1.8
k4=0.9
T
0
1
2 1
3
4
Tablas Hash
Mtodo divisin
Tablas Hash
Complete la tabla utilizando la funcin:
h(k)= k mod m,
para almacenar las llaves
k1=4
k2=2
k3=8
k4=9
T
0
1
2 1
Tablas Hash
Complete la tabla utilizando la funcin:
h(k)= k mod m,
para almacenar las llaves
k1=4
k2=2
k3=8
k4=9
T
0
1
2 1
K1,k3
k4
K2
Tablas Hash
A nivel de bits, si m es potencia de 2, se
cumple que el valor h(k) depender los
bits de ms bajo orden de k. haciendo
que h(k) no dependa de todos los valores
de k.
T
0
1
2 1
K1,k3
k4
K2
Tablas Hash
Mtodo multiplicacin
Tablas Hash
Mtodo multiplicacin