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 ReportTranscript 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