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

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

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

Διοικητική Λογιστική

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

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Εισαγωγή στους Αλγορίθμους

Βάσεις Περιβαλλοντικών Δεδομένων

Εισαγωγή στους Αλγορίθμους

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

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Δομημένος Προγραμματισμός

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Ψηφιακή Επεξεργασία Εικόνων

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

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Μάρκετινγκ Αγροτικών Προϊόντων

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

Εισαγωγή στους Αλγορίθμους

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

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

Διοικητική Λογιστική

Στατιστική. 5 ο Μάθημα: Βασικές Έννοιες Εκτιμητικής. Γεώργιος Μενεξές Τμήμα Γεωπονίας ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

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

Δομημένος Προγραμματισμός

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

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

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Προγραμματισμός H/Y Ενότητα 4: Δείκτες. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Τεχνικό Σχέδιο - CAD

Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων περίπτωσης χρήσης (1ο Μέρος)

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Στατιστική. 6 ο Μάθημα: Διαστήματα Εμπιστοσύνης και Έλεγχοι Υποθέσεων. Γεώργιος Μενεξές Τμήμα Γεωπονίας ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Βάσεις Περιβαλλοντικών Δεδομένων

Μηχανολογικό Σχέδιο Ι

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Εισαγωγή στους Υπολογιστές

Εισαγωγή στους Υπολογιστές

Διδακτική Πληροφορικής

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Εισαγωγή στην Πληροφορική

Τεχνολογία Πολιτισμικού Λογισμικού

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

Βάσεις Περιβαλλοντικών Δεδομένων

Τεχνικό Σχέδιο - CAD

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Οικονομική Γεωργικών Εκμεταλλεύσεων

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Διαχείριση Πολιτισμικών Δεδομένων

Εισαγωγή στην Πληροφορική

Δομές Δεδομένων Ενότητα 1

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

Μάρκετινγκ Αγροτικών Προϊόντων

Βέλτιστος Έλεγχος Συστημάτων

Προγραμματισμός Η/Υ. 7 η ενότητα: Αρχεία. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Μάρκετινγκ Αγροτικών Προϊόντων

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

Προσχολική Παιδαγωγική Ενότητα 2: Οργάνωση χρόνου και χώρου στα νηπιαγωγεία

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

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

Προγραμματισμός Η/Υ. Αλγόριθμοι. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Διδακτική Πληροφορικής

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Βάσεις Περιβαλλοντικών Δεδομένων

Έλεγχος και Διασφάλιση Ποιότητας Ενότητα 4: Μελέτη ISO Κουππάρης Μιχαήλ Τμήμα Χημείας Εργαστήριο Αναλυτικής Χημείας

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Διαχείριση Πολιτισμικών Δεδομένων

Κβαντική Επεξεργασία Πληροφορίας

Τεχνικό Σχέδιο - CAD. Τόξο Κύκλου. Τόξο Κύκλου - Έλλειψη. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Εισαγωγή στην Διοίκηση Επιχειρήσεων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Ψηφιακή Επεξεργασία Σημάτων. Άσκηση 3η. Στυλιανού Ιωάννης. Τμήμα Επιστήμης Υπολογιστών

Ψηφιακή Επεξεργασία Εικόνων

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Γραμμική Άλγεβρα και Μαθηματικός Λογισμός για Οικονομικά και Επιχειρησιακά Προβλήματα

Διαφήμιση και Δημόσιες Σχέσεις Ενότητα 9: Σχέσεις διαφημιστή-διαφημιζόμενου

Εννοιες και Παράγοντες της Ψηφιακής Επεξεργασίας Εικόνας

Διδακτική Πληροφορικής

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Εκπαιδευτική Διαδικασία και Μάθηση στο Νηπιαγωγείο Ενότητα 1: Εισαγωγή

Ιστορία της μετάφρασης

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Β. Διαφορικός Λογισμός

ΗΛΕΚΤΡΟΝΙΚΗ Ι Ενότητα 5

Εισαγωγή στην Πληροφορική

Κοινωνία & Υγεία Υγεία Πρόληψη Προαγωγή υγείας: Βαθμίδες πρόληψης

Transcript:

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

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Κρήτης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2

