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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Advanced Data Indexing

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

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

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

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

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

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

Εργαστήριο 2: Πίνακες

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

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

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

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

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

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

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

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

Οργάνωση Αρχείων. Βάσεις Δεδομένων : Οργάνωση Αρχείων 1. Blobs

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

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

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

Εργαστήριο 7: Ο αλγόριθμος ταξινόμησης Radix Sort

Βάσεις Δεδομένων ΙΙ Ενότητα 5

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

Μεταγλωττιστές. Συντακτικός Αναλυτής Κατασκευή Πίνακα Συμβόλων (ΠΣ) Εργαστήριο 7. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

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

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

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

Δομές Δεδομένων (Data Structures)

Standard Template Library (STL) C++ library

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

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

Οργάνωση Αρχείων. Βάσεις Δεδομένων : Οργάνωση Αρχείων 1. Blobs

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

Advanced Data Indexing

Ενότητα 6: Κατακερματισμός Ασκήσεις και Λύσεις

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

Τα δεδομένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

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

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

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

ΛΥΣΗ ΤΗΣ ΔΕΥΤΕΡΗΣ ΑΣΚΗΣΗΣ Όλγα Γκουντούνα

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

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

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

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

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Transcript:

Διάλεξη 35: Τεχνικές Κατακερματισμού (Hashing) Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ανασκόπηση Προβλήματος και Προκαταρκτικών Λύσεων Bit-Διανύσματα - Τεχνικές Κατακερματισμού & Συναρτήσεις Κατακερματισμού - Διαχείριση Συγκρούσεων με Αλυσίδωση& με ανοικτή διεύθυνση Διδάσκων: Παναγιώτης Ανδρέου ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 1

Εισαγωγή Το πρόβλημα Το Πρόβλημα Έχουμε ένα στοιχείο u. Θέλουμε κάποια αποδοτική δομή η οποία θα μας επιτρέψει ναεκτελέσουμε τις ακόλουθες δυο πράξεις σε σταθερό χρόνο Ο(1). Εύρεση στοιχείου u σε μια συλλογή S(δηλ. Find(u,S)). Εισαγωγήτουu στην συλλογή S(δηλ.Insert(u, S)) Παράδειγμα Η συλλογή S περιέχει μια μεγάλη λίστα φοιτητών. Θέλουμε να βρούμε αν ο u= Νεόφυτος Χαραλάμπους είναι μέρος αυτής της λίστας. Aν δεν είναιστην λίστα, τότε θέλουμε να τον εισάγουμε. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 2

Εισαγωγή Ανασκόπηση Λύσεων Ακατάλληλες Υλοποιήσεις 1. Συνδεδεμένη λίστα Insert: Ο(1), Find: O(n) 2. Iσοζυγισμένο δένδρο αναζήτησης Insert: O(log m n), Find: O(log m n) n: o αριθμός των κόμβωνκαι m: o βαθμός(branching factor) κάθε κόμβου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 3

Εισαγωγή Ανασκόπηση Λύσεων II Υπάρχει πιο αποδοτική μέθοδος από τη χρήση ισοζυγισμένων δένδρων; Ναι,δεδομένου ότι υπάρχει μια συνάρτηση η οποία μας επιτρέπει για κάθε στοιχείο u, να βρούμε την ακριβή θέση του uστον πίνακα. Έχουμε χρησιμοποιήσει αντίστοιχη ιδέα στον αλγόριθμο ταξινόμησης BucketSort. Μια απλή λύση είναι να απεικονίσουμε το σύνολο S U(όπου U είναι το πεδίο ορισμού της S) με ένα διάνυσμα διφίων(διάνυσμα δυαδικών ψηφίων, bit-vector). Παρόμοια δομή χρησιμοποιήσαμε και στον αλγόριθμο ταξινόμησης bucketsort. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 4

Bit vectors(διανύσματα Διφύων) Ένα bit-vectorείναι μονοδιάστατος πίνακας με nbits, Bits[1..n], τέτοιος ώστε: Bits[u] = 1, αν u S και Bits[u] = 0, αν u S Για παράδειγμα αν U= {1,,9} τότε το σύνολο S= {1, 3, 7} αναπαρίσταται ως το bit-vector: Bits = [1,0,1,0,0,0,1,0,0] Ο χρόνος εύρεσης και εισαγωγής/αναζήτησης κάποιου στοιχείου είναι σε χρόνο Ο(1)! Πρόβλημα: Αν το U είναι πολύ μεγαλύτερο από το S τότε σπαταλάμε πάρα πολύ χώρο! Λύση: οκατακερματισμός (hashing)που είναι μια οικογένεια μεθόδων που αντιστοιχεί ένα κλειδί σε μία θέση ενός πίνακα (keyto-address transformation). ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 5

