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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Advanced Data Indexing

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

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

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

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

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

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

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

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

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

Κεφ.11: Ευρετήρια και Κατακερματισμός

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

Δομές Δεδομένων. Ενότητα 12: Κατακερματισμός: Χειρισμός Συγκρούσεων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

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

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

ηδάζθσλ: εµήηξεο Ζετλαιηπνύξ

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

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

Άσκηση 3 (ανακοινώθηκε στις 24 Απριλίου 2017, προθεσμία παράδοσης: 2 Ιουνίου 2017, 12 τα μεσάνυχτα).

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

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

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

Advanced Data Indexing

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

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

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

Διάλεξη 18: B-Δένδρα

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

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

Δομές Δεδομένων. Ενότητα 11: Τεχνικές Κατακερματισμού. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

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

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

Διάλεξη 14: Δέντρα IV - B-Δένδρα

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

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ - ΤΜΗΥΠ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝ ΙI

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

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

Δυναμικός Κατακερματισμός

Πληροφορική 2. Αλγόριθμοι

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

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

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

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

Αντισταθμιστική ανάλυση

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΑΣΚΗΣΗ 4 Σωροί, Γράφοι

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

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

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

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

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

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

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων

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

Δομές Δεδομένων Εργαστηριακή Άσκηση Γκόγκος Νίκος Α.Μ.: 4973 Έτος: 3 ο gkogkos@ceid.upatras.gr. Εισαγωγικά:

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Standard Template Library (STL) C++ library

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

Άσκηση 3 (ανακοινώθηκε στις 14 Μαΐου 2018, προθεσμία παράδοσης: 8 Ιουνίου 2018, 12 τα μεσάνυχτα).

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

Αλγόριθμοι Ταξινόμησης Μέρος 2

Εισαγωγή στην επιστήμη των υπολογιστών. Οργάνωση εδομένων Κεφάλαιο 11ο ομές εδομένων

Πρόβλημα 37 / σελίδα 207

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

Πληρότητα της μεθόδου επίλυσης

Κατανεμημένα Συστήματα Ι

Transcript:

Διάλεξη 23: Τεχνικές Κατακερματισμού II (Hashing) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Διαχείριση Συγκρούσεων με Ανοικτή Διεύθυνση a) Linear Probing, b) Quadratic Probing c) Double Hashing Διατεταγμένος Κατακερματισμός (Ordered Hashing) Επανακατακερματισμός(Rehashing) Εφαρμογές Κατακερματισμού ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1

Παράδειγμα Διαχείρισης με Αλυσίδωση 0 1 2 3 4 5 6 7 8 9 10 34 67 46 114 26 17 85 hsize = 11 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2

Διαχείριση Συγκρούσεων με ανοικτή διεύθυνση H αντιμετώπιση συγκρούσεων με αλυσίδωση περιλαμβάνει επεξεργασία δεικτών και δυναμική χορήγηση μνήμης. Επίσης δημιουργούνται overflow chains, τα οποία θα κάνουν τις αναζητήσεις ακριβότερες στην συνέχεια Η στρατηγική ανοικτής διεύθυνσης επιτυγχάνει την αντιμετώπιση συγκρούσεων χωρίς τη χρήση δεικτών. Τα στοιχεία αποθηκεύονται κατ ευθείαν στον πίνακα κατακερματισμού ως εξής: Για να εισαγάγουμε το κλειδί 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 Δομές Δεδομένων και Αλγόριθμοι 3

Γραμμική Αναζήτηση Ανοικτής Διεύθυνσης (Linear Probing) H αρχική συνάρτηση κατακερματισμού είναι f(x) = x mod hsize Όταν υπάρξει σύγκρουση (collision) δοκιμάζουμε αναδρομικά την επόμενη συνάρτηση μέχρι να βρεθεί κενή θέση: f(x)= (f(x) +i) mod hsize (i=1,2,3, ) Δηλαδή η αναζήτηση κενής θέσης γίνεται σειριακά, και η αναζήτηση ονομάζεται γραμμική (linear probing). Παράδειγμα: hsize = 11, εισαγωγή 11, 12, 15, 19, 26, 48. 0 1 2 3 4 5 6 7 8 9 10 11 12 15 26 48 19 collision 26 collision 48 collision 48 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4

