Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

Σχετικά έγγραφα
Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing)

Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing)

Διάλεξη 22: Τεχνικές Κατακερματισμού I (Hashing)

Διάλεξη 18: Τεχνικές Κατακερματισμού I (Hashing)

Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων και Αλγόριθμοι

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Κατακερματισμός. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

10. Πίνακες Κατακερματισμού

Ο ΑΤΔ Λεξικό. Σύνολο στοιχείων με βασικές πράξεις: Δημιουργία Εισαγωγή Διαγραφή Μέλος. Υλοποιήσεις

Οργάνωση αρχείων: πως είναι τοποθετηµένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΝΟΤΗΤΑ 8 KATAKEΡΜΑΤΙΣΜΟΣ (HASHING)

Διδάσκων: Κωνσταντίνος Κώστα

Δομές Δεδομένων. Κατακερματισμός. Δομές Δεδομένων & Αλγόριθμοι. Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 1

Πίνακες (Μια παλιά άσκηση) Πίνακες Κατακερματισμού (Hash Tables) Πίνακες (Μια παλιά άσκηση) Εισαγωγή. A n

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

Βασικές οµές εδοµένων

Τα δεδομένα (περιεχόμενο) μιας βάσης δεδομένων αποθηκεύεται στο δίσκο

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

HY240 : Δομές Δεδομένων. Φροντιστήριο Προγραμματιστικής Εργασίας 2 ο και 3 ο Μέρος

Συναρτήσεις Κατακερματισμού και Πίνακες Κατακερματισμού

Δομές Αναζήτησης. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

Πίνακες Διασποράς. Χρησιμοποιούμε ένα πίνακα διασποράς T και μια συνάρτηση διασποράς h. Ένα στοιχείο με κλειδί k αποθηκεύεται στη θέση

Πίνακες Συμβόλων. εισαγωγή αναζήτηση επιλογή. εισαγωγή. αναζήτηση

f x = f a + Df a x a + R1 x, a, x U και από τον ορισµό της 1 h f a h f a h a h h a R h a i i j

Γράφοι (συνέχεια) Ο αλγόριθµος Dijkstra για εύρεση βραχυτέρων µονοπατιών Ta µονοπάτια Euler

f x = f a + Df a x a + R1 x, a, x U και από τον ορισµό της 1 h f a h f a h a h h a R h a i i j

Δυναμικά Σύνολα. Δυναμικό σύνολο. Tα στοιχεία του μεταβάλλονται μέσω εντολών εισαγωγής και διαγραφής. διαγραφή. εισαγωγή

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Cuckoo Hashing. Αλγόριθμοι και Πολυπλοκότητα. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Advanced Data Indexing

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Κατακερµατισµός Κεφάλαιο 14. Ε. Μαρκάκης Επίκουρος Καθηγητής

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Δοµές Δεδοµένων. 15η Διάλεξη Δέντρα Δυαδικής Αναζήτησης και Κατακερµατισµός. Ε. Μαρκάκης

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Αλγόριθµοι Οπισθοδρόµησης

Ν. Μ. Μισυρλής. Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών. Καθηγητής: Ν. Μ. Μισυρλής 29 Μαΐου / 18

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

Διάλεξη 22: Δυαδικά Δέντρα. Διδάσκων: Παναγιώτης Ανδρέου

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Ελάχιστα Γεννητορικά ένδρα

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 8-1

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Κατακερματισμός (Hashing)

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Advanced Data Indexing

Προηγμένη Ευρετηρίαση Δεδομένων (ΠΜΣ) Ενδεικτικές ερωτήσεις-θέματα για την εξέταση της θεωρίας

Δυναμική Διατήρηση Γραμμικής Διάταξης

3 Αναδροµή και Επαγωγή

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Επιµέλεια Θοδωρής Πιερράτος

Ενότητα 7 Ουρές Προτεραιότητας

Linear Hashing. Linear vs other Hashing

