Elaboració d'una eina didàctica en JAVA per tal d'estudiar l'estructura de dades “taula” implementada com a “hash” David Colomina Badia Director: Josep Maria Ribó Balust Setembre.
Download
Report
Transcript Elaboració d'una eina didàctica en JAVA per tal d'estudiar l'estructura de dades “taula” implementada com a “hash” David Colomina Badia Director: Josep Maria Ribó Balust Setembre.
Elaboració d'una eina didàctica
en JAVA per tal d'estudiar
l'estructura de dades “taula”
implementada com a “hash”
David Colomina Badia
Director: Josep Maria Ribó Balust
Setembre 2000
Índex
Fonaments
Funcions de dispersió
Estratègies de dispersió
Implementació
Conclusions - Treball futur
TFC - David Colomina Badia
Setembre 2000
2
Fonaments
Tipus d’accessos
Les taules com e.d. per implementar
l’accés per contingut
TAD Taula: Operacions, especificació
Estratègies d’implementació
TFC - David Colomina Badia
Setembre 2000
3
Tipus d’accessos
Accés seqüencial
Inserció de dades: Una darrera de l’altra
Consultem les dades: Una darrera de l’altra fins trobar-les
Eficiència: O(n) on n és el nombre d’elements emmagatzemats
Cost elevat si les dades poden tenir un volum gran
Accés per contingut
Consulta: Obtindrem l’element a partir d’un fragment del
contingut d’aquest. (Clau)
Eficiència:(O(1) o O(log(n)) on n és el nombre d’elements
emmagatzemats
TFC - David Colomina Badia
Setembre 2000
4
ED Taula: accés per contingut
Idea: Taula
cjt de parelles <clau,valor>
<k,v>
Clau és identificadora
Consultes Eficients: Cost O(1), O(log n)
És l’operació destacada (Consulta (k)
v)
Les taules es poden modelitzar com funcions f : K V
on K : espai de claus o índexs o identificadors
V : espai de valors o informació
f(k)
v
Existeixen altres tipus de taules amb clau no
identificadora (multitaules)
TFC - David Colomina Badia
Setembre 2000
5
TAD Taula: Operacions
Les operacions bàsiques de les taules són:
Crear ( ): Crea una taula buida sense cap parella <k,v>
Inserir(k,v): Inserim el parell <k,v> dins la taula,
associant per la clau inserida el seu corresponent valor o
informació.
Consultar (k) retorna v: Consultem el valor o la
informació que té associada la clau dins la taula.
Eliminar (k): Eliminem el parell <k,v> de la taula.
TFC - David Colomina Badia
Setembre 2000
6
TAD Taula: Especificació
Especificació algebraica
TAD TAULA (T_CLAU , T_VALOR) és
Importa:
BOOL
Operacions:
CREAR ( ) TAULA
INSERIR ( TAULA , T_CLAU , T_VALOR ) TAULA
CONSULTAR ( TAULA , T_CLAU ) T_VALOR
ELIMINAR ( TAULA , T_CLAU ) TAULA
EXISTEIX (TAULA, T_CLAU) BOOL
TFC - David Colomina Badia
Setembre 2000
7
TAD Taula: Especificació
Axiomes:
1. INSERIR ( INSERIR ( t , k1 , v1 ) , k2 , v2 ) =
– si k1 = k2 INSERIR ( t , k1 , v2 )
– sinó INSERIR ( INSERIR ( t , k2 , v2 ) , k1 , v1 )
2. CONSULTAR ( INSERIR ( t , k1 , v1 ) , k2 ) =
– si k1 = k2 v1
– sinó CONSULTAR ( t , k2 )
3. ELIMINAR ( INSERIR ( t , k1 , v1 ) , k2 ) =
– si k1 = k2 t
– sinó INSERIR ( ELIMINAR ( t , k2 ) , k1 , v1 )
TFC - David Colomina Badia
Setembre 2000
8
TAD Taula: Especificació
4. EXISTEIX ( INSERIR ( t , k1 , v1 ) , k2 ) =
– si k1 = k2 CERT
– sinó EXISTEIX ( t , k2 )
5. EXISTEIX ( CREAR( ) , k ) = FALS
Errors:
1. ELIMINAR ( CREAR( ) , k )
2. CONSULTAR ( CREAR( ) , k )
3. INSERIR ( t , k , )
fi TAD
TFC - David Colomina Badia
Setembre 2000
9
Estratègies d’implementació
Implementacions seqüencials
Llista
Vector
Implementacions arborescents
Arbres ABC
Arbres AVL
Arbres B+
Arbres 2-3
Arbres “Red-Black”
Funcions Injectives
Funcions no Injectives: Taules de dispersió
TFC - David Colomina Badia
Setembre 2000
10
Funcions Injectives
f és una funció injectiva que mapeja l’espai de claus a l’espai
d’adreces.
TFC - David Colomina Badia
Setembre 2000
11
Funcions Injectives
Implementació tant sols acceptable si es coneix la mida de
l’espai de les claus (a priori) i aquesta no és molt elevada, i
si es pot trobar una funció injectiva de cost baix.
Exemple:
Emmagatzematge de les persones que ocupen l’habitació
d’un hotel, on la clau seria el número de l’habitació i el
valor seria les dades de la persona que l’ocupa.
Tenim 40 habitacions per planta i 7 plantes.
Les habitacions es numeren: 100-139; 200-239;...; 700-739
Una possible funció injectiva que tindríem seria:
f(nh) = ((nh div 100) – 1)*40 + (nh mod 100)
On clau = Número d’habitació (nh)
TFC - David Colomina Badia
Setembre 2000
12
Funcions no injectives: Taules de dispersió
TFC - David Colomina Badia
Setembre 2000
13
Funcions no injectives: Taules de dispersió
Qüestions a resoldre:
Quina forma ha de prendre
la funció de dispersió per
ser prou “bona”?
Què fem amb les claus
dispersades per h a la
mateixa adreça?
“Funcions de
dispersió”
“Estratègies de
dispersió”
TFC - David Colomina Badia
Setembre 2000
14
Nomenclatura
B Capacitat de la taula (mida de l’espai d’adreces)
Claus sinònims ki, kj seran 2 claus sinònimes respecte
una funció de dispersió h, si i només si, dins la taula, tenen
la mateixa adreça assignada per h [h (ki) = h(kj)]
Col.lisions Es diu que es produeix una col.lisió, quan
volem inserir a la taula 2 claus sinònimes.
Factor de càrrega % d’ocupació d’una taula.
Funció de dispersió o funció de hash (h) és la funció
no injectiva que indueix una relació d’equivalència a l’espai
de claus, i h(k) és l’adreça que se li assigna a la clau k.
TFC - David Colomina Badia
Setembre 2000
15
Funcions de dispersió
Característiques:
Bona distribució de les claus (distribució
uniforme)
Que pugui generar qualsevol adreça de
l'espai d'adreces
Eficiència en el seu càlcul: cost O(1)
Dos consells pràctics:
La funció de hash ha d'involucrar tota la clau.
La funció de hash ha de tenir en compte
l'ordre dels components de la clau.
TFC - David Colomina Badia
Setembre 2000
16
Funcions de dispersió: Exemples (h)
Suma de tots els dígits
k 1
h : C * B , on
h(k )
codi k mod
i
B
i0
Funció fàcil de calcular i d’implementar
h(“abc”)=h(“bca”)=h(“cba”)=...
O(1), si |k| està fixada
TFC - David Colomina Badia
Setembre 2000
17
Funcions de dispersió: Exemples (h)
Suma ponderada de tots els dígits
k 1
h : C * B , on
h(k )
codi k i * b mod B
i
i0
b : nombre de caràcters possibles de k
Ineficient: Càlcul d’una potència
Sobreixement en el càlcul de la potència
Plegament de la clau en m parts de la
mateixa longitud
TFC - David Colomina Badia
Setembre 2000
18
Funcions de dispersió
Conclusions
Per bona que sigui una funció de dispersió, és
inherent a ella la existència de claus sinònimes i,
per tant, col.lisions, es necessari resoldre aquest
problema. Hi ha mètodes per realitzar-ho, que
són els que veurem a continuació dins les
“estratègies de hash”.
TFC - David Colomina Badia
Setembre 2000
19
Estratègies de dispersió
Les taules de dispersió poden
organitzar-se de diverses
maneres segons com es
gestionen les col.lisions
Possibles estratègies de dispersió:
Hash Tancat
Hash Obert
Taules Coalescents
Hash dinàmic
Encadenament
o no de les
col.lisions
TFC - David Colomina Badia
Setembre 2000
20
Famílies de redispersió
Redispersió lineal
hi(k) = (h(k) + c·i) mod B
Redispersió quadràtica
hi(k) = (h(k) +c·i2) mod B ;
0 i B-1
Redispersió doble
hi(k) = (h(k) + i·h’(k)) mod B
TFC - David Colomina Badia
Setembre 2000
21
Conclusions
Hem estudiat l’estructura de dades taula.
Hem donat una especificació acurada, em estudiat
diferents funcions de dispersió, diferents estratègies de
dispersió de hash, diferents funcions de redispersió.
S’ha realitzat l’eina didàctica realitzant la pàgina Web i
l’applet (on hi ha opció d’ajuda al context i d’ajuda de
l’aplicació, exemples, gràfics, operacions hash,
algorismes, execució pas a pas, possibilitat de definició
de les variables,...)
Hem assolit gairebé tots els objectius plantejats en el
treball. Ara queda, però, el més important i és que
aquesta eina sigui realment d’utilitat als seus
destinataris.
TFC - David Colomina Badia
Setembre 2000
22
Treball futur
Realitzar la implementació del hash dinàmic, de les
taules coalescents, altres funcions i estratègies de hash
que puguin existir i que no s’hagin tractat en el treball.
Internacionalitzar l’eina didàctica.
Estudiar d’altres estratègies de hash dinàmic, hash
tancat, hash obert que poden existir.
Donar els diferents algoritmes per les taules coalescents
i pel hash dinàmic explicats en el treball.
Realitzar una comparativa de costos entre els tipus de
hash que falten per veure i els que s’han vist.
Cercar noves funcions de dispersió i de redispersió, i
realitzar una comparativa entre elles
TFC - David Colomina Badia
Setembre 2000
23