Βασική Ιδέα Κατακερματισμού Έστω το σύνολο ακεραίων S από το πεδίο ορισμού U S= {0, 1, 2, 3, 4, 5, 8, 30, 57} (U=[0..99]) Θα φτιάξουμε ένα Πίνακα Κατακερματισμού(Hash Table), o οποίος στο παράδειγμα μας έχει μέγεθος hsize=5(το μέγεθος είναι συνήθως συναρτήσει του διαθέσιμου χώρου) Χρησιμοποιώντας κάποια συνάρτηση κατακερματισμού (hashing function) h(key), θα εισάγουμε τα στοιχεία του S στο hashtable. Παράδειγμα(hsize: 5) H data Hash Function h(key): key mod hsize 0 0, 5, 30 To mod(%)είναι το υπόλοιπο της διαίρεσης Κλειδί u h(u) Αν ψάχνουμε το key=21, τότε ξέρω ότι πρέπει να ψάξω στην θέση 1(21mod5) Αν ψάχνω το key=4; 1 1, 2 2, 57 3 3, 8 4 4, ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 6

Κατακερματισμός Ορισμοί & Ερωτήματα Πίνακας κατακερματισμού (hashtable)είναι μια δομή δεδομένων που υποστηρίζει τις διαδικασίες insert και find σε (σχεδόν) σταθερό χρόνο O(1). Ένας πίνακας κατακερματισμού χαρακτηρίζεται από 1. το μέγεθος του, hsize,και 2. κάποια συνάρτηση κατακερματισμού hη οποία αντιστοιχεί κλειδιά στο σύνολο των ακεραίων [0,, hsize 1] (εφόσον εφαρμοστεί το MOD) Tα δεδομένα αποθηκεύονται στον πίνακα H[0,, hsize 1]: το κλειδί k αποθηκεύεται στον H στη θέση H[h(k)]. Ωστόσο τα hashtableδεν είναι ιδανικό για να ανακτούμε τα στοιχεία ταξινομημένα, ή γενικότερα, για αναζητήσεις σε κάποιο εύρος (range queries). π.χ. Αν ψάχνω κλειδιά μεταξύ 2-10 (range query); θα πρέπει δυστυχώς να κοιτάξω σε όλες τις θέσεις του πίνακα. Επίσης, δημιουργούνται δύο νέα σημαντικά ερωτήματα: 1. ποια είναι καλή επιλογή για τη συνάρτηση κατακερματισμού h; 2. τι θα πρέπει να γίνεται αν πολλά κλειδιά είναι στο ίδιο bucket (κάδο). Τέτοιου είδους συγκρούσεις (collisions), είναι πολύ πιθανό να συμβούν. Δηλαδή για δύο κλειδιά k 1,k 2,με k 1 k 2, το bucketνα είναι ο ίδιος h(k 1 ) = h(k 2 ) ; ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 7

1) Επιλογή Συνάρτησης Κατακερματισμού Ιδιότητες μιας καλής συνάρτησης κατακερματισμού: 1. Θα πρέπει να χρησιμοποιεί ολόκληρο τον πίνακα [0 hsize 1]. 2. Θα πρέπει να σκορπίζει ομοιόμορφα τα κλειδιά στον πίνακα Η. 3. Θα πρέπει να υπολογίζεται εύκολα. Η συνάρτηση hαρχικά αντιστοιχίζει το κλειδί σε κάποιο ακέραιο αριθμό aκαι στη συνέχεια παίρνει την τιμή «amodhsize». Πρέπει επίσης να μπορούμε να υπολογίζουμε την συνάρτηση κατακερματισμού για συμβολοσειρές! ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 8

Παράδειγμα Συνάρτησης Κατακερματισμού // Η συνάρτηση κατακερµατισµού αθροίζει όλους τους χαρακτήρες του string s, και στην συνέχεια βρίσκει το υπόλοιπο από την διαίρεση µε το hsize int hash(char *s, int hsize) { int hash = 0; } while ((*s)!= '\0') { hash += (*s); s++; } return (hash % hsize); int main() { char *name1 = "cat"; char *name2 = "car"; char *name3 = "cap"; Κλειδί u h(u) H data 0 car printf("%s hashes to bucket %d\n", name1, hash(name1, 5)); printf("%s hashes to bucket %d\n", name2, hash(name2, 5)); printf("%s hashes to bucket %d\n", name3, hash(name3, 5)); 1 2 cat 3 cap 4 } return 0; Output> car hashes to bucket 2 cat hashes to bucket 0 cap hashes to bucket 3 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 9