Κατακερματισμός. 4/3/2009 Μ.Χατζόπουλος 1

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΕΠΛ231: Δομές Δεδομένων και Αλγόριθμοι. Εαρινό Εξάμηνο Φροντιστήριο 10 ΛΥΣΕΙΣ

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

Δυναμικός Κατακερματισμός. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

ΠΛΗ111. Ανοιξη Μάθηµα 8 ο. Αναζήτηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Πληροφορική 2. Δομές δεδομένων και αρχείων

Εργαστήριο 2 Δυναμικές Δομές Δεδομένων Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Διάλεξη 14: Δέντρα IV B Δένδρα. Διδάσκων: Παναγιώτης Ανδρέου

4. Αναδροµικός τύπος Είναι ο τύπος που συσχετίζει δύο ή περισσότερους γενικούς όρους µιας ακολουθίας

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Insert(K,I,S) Delete(K,S)

Υλοποίηση Λιστών. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα:

Διάλεξη 29: Γράφοι. Διδάσκων: Παναγιώτης Ανδρέου

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕ ΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΝΕΥΡΩΝΙΚΑ ΙΚΤΥΑ

Πίνακες Κατακερματισμού. Hash Tables. Προγραμματισμός II 1

Επεξεργασία Ερωτήσεων

Ακρότατα υπό συνθήκη και οι πολλαπλασιαστές του Lagrange

Διδάσκων: Κωνσταντίνος Κώστα

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

ΗΥ240: οµές εδοµένων Χειµερινό Εξάµηνο Ακαδηµαϊκό Έτος Παναγιώτα Φατούρου. Προγραµµατιστική Εργασία 3 ο Μέρος

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

4.3. Γραµµικοί ταξινοµητές

Κατακερµατισµός. Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετημένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Ασκήσεις για το µάθηµα «Ανάλυση Ι και Εφαρµογές» (ε) Κάθε συγκλίνουσα ακολουθία άρρητων αριθµών συγκλίνει σε άρρητο αριθµό.

Standard Template Library (STL) C++ library

o AND o IF o SUMPRODUCT

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΛΥΣΗ ΣΤΗΝ ΕΥΤΕΡΗ ΑΣΚΗΣΗ

Πρόβληµα 2 (15 µονάδες)

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

Ενότητα 6 Κατακερµατισµός

Ενότητα 7 Κατακερµατισµός

(CLR, κεφάλαιο 32) Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Παραστάσεις πολυωνύµων Πολυωνυµική Παρεµβολή ιακριτός Μετασχηµατισµός Fourier

Διάλεξη 17: Δυαδικά Δέντρα. Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διδάσκων: Παναγιώτης Ανδρέου

Κεφάλαιο 6 Παράγωγος

Transcript:

Τεχνικές Κατακερµατισµού Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Τεχνικές Κατακερµατισµού ιαχείριση Συγκρούσεων µε Αλυσίδωση ιαχείριση Συγκρούσεων µε Ανοικτή ιεύθυνση ιπλός Κατακερµατισµός, ιατεταγµένος Κατακερµατισµός Επανακατακερµατισµός ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-1

Τεχνικές Κατακερµατισµού Hashing Έχουµε µελετήσει τη χρήση ισοζυγισµένων δυαδικών δένδρων για αποθήκευση δεδοµένων. Οι διαδικασίες find και insert έχουν χρόνο εκτέλεσης της τάξης Ο( ). Έστω ότι θέλουµε να κατασκευάζουµε και να διατηρούµε σύνολα, στοιχεία των οποίων προέρχονται από ένα σύµπαν (universe) U σταθερού µεγέθους n: U = {u 1,, u n } Υπάρχει πιο αποδοτική µέθοδος από τη χρήση δυαδικών δένδρων; Ναι, δεδοµένου ότι υπάρχει µια απλή διαδικασία η οποία για κάθε u U, υπολογίζει την τιµή i για την οποία u= u i. π.χ. χρησιµοποιώντας την ιδέα του BucketSort. Μεταξύ των απλούστερων τρόπων να απεικονίζουµε ένα σύνολο S U είναι αυτός του διανύσµατος δυφίων, bit-vector. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-2