Σημείωμα αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση, Όχι Παράγωγο Έργο 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-nd/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.. 3

Πίνακες Κατακερματισμού 0 1 025-612-0001 2 3 4 451-229-0004 981-101-0004 Πίνακες Κατακερματισμού 4

Περιγραφή και Υλικό Ανάγνωσης Συναρτήσεις κατακερματισμού και πίνακες κατακερματισμού ( 2.5.2) Λεπτομέρειες συνάρτησης κατακερματισμού Hash code map ( 2.5.3) Compression map ( 2.5.4) Χειρισμός συγκρούσεων ( 2.5.5) Chaining Linear probing Double hashing Πίνακες Κατακερματισμού 5

Συναρτήσεις Κατακερματισμού και Πίνακες Καταρκεματισμού Μια συνάρτηση κατακερματισμού (hash function) h απεικονίζει κλειδιά ενός δοσμένου τύπο σε ακεραίους ενός σταθερού διαστήματος [0, N - 1] Παράδειγμα: h(x) = x mod N είναι μια συνάρτηση κατακερματισμού για ακέραια κλειδιά Ο ακέραιος h(x) ονομάζεται τιμή κατακερματισμού (hash value) του κλειδιού x Ο σκοπός μιας συνάρτησης κατακερματισμού είναι η ομοιόμορφη διασπορά κλειδιών στο πεδίο [0, N - 1] Ένας πίνακας κατακερματισμού (hash table) για ένα δοσμένο τύπο κλειδιών αποτελείται από Μία συνάρτηση κατακερματισμού h Ένα πίνακα μεγέθους N Όταν υλοποιούμε ένα λεξικό με ένα πίνακα κατακερματισμού, ο στόχος είναι να αποθηκεύσουμε το αντικείμενο (k, o) στη θέση i = h(k) Μια σύγκρουση (collision) συμβαίνει όταν δύο κλειδιά του λεξικού έχουν την ίδια τιμή κατακερματισμού Σχήματα χειρισμού συγκρούσεων: Chaining: τα συγκρουόμενα αντικείμενα αποθηκεύονται σε ακολουθία Open addressing: τα συγκρουόμενα αντικείμενα τοποθετούνται σε διαφορετικά κελιά του πίνακα Πίνακες Κατακερματισμού 6

Παράδειγμα Σχεδιάζουμε ένα πίνακα κατακερματισμού για ένα λεξικό που αποθη-κεύει αντικείμενα (SSN, Name), όπου SSN (social security number) είναι ένας εννιαψήφιος θετικός ακέραιος Ο πίνακας κατακερματισμού χρησιμοποιεί ένα πίνακα μεγέθους N = 10,000 και η συνάρτηση κατακερματισμού είναι η h(x) = last four digits of x Χρησιμοποιούμε chaining για να χειριστούμε τις συγκρούσεις 0 1 2 3 4 9997 9998 9999 025-612-0001 451-229-0004 981-101-0004 200-751-9998 Πίνακες Κατακερματισμού 7

Συναρτήσεις Κατακερματισμού Μια συνάρτηση κατακερματισμού συνήθως καθορίζεται ως μια σύνθεση δύο συναρτήσεων : Hash code map: h 1 : keys integers Compression map: h 2 : integers [0, N - 1] H hash code map εφαρμόζεται πρώτα, και η compression map εφαρμόζεται αργότερα στο αποτέλεσμα, π.χ., h(x) = h 2 (h 1 (x)) Ο στόχος της συνάρτησης κατακερματισμού είναι να διασκορπίσει τα κλειδιά με ένα φαινομενικά τυχαίο τρόπο Πίνακες Κατακερματισμού 8

Hash Code Maps Memory address: Επαναερμηνεύουμε τη διεύθυνση μνήμης του key object σαν ακέραιο (προκαθορισμένος hash code για όλα τα αντικείμενα Java) Γενικά καλό, εκτός από αριθμητικά και αλφαριθμη-τικά κλειδιά Integer cast: Επαναερμηνεύουμε τα bits του κλειδιού σαν ακέραιο Κατάλληλο για κλειδιά μήκους μικρότερου ή ίσου του αριθμού των bits του τύπου ακεραίου (π.χ., byte, short, int και float στη Java) Component sum: Χωρίζουμε τα bits του κλειδιού σε συστατικά σταθερού μήκους (π.χ., 16 ή 32 bits) και προσθέτουμε τα συστατικά (αγνοώντας τα overflows) Κατάλληλο για αριθμητικά κλειδιά σταθερού μήκους μεγαλύτερου ή ίσου του αριθμού των bits του τύπου ακεραίου (π.χ., long και double στη Java) Πίνακες Κατακερματισμού 9