Σχόλια για το Linear Probing Εισαγωγή Εφόσον ο πίνακας κατακερματισμού δεν είναι γεμάτος, είναι πάντα δυνατό να εισάγουμε κάποιο καινούριο κλειδί. Αν γεμίσει θα κάνουμε rehash τον πίνακα (θα το δούμε στην συνέχεια) Αν οι γεμάτες θέσεις του πίνακα είναι μαζεμένες (clustered) τότε ακόμα και αν ο πίνακας είναι σχετικά άδειος, πιθανόν να χρειαστούν πολλές δοκιμές για εύρεση κενής θέσης (κατά την εκτέλεση διαδικασίας insert), ή για εύρεση στοιχείου. Αναζήτηση Η αναζήτηση γίνεται όπως και την εισαγωγή (σταματάμε όταν βρούμε κενή θέση). Μπορεί να αποδειχθεί ότι για ένα πίνακα μισογεμάτο (δηλαδή λ = 0.5) και μια ομοιόμορφη κατανομή τότε: 1. Ανεπιτυχή Διερεύνηση: O αριθμός βημάτων είναι ~2.5 2. Επιτυχή Διερεύνηση: O αριθμός βημάτων είναι ~1.5. Αν το λ πλησιάζει το 1, τότε οι πιο πάνω αναμενόμενοι αριθμοί βημάτων αυξάνονται εκθετικά. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5

Σχόλια για το Linear Probing Εξαγωγή Πρέπει να είμαστε προσεκτικοί με τις εξαγωγές στοιχείων 1. μια θέση από την οποία έχει αφαιρεθεί στοιχείο δεν μπορεί να θεωρηθεί ως άδεια (γιατί;) διότι στην find δεν θα ξέρουμε που να σταματήσουμε 2. έτσι μαρκάρουμε τη θέση ως deleted, και 3. κατά τη διαδικασία find, αγνοούμε θέσεις deleted, και προχωρούμε μέχρις ότου είτε να βρούμε το κλειδί που ψάχνουμε, είτε να βρούμε (πραγματικά) μια άδεια θέση είτε να σαρώσουμε ολόκληρο τον πίνακα). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6

Δευτεροβάθμια Αναζήτηση Ανοικτής Διεύθυνσης Δευτεροβάθμια Αναζήτηση Ανοικτής Διεύθυνσης (Quadratic Probing) H αρχική συνάρτηση κατακερματισμού είναι και πάλι: f(x) = x mod hsize Όταν υπάρξει σύγκρουση (collision) δοκιμάζουμε αναδρομικά την επόμενη συνάρτηση μέχρι να βρεθεί κενή θέση: f(x)= (f(x) + i²) mod hsize (i=1,2,3, ) Στόχος: αποφυγή των μαζεμένων κλειδιών (clusters) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7

Παράδειγμα Quadratic Probing Παράδειγμα: hsize = 11, εισαγωγή 11, 12, 15, 19, 26, 48 0 1 2 3 4 5 6 7 8 9 10 11 12 48 15 26 19 collision 26 48 OK collision 48 collision 48 collision 48 ((X+3 2 )% 11) d (X % 11) ((X+1 2 )% 11) ((X+2 2 )% 11) a b c Στο linear probing ήταν εγγυημένη η εισαγωγή (εφόσον ο πίνακας δεν έχει γεμίσει) Και εδώ μπορεί να αποδειχθεί ότι : Θεώρημα: Αν το μέγεθος hsize είναι πρώτος (prime) αριθμός (>3) τότε οποιοδήποτε καινούριο κλειδί μπορεί να εισαχθεί στον πίνακα εφόσον ο πίνακας έχει λ 0.5. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8