Bit vectors Ένα bit-vector είναι µονοδιάστατος πίνακας µε n bits, Bits[1..n], τέτοιος ώστε Bits[i] = 1, αν u S Bits[i] = 0, αν u S Για παράδειγµα αν U = {1,,9} τότε το σύνολο S = {1, 3, 7} αναπαρίσταται ως το bit-vector: Bits = [1,0,1,0,0,0,1,0,0] Ο χρόνος εύρεσης και εισαγωγής/διαγραφής στοιχείου µε αυτή την απεικόνιση είναι Ο(1). Πρόβληµα της στρατηγικής αυτής είναι: σπατάλη µνήµης αν το N είναι κατά πολύ µεγαλύτερο από τον αριθµό των στοιχείων που πρόκειται να βρίσκονται ανά πάσα στιγµή στον πίνακα. Λύση: ο κατακερµατισµός που είναι µια οικογένεια µεθόδων που αντιστοιχεί ένα κλειδί σε µία θέση ενός πίνακα (key-to-address transformation). ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-3

Κατακερµατισµός Κεντρική Ιδέα Πίνακας κατακερµατισµού (hash table) είναι µια δοµή δεδοµένων που υποστηρίζει τις διαδικασίες insert και find σε (σχεδόν) σταθερό χρόνο. Ένας πίνακας κατακερµατισµού χαρακτηρίζεται από 1. το µέγεθος του, hsize, και 2. κάποια συνάρτηση κατακερµατισµού h η οποία αντιστοιχεί κλειδιά στο σύνολο των ακεραίων [0,, hsize 1]. Tα δεδοµένα αποθηκεύονται στον πίνακα H[0,, hsize 1]: το κλειδί k αποθηκεύεται στον H στη θέση H[h(k)]. Αποδοτικές διαδικασίες insert και find. ηµιουργούνται δύο σηµαντικά ερωτήµατα: 1. ποια είναι καλή επιλογή για τη συνάρτηση h; 2. τι θα πρέπει να γίνεται αν h(k 1 ) = h(k 2 ) για δύο κλειδιά k 1,k 2,µε k 1 k 2 ; (αυτό ονοµάζεται σύγκρουση και είναι πολύ πιθανό να συµβεί.) ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-4

Παράδειγµα Έστω ότι τα δεδοµένα µας είναι ζεύγη (όνοµα, αρ. ταυτότητας) και hsize = 11. Χρησιµοποιούµε τον α.τ. ως κλειδί και θέτουµε h((α, β)) = β mod 11. H data 0 1 2 3 4 5 6 7 8 9 10 (Λουκία, 813352) (Ελένη, 782312) (Χρίστος, 754621) ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-5

Επιλογή Συνάρτησης Κατακερµατισµού Ιδιότητες µιας καλής συνάρτησης κατακερµατισµού: 1. Θα πρέπει να χρησιµοποιεί ολόκληρο τον πίνακα [0 hsize 1]. 2. Θα πρέπει να σκορπίζει οµοιόµορφα τα κλειδιά στον πίνακα Η. 3. Θα πρέπει να υπολογίζεται εύκολα. Συνήθως το µέγεθος του πίνακα hsize είναι πρώτος αριθµός. Η συνάρτηση h αρχικά αντιστοιχίζει το κλειδί σε κάποιο ακέραιο αριθµό a και στη συνέχεια παίρνει την τιµή a mod hsize. Έστω ότι το κλειδί είναι αλυσίδα από 8 χαρακτήρες s[0 7]. ύο παραδείγµατα συναρτήσεων κατακερµατισµού είναι: 1. το άθροισµα των κωδικών ASCII των χαρακτήρων. 2. s[0] + s[1]*128 + s[2]*128 2 + + s[7]*128 7 Ερώτηµα: Πως γίνεται η διαχείριση συγκρουόµενων κλειδιών; Οι τεχνικές λύσεις διακρίνονται σε 2 κατηγορίες: µέθοδοι µε αλυσίδωση και µέθοδοι ανοικτής διεύθυνσης. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-6