Hash Code Maps (cont.) Polynomial accumulation: Χωρίζουμε τα bits του κλειδιού σε μια ακολουθία συστατικων σταθερού μεγέθους (π.χ., 8, 16 ή 32 bits) a 0 a 1 a n-1 Αποτιμούμε το πολυώνυμο p(z) = a 0 + a 1 z + a 2 z 2 + + a n-1 z n-1 σε μια σταθερή τιμή z, αγνοώντας τα overflows Ιδιαίτερα κατάλληλο για αλφαρηθμητικά (π.χ., η επιλογή z = 33 δίνει το πολύ 6 συγκρούσεις σε ένα σύνολο 50,000 Αγγλικών λέξεων) Το πολυώνυμο p(z) μπορεί να αποτιμηθεί σε χρόνο O(n) χρησιμοποιώντας τον κανόνα του Horner: Τα ακόλουθα πολυώνυμα υπολογίζονται διαδοχικά, το κάθε ένα από το προηγούμενο σε χρόνο O(1) p 0 (z) = a n-1 p i (z) = a n-i-1 + zp i-1 (z) (i = 1, 2,, n -1) Ισχύει ότι p(z) = p n-1 (z) Πίνακες Κατακερματισμού 10

Compression Maps Division: h 2 (y) = y mod N Το μέγεθος N του πίνακα κατακερματισμού συνήθως επιλέγεται να είναι πρώτος αριθμός Ο λόγος έχει να κάνει με τη θεωρία αριθμών και είναι πέρα από τους σκοπούς του μαθήματος Multiply, Add and Divide (MAD): h 2 (y) = (ay + b) mod N Οι a και b είναι θετικοί ακέραιοι έτσι ώστε a mod N 0 Αλλιώς, κάθε ακέραιος θα απεικονιζόταν στην ίδια τιμή b Πίνακες Κατακερματισμού 11

Linear Probing Το Linear probing χειρίζεται τις συγκρούσεις τοποθετώντας το συγκρουόμενο αντικείμενο στο επόμενο (κυκλικά) διαθέσιμο κελί του πίνακα Κάθε κελί του πίνακα που επιθεωρείται αναφέρεται ως probe Συγκρουόμενα αντικείμενα συσσωρεύονται, με συνέπεια μελλοντικές συγκρούσεις να προκαλούν μεγαλύτερες ακολουθίες από probes Παράδειγμα: h(x) = x mod 13 Εισαγωγή των κλειδιών 18, 41, 22, 44, 59, 32, 31, 73, σε αυτή την σειρά 0 1 2 3 4 5 6 7 8 9 10 11 12 41 18 44 59 32 22 31 73 0 1 2 3 4 5 6 7 8 9 10 11 12 Πίνακες Κατακερματισμού 12

Search with Linear Probing Ας θεωρήσουμε ένα πίνακα κατακερματισμού A ο οποίος χρησιμοποιεί linear probing findelement(k) Ξεκινάμε στο κελί h(k) Ερευνούμε συνεχόμενες θέσεις μέχρι ένα από τα ακόλουθα να συμβεί Ένα αντικείμενο με κλειδί k να βρεθεί, ή Ένα άδειο κελί να βρεθεί, ή N κελιά να ερευνηθούν ανεπιτυχώς Algorithm findelement(k) i h(k) p 0 repeat c A[i] if c = return NO_SUCH_KEY else if c.key () = k return c.element() else i (i + 1) mod N p p + 1 until p = N return NO_SUCH_KEY Πίνακες Κατακερματισμού 13