Σημαντικότητα Μεγέθους Πίνακα Αν το μέγεθος του πίνακα δεν είναι prime τότε μπορεί να δημιουργηθεί το φαινόμενο του Funneling Ας υποθέσουμε ότι θέλουμε να εισάγουμε το {0,1,4,8} σε ένα πίνακα μεγέθους hsize = 8. Η εισαγωγή του 0,1,4 γίνεται κανονικά. Το 8 ωστόσο δεν μπορεί να εισαχθεί χρησιμοποιώντας το quadratic probing. Συγκεκριμένα έχουμε αλλεπάλληλες συγκρούσεις (collisions) : 1) 8%8=0 (X) 2) (8+1)%8=1 (X) 3) (8+4)%8=4 (X) 4) (8+9)%8=1 (X) 4) (8+16)%8=0 (X) 5) (8+25)%8=1 (X) 6) (8+36)%8=4 (X) 7) (8+49)%8=1 (X).. Τώρα ας υποθέσουμε ότι θέλουμε να εισάγουμε το {0,1,4,8} σε ένα πίνακα μεγέθους hsize = 7 (PRIME). Πάλι η εισαγωγή του 0,1,4 γίνεται κανονικά Επίσης το 8 μετά από ένα collision τοποθετείται στον πίνακα 1) 8%7=1 (X) 2) (8+1)%7=2 (OK!) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9

Διπλός Κατακερματισμός Ανοικτής Διεύθυνσης Διπλός Κατακερματισμός Ανοικτής Διεύθυνσης (Double Hashing) O τελευταίος τρόπος αποφυγής συγκρούσεων χρησιμοποιεί δυο συναρτήσεις κατακερματισμού. Δηλαδή σε περίπτωση αρχικής αποτυχίας εισαγωγής / εύρεσης στοιχείου οι θέσεις που επιλέγουμε για να διερευνήσουμε στη συνέχεια (probe sequence) είναι ανεξάρτητες από την πρώτη. f(x,0) = h 1 (x) // η αρχική συνάρτηση κατακερματισμού Αυτό επιτυγχάνεται με τη χρήση μιας δεύτερης συνάρτησης κατακερματισμού, h 2, ως εξής: f(x,n) = ( h 1 (x) + n h 2 (x) ) mod hsize Στην πράξη δουλεύει αποδοτικά ωστόσο είναι πιο ακριβό να υπολογίζουμε δυο συναρτήσεις κάθε φορά ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10

Άλλες Τεχνικές Ordered Hashing Διατεταγμένος Κατακερματισμός (Ordered Hashing) H μέθοδος αυτή χρησιμοποιείται σε συνδυασμό με οποιαδήποτε από τις άλλες τεχνικές με στόχο την ελάττωση του χρόνου εκτέλεσης της διερεύνησης. Η βασική ιδέα είναι να εξασφαλίζεται ότι τα κλειδιά που συναντούμε κατά τη διερεύνηση μιας probing sequence είναι σε αύξουσα σειρά. Έτσι, αν συναντήσουμε κλειδί που είναι μεγαλύτερο από αυτό που ψάχνουμε, τότε συμπεραίνουμε πως δεν υπάρχει στον πίνακα. Μέθοδος υλοποίησης Μέθοδος υλοποίησης: κατά την εισαγωγή κλειδιού k σε ένα πίνακα, αν βρούμε κλειδί k > k, τότε εισάγουμε το k στη θέση του k και αναλαμβάνουμε να εισάγουμε το k σε κάποια μετέπειτα θέση. Σαν αποτέλεσμα έχουμε βελτιωμένη διαδικασία ανεπιτυχούς αναζήτησης. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11