ιαχείριση συγκρούσεων µε αλυσίδωση Αφού περισσότερα από ένα κλειδιά µπορούν να πάρουν την ίδια τιµή από τη συνάρτηση κατακερµατισµού, µπορούµε να θεωρήσουµε ότι κάθε θέση του πίνακα δείχνει σε µια ευθύγραµµη απλά συνδεδεµένη λίστα. Για κάθε i, στη θέση Η[i] του πίνακα βρίσκουµε λίστα που περιέχει όλα τα κλειδιά που απεικονίζονται από τη συνάρτηση h στη θέση αυτή. Για να βρούµε κάποιο κλειδί k, πρέπει να ψάξουµε στη λίστα που δείχνεται στη θέση H[h(k)]. Εισαγωγές και εξαγωγές στοιχείων µπορούν να γίνουν εύκολα µε βάση τις διαδικασίες συνδεδεµένων λιστών. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-7

Παράδειγµα 0 1 2 3 4 5 6 7 8 9 10 34 67 46 114 26 17 85 hsize = 11 ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-8

Aνάλυση της Τεχνικής Αλυσίδωσης Eισαγωγή στοιχείου απαιτεί χρόνο Ο(1). Εύρεση/διαγραφή κλειδιού k συνεπάγεται τη διέλευση της λίστας H[h(k)]. Για να αναλύσουµε τον χρόνο εκτέλεσης των πιο πάνω διαδικασιών ορίζουµε τον συντελεστή φορτίου (load factor) λ του πίνακα H ως τον λόγο λ = n/hsize όπου n είναι ο αριθµός των στοιχείων που αποθηκεύει ο πίνακας. ηλαδή, κατά µέσο όρο, κάθε λίστα του πίνακα έχει µήκος λ. Εποµένως ο αναµενόµενος χρόνος χειρίστης περίπτωσης εύρεσης στοιχείου είναι 1+λ. Ιδανικά θα θέλαµε ο λόγος λ να έχει σταθερή τιµή (συνήθως κοντά στο 1), ώστε οι διαδικασίες να εκτελούνται σε σταθερό χρόνο. Άρα πρέπει να διαλέγουµε το µέγεθος του πίνακα να είναι ανάλογο του αριθµού των στοιχείων, n. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-9

ιαχείριση Συγκρούσεων µε ανοικτή διεύθυνση H αντιµετώπιση συγκρούσεων µε αλυσίδωση περιλαµβάνει επεξεργασία δεικτών και δυναµική χορήγηση µνήµης. Η στρατηγική ανοικτής διεύθυνσης επιτυγχάνει την αντιµετώπιση συγκρούσεων χωρίς τη χρήση δεικτών. Τα στοιχεία αποθηκεύονται κατ ευθείαν στον πίνακα κατακερµατισµού ως εξής: Για να εισαγάγουµε το κλειδί k στον πίνακα: 1. υπολογίζουµε την τιµή i=h(k), και 2. αν η θέση Η[i] είναι κενή τότε αποθηκεύουµε εκεί το k, 3. διαφορετικά, δοκιµάζουµε τις θέσεις f(i), f(f(i)),, για κάποια συνάρτηση f, µέχρις ότου βρεθεί κάποια κενή θέση όπου και τοποθετούµε το k. Για την αναζήτηση κάποιου κλειδιού kµέσα στον πίνακα: 1. υπολογίζουµε την τιµή i=h(k), και 2. κάνουµε διερεύνηση της ακολουθίας, i, f(i), f(f(i)),, µέχρι, είτε να βρούµε το κλειδί, είτε να βρούµε κενή θέση, είτε να περάσουµε από όλες τις θέσεις του πίνακα. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-10

Γραµµική Αναζήτηση ανοικτής διεύθυνσης Aν η συνάρτηση f είναι η f(x)= (x+1) mod hsize δηλαδή η αναζήτηση κενής θέσης γίνεται σειριακά, τότε η αναζήτηση ονοµάζεται γραµµική (linear probing). Παράδειγµα: hsize = 11, εισαγωγή 23, 15, 96, 114, 49. 0 1 2 3 4 5 6 7 8 9 10 ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-11