1) Επιλογή Συνάρτησης Κατακερματισμού Έστω ότι το κλειδί είναι αλυσίδα από 3 χαρακτήρες s[0]..s[2]. Παραδείγματα συνάρτησης κατακερματισμού είναι: A) Function 1 (Απλή συνάρτηση): Tο άθροισμα των κωδικών ASCII των χαρακτήρων s[0] + s[1] + s[2] Πρόβλημα:Λέξεις μπορούν να έχουν το ίδιο άθροισμα π.χ. Οι λέξεις cat και tac θα έχουν το άθροισμα 99+97+116 == 116+97+99 B) Function 2 (Βελτιωμένη Λύση): (Υποθέστε ότι οι χαρακ. είναι Ascii-7bit) (s[0]+127*0) + (s[1]+127*1) +(s[1]+127*2) Τώρα κάθε επί-μέρους άθροισμα απέχει το πιο λίγο κατά 128 από το επόμενο. Ωστόσο εάν έχουμε χαρακτήρες σε κάποια άλλη κωδικοποίηση π.χ. UNICODE-16bit τότε αυτό μας δίδει πολύ μεγάλους αριθμούς. C) Function 3 (Η συνάρτηση hashcode() στην γλώσσα JAVA) s[n-1] + s[n-2] * 31 1 +. + s[1]*31 (n-2) + s[0]*31 (n-1) Όπου n είναι to μήκος του string. Tο hash κάποιου κενού string είναι 0. π.χ. cat => n=3 => (t)99+(a)97*31 1 + (c)116* 31 2 = 114,582 H επιλογή του 31 δεν είναι τυχαία. Είναι Prime & επίσης υπολογίζεται αποδοτικά με ένα shift(a * 31 == (a << 5-1)(Άλλοι αριθμοί που έχουν τέτοιες ιδιότητες 17,31,127, ) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 10

1. Συνάρτηση Κατακερματισμού (συνέχεια) Συνάρτηση Κατακερματισμού Πολλές φορές οι συμβολοσειρές μπορεί να είναι πολύ μεγάλες «1304 Lincoln Ave, Alameda, 94501, CA, USA», που θα κάνει ακριβό τον υπολογισμό της συνάρτησης κατακερματισμού. Για αυτό μπορεί να χρησιμοποιούνται επιλεκτικά κάποιοι χαρακτήρες (π.χ. κάθε 10ος) Μέγεθος Πίνακα Κατακερματισμού Αν το μέγεθος του πίνακα κατακερματισμού είναι πολύ μεγάλο (π.χ. 10,000) και οι τιμές παράγονται όλες σε κάποιο μικρό-διάστημα τότε θα υπάρχουν πολλές συγκρούσεις. Παράδειγμα: Ένα σύνολο λέξεων όπου κάθε λέξη αποτελείται από 10 χαρακτήρες ASCII- 7bit. Το συνολικό άθροισματης κάθε λέξης είναι το πολύ 10x127=1,270. Άρα όλες οι πιθανές 127^10 γραμματοσειρές θα βρίσκονται στις πρώτες 1270%10000=1270 θέσεις του πίνακα και οι υπόλοιπες 10000-1270=8730 θα είναι άδειες παρόλο που χρησιμοποιήσαμε το MODulo. To θέμα της εύρεσης της πιο κατάλληλης συνάρτησης κατακερματισμού είναι δύσκολο. Πάντοτε θα είναι πιθανή η ύπαρξη συγκρούσεων! Πως γίνεται η διαχείριση συγκρουόμενων κλειδιών; Οι τεχνικές λύσεις διακρίνονται σε 2 κατηγορίες: μέθοδοι με Αλυσίδωση (Chaining)και μέθοδοι Ανοικτής Διεύθυνσης(Open Addressing) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 11

Διαχείριση συγκρούσεων με Αλυσίδωση (Chaining) Αφού περισσότερα από ένα κλειδιά μπορούν να πάρουν την ίδια τιμή από τη συνάρτηση κατακερματισμού, μπορούμε να θεωρήσουμε ότι κάθε θέση του πίνακα δείχνει σε μια ευθύγραμμη απλά συνδεδεμένη λίστα. Για κάθε i, στη θέση Η[i] του πίνακα βρίσκουμε λίσταπου περιέχει όλα τα κλειδιά που απεικονίζονται από τη συνάρτηση hστη θέση αυτή. Για να βρούμε κάποιο κλειδί k, πρέπει να ψάξουμε στη λίστα που δείχνεται στη θέση H[h(k)]. Εισαγωγές και εξαγωγές στοιχείων μπορούν να γίνουν εύκολα με βάση τις διαδικασίες συνδεδεμένων λιστών. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 12

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

Ανάλυση της Τεχνικής Αλυσίδωσης Εισαγωγή Στοιχείου: απαιτεί χρόνο Ο(1). (προσθήκη στην αρχή) Εύρεση/διαγραφή Κλειδιού k συνεπάγεται τη διέλευση της λίστας H[h(k)]. Για να αναλύσουμε τον χρόνο εκτέλεσης των πιο πάνω διαδικασιών ορίζουμε τον συντελεστή φορτίου (loadfactor) λτου πίνακα Hως τον λόγο λ = (αριθμός των στοιχείων που αποθηκεύει ο πίνακας) / hsize π.χ. 100 τιμές σε 5 buckets => λ=20.0 Εύρεση bucket Δηλαδή, κατά μέσο όρο, κάθε λίστα του πίνακα έχει μήκος λ. To στοιχείο δεν υπάρχει (χειρίστη περίπτωση): O(1+λ) To στοιχείο υπάρχει (μέση περίπτωση): O(1+λ/2) Όπου Ο(1) κόστος για εύρεση του bucket και Ο(λ) & Ο(λ/2) αντίστοιχα για ανάλυση των στοιχείων της λίστας. Αναζήτηση Λίστας Ιδανικάθα θέλαμε ο λόγος λ να έχει σταθερή τιμή (συνήθως κοντά στο 1), ώστε οι διαδικασίες να εκτελούνται σε σταθερό χρόνο. Στην συνέχεια θα δούμε τεχνικές δυναμικής αύξησης / μείωσηςτου πίνακα σε συνδυασμό με διαδικασίες επανακερματισμού, έτσι ώστε το μέγεθος του πίνακα να είναι πάντα ανάλογο του αριθμού των στοιχείων. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 14

Διαχείριση Συγκρούσεων με ανοικτή διεύθυνση 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)),, μέχρι, είτε να βρούμε το κλειδί, είτε να βρούμε κενή θέση, ή να περάσουμε από όλες τις θέσεις του πίνακα. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 15

