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
i0
 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
i0
 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