Ανάλυση του Linear Probing Εφόσον ο πίνακας κατακερµατισµού δεν είναι γεµάτος, είναι πάντα δυνατό να εισάγουµε κάποιο καινούριο κλειδί. Αν οι γεµάτες θέσεις του πίνακα είναι µαζεµένες (clustered) τότε ακόµα και αν ο πίνακας είναι σχετικά άδειος, πιθανόν να χρειαστούν πολλές δοκιµές για εύρεση κενής θέσης (κατά την εκτέλεση διαδικασίας insert), ή για εύρεση στοιχείου. Αν λ = 0.5 (ο πίνακας είναι µισογεµάτος) και τα στοιχεία είναι σκορπισµένα οµοιόµορφα στον πίνακα, τότε 1. ο αναµενόµενος αριθµός βηµάτων για ανεπιτυχή διερεύνηση είναι 2.5, και 2. ο αναµενόµενος αριθµός βηµάτων για επιτυχή διερεύνηση είναι 1.5. Αν το λ πλησιάζει το 1, τότε οι πιο πάνω αναµενόµενοι αριθµοί βηµάτων αυξάνονται δραστικά. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-12

ευτεροβάθµια αναζήτηση ανοικτής διεύθυνσης Quadratic Probing. Στόχος: αποφυγή των µαζεµένων κλειδιών (clusters). Χρησιµοποιούµε τη συνάρτηση f(k,i) = (h(k) + c 1 i + c 2 i²) mod hsize Για την εισαγωγή κλειδιού k, πρώτα δοκιµάζουµε τη θέση x = h(k) mod hsize, και αν είναι γεµάτη προχωρούµε στις θέσεις (x +c 1 +c 2 )mod hsize, (x + c 1 2 + c 2 4)mod hsize, (x + c 1 3 + c 2 9)mod hsize, και ούτω καθεξής. Μπορούµε να είµαστε σίγουροι ότι εισαγωγή στοιχείου είναι δυνατή όταν ο πίνακας δεν είναι γεµάτος; Θεώρηµα: Αν το µέγεθος hsize είναι πρώτος αριθµός (>3) τότε οποιοδήποτε καινούριο κλειδί µπορεί να εισαχθεί στον πίνακα εφόσον ο πίνακας έχει λ 0.5. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-13

Παράδειγµα Παράδειγµα: hsize = 11, εισαγωγή 23, 15, 96, 114, 49, µε c 1 =0, c 2 =1. 0 1 2 3 4 5 6 7 8 9 10 ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-14

Άλλες Τεχνικές Κατακερµατισµού 1. Αναζήτηση µε διπλό κατακερµατισµό ανοικτής διεύθυνσης (double hashing) Σε περίπτωση αρχικής αποτυχίας εισαγωγής/εύρεσης στοιχείου οι θέσεις που επιλέγουµε για να διερευνήσουµε στη συνέχεια (probe sequence) είναι ανεξάρτητες από την πρώτη. Αυτό επιτυγχάνεται µε τη χρήση µιας δεύτερης συνάρτησης κατακερµατισµού, h 2, ως εξής: f(x,0) = h 1 (x) f(x,n) = ( h 1 (x) + n h 2 (x) ) mod hsize ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-15

Άλλες Τεχνικές Κατακερµατισµού 2. Αναζήτηση µε διατεταγµένο κατακερµατισµό ανοικτής διεύθυνσης (ordered hashing) H µέθοδος αυτή χρησιµοποιείται σε συνδυασµό µε οποιαδήποτε από τις άλλες τεχνικές µε στόχο την ελάττωση του χρόνου εκτέλεσης της διερεύνησης. Η βασική ιδέα είναι να εξασφαλίζεται ότι τα κλειδιά που συναντούµε κατά τη διερεύνηση µιας probing sequence είναι σε αύξουσα σειρά. Έτσι, αν συναντήσουµε κλειδί που είναι µεγαλύτερο από αυτό που ψάχνουµε, τότε συµπεραίνουµε πως δεν υπάρχει στον πίνακα. Μέθοδος υλοποίησης Μέθοδος υλοποίησης: κατά την εισαγωγή κλειδιού k σε ένα πίνακα, αν βρούµε κλειδί k > k, τότε εισάγουµε το k στη θέση του k και αναλαµβάνουµε να εισάγουµε το k βάσει της ακολουθίας θέσεων του k. Σαν αποτέλεσµα έχουµε βελτιωµένη διαδικασία ανεπιτυχούς αναζήτησης. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-16