Επανακατακερματισμός (Rehashing) Αν ο hash πίνακας αρχίσει να γεμίζει, παρατηρείται μεγάλος αριθμός συγκρούσεων (collisions) με αποτέλεσμα τη μειωμένη επίδοση. H μειωμένη επίδοση παρατηρείται και σε πράξεις εισαγωγής αλλά στις πράξεις αναζήτησης. Σε τέτοιες περιπτώσεις, όταν η τιμή λ υπερβεί κάποιο όριο, πολλές υλοποιήσεις hash πινάκων, αυτόματα εφαρμόζουν επανάκατακερματισμό. Αυτό το όριο σε τυπικές υλοποιήσεις είναι συνήθως λ=0.7 (π.χ. Java) Επανακατακερματισμός (rehashing) Δημιούργησε ένα καινούριο πίνακα μεγαλύτερου (διπλάσιου) μεγέθους. Εισήγαγε όλα τα στοιχεία του παλιού πίνακα στον καινούριο. Επέστρεψε τη μνήμη του παλιού πίνακα. Ακριβή διαδικασία, αλλά καλείται σπάνια. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12

Επανακατακερματισμός (Rehashing) Σε συστήματα πραγματικού χρόνου (real time systems) το rehashing μπορεί να πάρει περισσότερο χρόνο από ότι υπάρχει! Εκεί το rehashing γίνεται σταδιακά (δηλαδή κρατούμε το παλιό και νέο HashTable), και σε κάθε εισαγωγή μετακινούμε K στοιχεία στο νέο table μέχρι να μετακινηθούν όλα τα στοιχεία (οπόταν διαγράφεται το παλιό table) Σε βάσεις δεδομένων (databases), ο όγκος των δεδομένων είναι πολύ μεγάλος και τα δεδομένα είναι αποθηκευμένα στον δίσκο. Άρα το re hashing, θα έπαιρνε παρά πολύ χρόνο μέχρι να ολοκληρωθεί. Για αυτό χρησιμοποιούνται dynamic hashing techniques (π.χ. Linear and extendible hashing) Σε αυτές τις τεχνικές, μόνο ένα πολύ μικρό ποσοστό δεδομένων χρειάζεται να γίνει rehashed. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13

Μερικές Εφαρμογές του Κατακερματισμού Εφαρμογές Κατακερματισμού (Μνήμης &Μαγνητ. Δίσκου) Unique: Έχετε ένα αρχείο από strings και θέλετε με ένα πέρασμα (χρόνος O(n)), να βρείτε όλες τις μοναδικές λέξεις σε αυτό. Ευρετήρια Λέξεων σε Μηχανές Αναζήτησης: Ψάχνουμε σε μια μηχανή αναζήτησης την λέξη car + rental. H μηχανή μας επιστρέφει την τομή των αποτελεσμάτων (συνόλων) car και rental σε χρόνο O(1). Find Function: Σε εργαλεία επεξεργασίας κειμένου (text editors, word, κτλ) το πρόγραμμα προσφέρει την δυνατότητα εύρεσης λέξεων. Πολλές φορές η πρώτη εκτέλεση του find είναι αργή (πχ. Microsoft Help) διότι χρειάζεται χρόνος για την δημιουργία του hash table). Σε μεταγλωττιστές, πίνακες κατακερματισμού που ονομάζονται Symbol Tables αποθηκεύουν πληροφορίες για όλες τις μεταβλητές. Διερεύνηση γράφων που δεν είναι εξ αρχής γνωστοί. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14

Εφαρμογή Κατακερματισμού: Web Crawling Περιγραφή Μπορούμε να θεωρήσουμε το WWW ως ένα γράφο του οποίου κόμβοι είναι οι διάφορες σελίδες, και ακμή μεταξύ δύο κόμβων υπάρχει αν η μια από τις δύο σελίδες περιέχει link στην άλλη. Ένας crawler είναι ένα πρόγραμμα το οποίο παίρνει σαν τιμή εισόδου ένα η περισσότερα URLs (π.χ. www.cs.ucy.ac.cy) και στην συνέχεια ανακτά (downloads) αναδρομικά αυτά τα URLs στον τοπικό του δίσκο. H ανάκτηση τερματίζεται όταν ικανοποιηθεί κάποια συνθήκη (π.χ. Ν σελίδες έχουν ανακτηθεί, Φτάσαμε σε βάθος β, κτλ) Εφόσον το WWW είναι ένας γράφος μπορούμε να χρησιμοποιήσουμε αλγόριθμους διάσχισης γραφών Κατά πλάτος διερεύνηση (BFS) Κατά βάθος διερεύνηση (DFS) Πρόβλημα: Ο Crawler, πρέπει με κάποιο τρόπο να θυμάται από ποιες ιστοσελίδες πέρασε. Έτσι δεν χρειάζεται να ξαναπεράσει από κάποια ιστοσελίδα που ήδη πέρασε Λύση: Χρήση HashTable που κρατά από ποιες ιστοσελίδες περάσαμε ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15