Updates with Linear Probing Για να χειριστούμε εισαγωγές και διαγραφές, εισάγουμε ένα ειδικό αντικείμενο, ονόματι AVAILABLE, το οποίο αντικαθιστά διαγραφέντα στοιχεία removeelement(k) Ψάχνουμε για ένα αντικεί-μενο με κλειδί k Αν ένα τέτοιο αντικείμενο (k, o) βρεθεί, το αντικαθιστούμε με το ειδικό αντικείμενο AVAILABLE και επιστρέφουμε το στοιχείο o Αλλιώς, επιστρέφουμε NO_SUCH_KEY insert Item(k, o) Πετάμε exception αν ο πίνακας είναι πλήρης Ξεκινάμε στο κελί h(k) Ερευνούμε συνεχόμενα κελιά μέχρι ένα από τα ακόλουθα να συμβεί Ένα κελι i να βρεθεί το οποίο έιναι άδειο ή έχει αποθηκευμένη την τιμή AVAILABLE, ή N κελιά να ερευνηθούν ανεπιτυχώς Αποθηκεύουμε το αντικείμενο (k, o) στο κελί i Πίνακες Κατακερματισμού 14

Double Hashing Το Double hashing χρησιμο-ποιεί μια δευτερεύουσα συνάρτηση κατακερματισμού d(k) και χειρίζεται τις συγκρού-σεις τοποθετώντας το αντικεί-μενο στο πρώτο διαθέσιμο κελί από τις σειρές (i + jd(k)) mod N για j = 0, 1,, N - 1 Η δευτερεύουσα συνάρτηση κατακερματισμού d(k) δεν μπορεί να έχει μηδενικές τιμές Το μέγεθος N του πίνακα πρέπει να είναι πρώτος αριθμός έτσι ωστε να επιτρέπει την εξερεύνση όλων των κελιών Συνήθης επιλογή του compression map για τη δευτερεύουσα συνάρτη-ση κατακερματισμού : d 2 (k) = q - k mod q όπου q < N q είναι πρώτος αριθμός Οι πιθανές τιμές για το d 2 (k) είναι 1, 2,, q Πίνακες Κατακερματισμού 15

Παράδειγμα Double Hashing Ας θεωρήσουμε ένα πίνακα κατακερματισμού ο οποίος αποθηκεύει ακέραια κλειδιά και χειρίζεται συγκρούσεις με double hashing N = 13 h(k) = k mod 13 d(k) = 7 - k mod 7 Εισαγωγή των κλειδιών 18, 41, 22, 44, 59, 32, 31, 73, σε αυτή την σειρά k h (k ) d (k ) Probes 18 5 3 5 41 2 1 2 22 9 6 9 44 5 5 5 10 59 7 4 7 32 6 3 6 31 5 4 5 9 0 73 8 4 8 0 1 2 3 4 5 6 7 8 9 10 11 12 31 41 18 32 59 73 22 44 0 1 2 3 4 5 6 7 8 9 10 11 12 Πίνακες Κατακερματισμού 16

Απόδοση του Hashing Στη χειρότερη περίπτωση, αναζητήσεις, εισαγωγές και διαγραφές σε ένα πίνακα κατακερματισμού εκτελείται σε χρόνο O(n) Η χειρότερη περίπτωση συμβαίνει όταν όλα τα κλειδιά που εισάγονται στο λεξικό συγκρούονται Ο παράγοντας φόρτου (load factor) a = n/n a επηρεάζει την απόδοση του πίνακα κατακερματισμού Υποθέτωντας ότι οι τιμές κατακερματισμού συμπεριφέρονται σαν τυχαίοι αριθμοί, μπορεί να δειχτεί ότι ο αναμενόμενος αριθμός από probes για μια εισαγωγή με open addressing είναι 1 / (1 - a) Ο αναμενόμενος χρόνος εκτέλεσης για όλες τις πράξεις του ΑΤΔ του λεξικού σε ένα πίνακα κατακερματισμού είναι O(1) Στην πράξη, το hashing είναι πολύ γρήγορο αν ο παράγοντας φόρτου δεν είναι κοντά στο 100% Εφαρμογές των πινάκων κατακερματισμού: Μικρές βάσεις δεδομένων Μεταφραστές (compilers) browser caches Πίνακες Κατακερματισμού 17

Τέλος Ενότητας