Επανακατακερµατισµός (rehashing) Αν ο hash πίνακας αρχίσει να γεµίζει, παρατηρείται µεγάλος αριθµός συγκρούσεων (thrashing) µε αποτέλεσµα τη µειωµένη επίδοση. Σε τέτοιες περιπτώσεις, όταν η τιµή λ υπερβεί κάποιο όριο, πολλές υλοποιήσεις hash-πινάκων, αυτόµατα εφαρµόζουν επανακατακερµατισµό. Επανακατακερµατισµός (rehashing) ηµιούργησε ένα καινούριο πίνακα µεγαλύτερου µεγέθους. Εισήγαγε όλα τα στοιχεία του παλιού πίνακα στον καινούριο. Επέστρεψε τη µνήµη του παλιού πίνακα. Ακριβή διαδικασία, αλλά καλείται σπάνια. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-17

Μερικά Σχόλια Στην περίπτωση του κατακερµατισµού ανοικτής διεύθυνσης πρέπει να είµαστε προσεκτικοί µε τις εξαγωγές στοιχείων 1. µια θέση από την οποία έχει αφαιρεθεί στοιχείο δεν µπορεί να θεωρηθεί ως άδεια (γιατί;) 2. έτσι µαρκάρουµε τη θέση ως deleted, και 3. κατά τη διαδικασία find, αγνοούµε θέσεις deleted, και προχωρούµε µέχρις ότου είτε να βρούµε το κλειδί που ψάχνουµε, είτε να βρούµε (πραγµατικά) µια άδεια θέση είτε να σαρώσουµε ολόκληρο τον πίνακα). Πολλές Εφαρµογές Σε µεταγλωττιστές, πίνακες κατακερµατισµού που ονοµάζονται Symbol Tables αποθηκεύουν πληροφορίες για όλες τις µεταβλητές. ιερεύνηση γράφων που δεν είναι εξ αρχής γνωστοί. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-18

Πρόβληµα: Web Search Έστω ότι θέλουµε να βρούµε όλες τις σελίδες (web-pages) που είναι προσιτές από τη σελίδα www.cs.ucy.ac.cy µέσω links που βρίσκονται σ αυτό το domain, και περιέχουν τη λέξη-κλειδί αλγόριθµος. Μπορούµε να θεωρήσουµε το διαδίκτυο ως ένα γράφο του οποίου κόµβοι είναι οι διάφορες σελίδες, και ακµή µεταξύ δύο κόµβων υπάρχει αν η µια από τις δύο σελίδες περιέχει link στην άλλη. Μπορούµε να χρησιµοποιήσουµε κατά-βάθος διερεύνηση (DFS) για να βρούµε όλες τις σελίδες οι οποίες είναι προσιτές από την www.cs.ucy.ac.cy Πως µπορούµε να διατηρήσουµε το σύνολο visited που περιέχει το σύνολο των σελίδων που έχουµε ήδη επισκεφθεί; εν γνωρίζουµε το γράφο (π.χ. το σύνολο των κόµβων) από την αρχή. Λύση: χρησιµοποιούµε πίνακα κατακερµατισµού. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-19

DFS(www.cs.ucy.ac.cy); Ψευδοκώδικας λύσης DFS(url page){ hashtable H (hsize); if page contains( αλγόριθµος ) output page; H.insert(page); } for all links npage in page if H.find(npage) == false DFS(npage) ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 14-20