Γραμμική Αναζήτηση Ανοικτής Διεύθυνσης(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 ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 16

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

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

Επανακατακερματισμός(Rehashing) Αν ο hashπίνακας αρχίσει να γεμίζει, παρατηρείται μεγάλος αριθμός συγκρούσεων (collisions) με αποτέλεσμα τη μειωμένη επίδοση. H μειωμένη επίδοση παρατηρείται και σε πράξεις εισαγωγής αλλά στις πράξεις αναζήτησης. Σε τέτοιες περιπτώσεις, όταν η τιμή λ υπερβεί κάποιο όριο, πολλές υλοποιήσεις hash-πινάκων, αυτόματα εφαρμόζουν επανά-κατακερματισμό. Αυτό το όριο σε τυπικές υλοποιήσεις είναι συνήθως λ=0.7 (π.χ. Java) Επανακατακερματισμός(rehashing) Δημιούργησε ένα καινούριο πίνακα μεγαλύτερου (διπλάσιου) μεγέθους. Εισήγαγε όλα τα στοιχεία του παλιού πίνακα στον καινούριο. Επέστρεψε τη μνήμη του παλιού πίνακα. Ακριβή διαδικασία, αλλά καλείται σπάνια. Σε συστήματα πραγματικού χρόνου (real-time systems)το rehashing μπορεί να πάρει περισσότερο χρόνο από ότι υπάρχει! Εκεί το rehashingγίνεται σταδιακά (δηλαδή κρατούμε το παλιό και νέο HashTable), και σε κάθε εισαγωγή μετακινούμε K στοιχεία στο νέο table μέχρι να μετακινηθούν όλα τα στοιχεία(οπόταν διαγράφεται το παλιό table) ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ. 19

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