Web Crawling: Ψευδοκώδικας λύσης HashTable H[hsize]; // O Πίνακας Κατακερματισμού DFS(www.cs.ucy.ac.cy); void DFS(URL url){ // ανάκτηση της σελίδας στον τοπικό δίσκο download(url); // εισαγωγή του url στον πίνακα κατακερματισμού H = put(url); // εξαγωγή όλων των Links URL[] = extracturls(page); for i=0 to URL { } } // επίσκεψη σε όλα τα ανεξερεύνητα Links if (!contains(h, hashcode(url[i]))) DFS(URL[i]); ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16

Bloom Filter Πολύ διαδεδομένη δομή δεδομένων που βασίζεται στον κατακερματισμό Μπορεί αποδοτικά να ελέγχει αν ένα στοιχείο ΔΕΝ αποτελεί μέλος κάποιου συνόλου (όχι το αντίθετο) Πάντα επιστρέφει false αν το στοιχείο δεν ανήκει στο σύνολο ΝΟ false negatives Μπορεί να επιστρέψει true για ένα στοιχείο που δεν ανήκει στο σύνολο false positives Υλοποιείται με: ένα BitArray khash functions (ένα ή πολλά) Καινούρια στοιχεία μπορούν να προστεθούν Η Εξαγωγή στοιχείων δεν επιτρέπεται ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17

Bloom Filter: Υλοποίηση Έστω ότι το BitArray έχει μέγεθος m. Αρχικά, όλες οι θέσεις (bits) έχουν την τιμή 0 Η εισαγωγή στοιχείου σ γίνεται ως εξής: Υπολόγισε το hash value του σ για κάθε ένα από τα khash functions Αυτό δημιουργεί k k θέσεις στον πίνακα (k αν τα functions είναι τέλεια!) Θέσε τις θέσεις k ίσες με 1 Η επερώτηση για κάποιο στοιχείου q γίνεται ως εξής: Υπολόγισε το hash value του q για κάθε ένα από τα khash functions Έλεγξε αν τουλάχιστον μία θέση =0 επέστρεψε true ή false αντίστροφα Παράδειγμα m=18, k=3 ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18

Bloom Filter: Παρατηρήσεις To Bloom Filter παρουσιάζει πολλά πλεονεκτ. και κάποια μειονεκτ. + Πολύ αποδοτική: Ο(k), (k 5 ~O(1)), άσχετο με τον αριθμό των αντικείμενων που υπάρχουν στο σύνολο + Πολύ μικρή χρήση χώρου μνήμης σε σχέση με πίνακες κατακερματισμού, λίστες και δέντρα Για 1,048,576 (1MB) στοιχεία: BloomFilter 132KB, HasTable 1MB, Λίστα 8ΜΒ, Δέντρα 12ΜΒ + Αν το ποσοστό των false positives δεν είναι ικανοποιητικό τότε μπορούμε απλά να προσθέσουμε extra bits, π.χ., n bits=1% false positives, n+5 bits = 0.1% false positives! Τα false positives αυξάνονται ραγδαία με την είσοδο καινούριων στοιχείων Υπάρχει πιθανότητα μεγάλος χώρος του πίνακα να είναι συνεχώς αχρησιμοποίητος ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19