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

Σχετικά έγγραφα
Ενότητα 6 Κατακερµατισµός

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Advanced Data Indexing

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

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

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

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

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

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

Linear Hashing. Linear vs other Hashing

Advanced Data Indexing

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

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

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

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

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

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

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

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

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

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

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

Προγραµµατισµός Ι (ΗΥ120)

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

ΚΑΤΑΚΕΡΜΑΤΙΣΜΟΣ HASHING

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

Κεφα λαιο 9 Κατακερματισμός

Κρυπτογραφία. Έλεγχος πρώτων αριθών-παραγοντοποίηση. Διαφάνειες: Άρης Παγουρτζής Πέτρος Ποτίκας

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

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

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

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

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

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

Αριθμοθεωρητικοί Αλγόριθμοι

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

1 ο ΦΥΛΛΑΔΙΟ ΑΣΚΗΣΕΩΝ - ΑΛΓΟΡΙΘΜΟΙ

Το εσωτερικό ενός Σ Β

Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

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

Υπολογιστικά & Διακριτά Μαθηματικά

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

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

Τα δεδοµένα συνήθως αποθηκεύονται σε αρχεία στο δίσκο Για να επεξεργαστούµε τα δεδοµένα θα πρέπει αυτά να βρίσκονται στη

Αριθµοθεωρητικοί Αλγόριθµοι και το. To Κρυπτοσύστηµα RSA

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55

5. Γεννήτριες Τυχαίων Αριθµών.

ΘΕΩΡΙΑ ΑΡΙΘΜΩΝ. Προτεινοµενες Ασκησεις - Φυλλαδιο 9

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

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

ΘΕΩΡΙΑ ΑΡΙΘΜΩΝ Ασκησεις - Φυλλαδιο 9

ΘΕΩΡΙΑ ΑΡΙΘΜΩΝ Ασκησεις - Φυλλαδιο 3

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

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

Βάσεις εδοµένων Ευαγγελία Πιτουρά 2

Τυχαιοκρατικοί Αλγόριθμοι

Μάθημα 8: Διαχείριση Μνήμης

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

Γ. Κορίλη Αλγόριθµοι ροµολόγησης

Ψηφιακοί Υπολογιστές

ΘΕΩΡΙΑ ΑΡΙΘΜΩΝ. Ασκησεις - Επανάληψης. ιδασκων: Α. Μπεληγιάννης Ιστοσελιδα Μαθηµατος :

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

Εισαγωγή στην Πληροφορική. Α σ κ ή σ ε ι ς σ τ η ν ι α χ ε ί ρ ι σ η Μ ν ή µ η ς. Αντώνης Σταµατάκης

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

Transcript:

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

Κατακερµατισµός Στόχος Έχουµε ένα σύνολο από κλειδιά {Κ 0,, Κ n-1 } και θέλουµε να υλοποιήσουµε Insert() και LookUp() (ίσως και Delete()) απλά και γρήγορα στην πράξη. Ιδέα Χρησιµοποιούµε έναν πίνακα κατακερµατισµού (hash table) πίνακας T[0..m-1] µε m > n (δηλ., µέγεθος µεγαλύτερο από το πλήθος των κλειδιών που θα χειριστούµε) µια συνάρτηση κατακερµατισµού (hash function) h: K {0,, m-1}, όπου Κ είναι ο χώρος των κλειδιών. Για κάθε j, το κλειδί K j αποθηκεύεται στη θέση Τ[h(K j )]. Αν η h µπορεί να υπολογιστεί γρήγορα, σε πόσο χρόνο µπορούµε να προσπελάσουµε το κλειδί? Ποιο πρόβληµα µπορεί να δηµιουργηθεί? 2

Συγκρούσεις (collisions) Σύγκρουση συµβαίνει όταν για δύο κλειδιά K i, K j που είναι διαφορετικά µεταξύ τους ισχύει ότι h(k i ) = h(k j ). Θα πρέπει να οριστεί ένας τρόπος διαχείρισης συγκρούσεων ώστε να επιλυθεί η σύγκρουση και τα κλειδιά να µπορούν να βρεθούν (µε LookUp()) σε λογικό χρόνο. Χρησιµοποιούνται 2 κύριοι τρόποι: τοποθέτηση στην ίδια θέση (π.χ., σε αλυσίδα) τοποθέτηση σε άλλη θέση Καλές Συναρτήσεις Κατακερµατισµού Κάνουν καλή διασπορά των κλειδιών στον πίνακα: Αν ένα κλειδί Κ επιλέγεται τυχαία από τον χώρο κλειδιών, η πιθανότητα να ισχύει h(k) = j, θα πρέπει να είναι 1/m, ίδια για όλα τα j (δηλαδή για όλες τις θέσεις του πίνακα). Παράδειγµα h(k) = k mod m Το m δεν πρέπει να είναι δύναµη του 2. Η hash function modulo επιτυγχάνει καλή διασπορά µόνο αν ο m είναι πρώτος αριθµός. 3

Κατακερµατισµός Προσπέλαση 1 πρόσβαση σε κάποιο µέρος της δοµής Παράδειγµα 1η προσπέλαση για την πρόσβαση στη θέση T[i] 2η προσπέλαση για την πρόσβαση στη θέση T[j], κλπ. n: πλήθος αποθηκευµένων κλειδιών m: µέγεθος πίνακα παράγων φόρτωσης (load factor) α = n/m S(α): αναµενόµενο πλήθος προσπελάσεων για την εύρεση κλειδιού που υπάρχει στην δοµή. U(α): αναµενόµενο πλήθος προσπελάσεων για κλειδί που δεν υπάρχει στην δοµή. 4

Μέθοδοι ιαχείρισης Συγκρούσεων Μέθοδος αλυσίδας T[j]: δείκτης σε µια αλυσίδα η οποία περιέχει όλα τα στοιχεία µε κλειδί Κ τέτοιο ώστε h(k) = j. 5

Μέθοδος Αλυσίδας 6

Μέθοδος Αλυσίδας Για την εύρεση κλειδιού, θα χρειαστούµε 1η προσπέλαση για την πρόσβαση στον πίνακα (προκειµένου να βρεθεί η θέση του πρώτου στοιχείου της αλυσίδας), 2η προσπέλαση στο 1 ο στοιχείο της αλυσίδας, κλπ. Αν όλες οι αλυσίδες είναι µη-άδειες, τότε το αναµενόµενο µήκος αλυσίδας θα είναι α = n/m U(α) = 1 + α = 1 + n/m 7

Ποιος είναι ο µέσος αριθµός προσπελάσεων για επιτυχηµένη αναζήτηση, αν Το µέγεθος της αλυσίδας είναι 1? Το µέγεθος της αλυσίδας είναι 2? Το µέγεθος της αλυσίδας είναι κ? S(α) = 1 + (1+α)/2 = 3/2 +α/2. Μια επιτυχηµένη LookUp ποτέ δεν εξετάζει άδειες αλυσίδες. Ωστόσο, το µήκος της αλυσίδας µπορεί να είναι λίγο µεγαλύτερο από α: S(α) 2 + α/2 Χειρότερη περίπτωση? Ποια είναι η κατάλληλη επιλογή για το m? Πόσο εύκολα µπορούµε να υλοποιήσουµε διαγραφή? 8

Μέθοδος Μικτών Αλυσίδων Ιδέα: Ολόκληρη η αλυσίδα αποθηκεύεται µέσα στον πίνακα. 9

Μέθοδος Ανοικτής ιεύθυνσης Τα κλειδιά αποθηκεύονται στον πίνακα κατακερµατισµού, αλλά δεν χρησιµοποιούνται δείκτες (δεν σχηµατίζονται αλυσίδες). Για κάθε κλειδί ελέγχεται µια ακολουθία από θέσεις (ακολουθία αναζήτησης/εξέτασης, probe sequence). Η ακολουθία καθορίζεται βάσει κάποιου κανόνα και µπορεί να εξαρτάται και από το ίδιο το κλειδί. Η(K, p): η p-οστή θέση που ελέγχεται για το κλειδί K, όπου p = 0, 1, LookUp: Ψάξε τις διαδοχικές θέσεις στην ακολουθία αναζήτησης, µέχρι είτε να βρεθεί το κλειδί, ή να βρεθεί µια κενή θέση στον πίνακα. Στη δεύτερη περίπτωση, το κλειδί δεν υπάρχει στον πίνακα. Insert: Έλεγξε τις διαδοχικές θέσεις στην ακολουθία αναζήτησης, µέχρι είτε να βρεθεί το κλειδί, ή να βρεθεί µια κενή θέση στον πίνακα στην οποία και εισάγεται το νέο κλειδί (µπορεί να απαιτείται ανακατανοµή των κλειδιών στον πίνακα, προκειµένου να µειωθεί ο χρόνος αναζήτησης). 10

Μέθοδοι Καθορισµού Ακολουθιών Αναζήτησης Γραµµική Αναζήτηση Προσπέλαση 0: Η(Κ,0) = h(k) Προσπέλαση p 1: H(K,p) = (H(K,p-1)+1) mod m (δηλ., η επόµενη θέση στον πίνακα) Τι γίνεται αν ο πίνακας είναι γεµάτος? Πώς µπορούµε να συµπεράνουµε κάτι τέτοιο? 0 11

Γραµµική Αναζήτηση Η απόδοση της µεθόδου είναι ικανοποιητική όταν ο πίνακας δεν είναι πολύ γεµάτος. Σηµαντικότερο Πρόβληµα Φαινόµενο Συγκέντρωσης (primary clustering) ηµιουργούνται τµήµατα (cluster) στον πίνακα µε συνεχόµενες κατειληµµένες θέσεις Αυτό αποτελεί προορισµό για περαιτέρω συγκρούσεις, ενώ νέες τέτοιες συγκρούσεις οδηγούν στην αύξηση του µεγέθους του τµήµατος. Πλήθος προσπελάσεων για µη επιτυχηµένη αναζήτηση αν η συνάρτηση κατακερµατισµού επιστρέφει µια κενή θέση του πίνακα? αν η συνάρτηση κατακερµατισµού επιστρέφει µια κατειληµµένη θέση του πίνακα? Προσπάθεια βελτίωσης: Πρόσθεσε µια σταθερά c > 1 (αντί για +1), για να βρεις την επόµενη θέση στην ακολουθία. Τι αποτέλεσµα θα έχει αυτή η προσπάθεια? Βοηθάει? 12

Βελτιώνοντας την Γραµµική Αναζήτηση Τετραγωνική αναζήτηση Προσπέλαση 0: Η(Κ,0) = h(k); Προσπέλαση p 1: H(K,p) = (h(k) + c1 * p 2 + c2 * p) mod m. Εµφανίζεται και εδώ πρόβληµα συγκέντρωσης (δευτερεύουσα συγκέντρωση, secondary clustering) καθώς όλα τα κλειδιά που έχουν ίδια τιµή h(k) ελέγχουν για κενές τις ίδιες θέσεις. ιπλός κατακερµατισµός Προσπέλαση 0: H(Κ,0) = h(k); Προσπέλαση p 1: H(Κ, p) = (H(K, p-1) + h 2 (K)) mod m = (h(k) + p * h 2 (K)) mod m h 2 (K): ευτερεύουσα συνάρτηση κατακερµατισµού 13

Βελτιώνοντας την Γραµµική Αναζήτηση Παράδειγµα ιπλού Κατακερµατισµού Βασική συνάρτηση κατακερµατισµού h(k): η ηµέρα θανάτου ευτερεύουσα συνάρτηση κατακερµατισµού h 2 (K): ο µήνας θανάτου (Ιανουάριος = 1, Φεβρουάριος = 2, κλπ.) 0 m = 31 Tι συµβαίνει κατά την εισαγωγή του τελευταίου ονόµατος, W. Hooper (October 14, 1790)? 14

ιπλός Κατακερµατισµός Η γραµµική αναζήτηση ισοδυναµεί µε διπλό κατακερµατισµό, αν h 2 (K) = 1, κλειδί K. Η ακολουθία αναζήτησης πρέπει (τελικά) να µην περιορίζεται σε λίγες µόνον θέσεις του πίνακα. Έτσι, πρέπει: κλειδί K, h 2 (K) 0 h 2 (K) και m δεν πρέπει να έχουν κοινούς διαιρέτες Γιατί? Έστω d διαιρεί το h 2 (K) και το m. Για p = m / d: [(m/d)*h 2 (K)] mod m = [m*(h 2 (K)/d)] mod m = 0, δηλ., η θέση για p = m/d στην ακολουθία θα είναι η ίδια µε την 1η (p = 0). Επιλέγουµε τον m να είναι πρώτος αριθµός. 15

Απόδοση Μεθόδου ιπλού Κατακερµατισµού Έστω ότι κάθε θέση που εξετάζεται στον πίνακα κατακερµατισµού είναι ανεξάρτητη από τις υπόλοιπες θέσεις του πίνακα. Είναι αυτή η υπόθεση σωστή? Όχι, αφού: 1. ιαδοχικές θέσεις µπορεί να εξαρτώνται µε κάποιο τρόπο. 2. εν εξετάζεται η ίδια θέση 2 φορές. Θεωρώντας ότι η υπόθεση είναι σωστή, a. η πιθανότητα να επιλεγεί µια κατειληµµένη θέση είναι ίση µε τον παράγοντα φόρτωσης, b. οπότε κατά την εισαγωγή n κλειδιών σε πίνακα κατακερµατισµού µεγέθους m: η πιθανότητα σύγκρουσης σε κάθε βήµα είναι α i = i/m, i n, µετά την εισαγωγή i κλειδιών. 16

Απόδοση Μεθόδου ιπλού Κατακερµατισµού Αναµενόµενο πλήθος προσπελάσεων σε µη επιτυχηµένη αναζήτηση, αν n-1 κλειδιά έχουν ήδη εισαχθεί: U n -1 = 1*(1 a n-1 ) + 2*a n-1 *(1-a n-1 )+3*a n-1 2 *(1-a n-1 ) + = 1 + a n-1 + a n-1 2 + = 1/(1 a n-1 ) Αναµενόµενο πλήθος προσπελάσεων σε επιτυχηµένη αναζήτηση = Αναµενόµενο πλήθος προσπελάσεων για την εισαγωγή κάθε ενός από τα n κλειδιά. Αλλά, αναµενόµενο πλήθος προσπελάσεων για την εισαγωγή του i-οστού κλειδιού = αναµενόµενο πλήθος προσπελάσεων σε µη επιτυχηµένη αναζήτηση. Εποµένως: n S n = (1/n) i = 1Ui 1 n = (1/n) i= 11/(1 a i 1) n = (m/n) i= 11/( m i+ 1) = (m/n) (H m H m-n ), όπου H i = 1 + ½ + + 1/i ln i S n (m/n) (ln m ln (m-n)) = (m/n) ln(m/m-n) = (1/a n ) ln (1/(1-a n )). 17

Ταξινοµηµένος Κατακερµατισµός (Ordered Hashing) Αν τα κλειδιά ήταν αλφαβητικά ταξινοµηµένα θα είχαµε µείωση του χρόνου για αποτυχηµένες αναζητήσεις: Αν ένα µεγαλύτερο κλειδί από το ζητούµενο Κ προσπελαστεί τερµατίζει η αναζήτηση. Μέθοδος µε αλυσίδες ιατηρούµε τα κλειδιά στις αλυσίδες ταξινοµηµένα αλφαβητικά. Μέθοδος Ανοικτής ιεύθυνσης Τα κλειδιά πρέπει να εισαχθούν έτσι ώστε: Τα κλειδιά που προηγούνται στην ακολουθία αναζήτησης από το Κ, θα πρέπει να είναι µικρότερα από το Κ. Ιδέα Αν στην ακολουθία αναζήτησης για το κλειδί Κ δούµε κλειδί Κ > Κ, τότε αντικαθιστούµε το Κ µε το Κ και συνεχίζουµε µε την εισαγωγή του Κ βάσει της ακολουθίας αναζήτησης του Κ. 18

Ταξινοµηµένος Κατακερµατισµός procedure OrderedHashInsert(key K, info I, hash_ptr P) if (P->size == m) then error; /* πλήρης */ T = P->Table; pos = h(k); while (T[pos]!= NULL) do if (T[pos]->Key > K) then swap(k, T[pos]->Key); swap(i, T[pos]->Info); else if (K == T[pos]->Key) then T[pos]->Info = I; return; pos = (pos + h 2 (K)) mod m; /* ιπλός */ T[pos] = new_struct(hash_node); T[pos]->Key = K; T[pos]->Info = I; P->size++; function OrderedHashingLookUp(key K, hash_ptr P): hash_ptr T = P->Table; pos = h(k); while (T[pos]!= NULL && T[pos]->Key < K) do pos = (pos + h 2 (K)) mod m; if (T[pos]!= NULL && T[pos]->Key == K) return T[pos]; else return NULL; 19

Ταξινοµηµένος Κατακερµατισµός Η τελική µορφή του πίνακα κατακερµατισµού, µετά την εισαγωγή σε αυτόν (βάσει της µεθόδου του ταξινοµηµένου κατακερµατισµού) ενός συνόλου από κλειδιά, θα είναι η ίδια ανεξάρτητα από τη σειρά εισαγωγής των κλειδιών στον πίνακα. Υπόθεση Η πιθανότητα να επιλεγεί ένα συγκεκριµένο κλειδί από τον χώρο κλειδιών είναι η ίδια για όλα τα κλειδιά του χώρου. Τότε: Ο αναµενόµενος χρόνος S n για επιτυχηµένη αναζήτηση δεν αλλάζει. Ο αναµενόµενος χρόνος Un για µη επιτυχηµένη αναζήτηση γίνεται περίπου ίδιος µε S n. Άρα: S n U n (1/a n ) ln(1/(1 a n )). 20

Ταξινοµηµένος Κατακερµατισµός ιαγραφές Μέθοδος µε αλυσίδες Γίνεται εύκολα. Πως? Μέθοδος Ανοικτής ιεύθυνσης Ένα κλειδί δεν µπορεί να διαγραφεί αφήνοντας απλά τη θέση που κατείχε άδεια. Γιατί? Παράδειγµα Έστω ότι χρησιµοποιούµε τη µέθοδο γραµµικής αναζήτησης. Έστω ότι 2 κλειδιά µε την ίδια βασική/πρωταρχική τιµή κατακερµατισµού εισάγονται στις θέσεις j και j+1 ενός πίνακα κατακερµατισµού και στη συνέχεια αυτό στη θέση j διαγράφεται. Το άλλο θα µείνει στη θέση j+1, αλλά η LookUp() θα σταµατήσει όταν βρει τη θέση j κενή. Λάθος! Ιδέα Για κάθε θέση του πίνακα υπάρχει ένα bit, που ονοµάζεται Deleted και µπορεί να είναι είτε 0 ή 1. Αρχικά όλα αυτά τα bits είναι 0. Αν διαγράψουµε κάτι από µια θέση του πίνακα, θέτουµε το bit της θέσης αυτής σε 1. H LookUp() δεν τερµατίζει σε άδειες θέσεις για τις οποίες το Deleted bit είναι 1. 21

Επεκτάσιµος Κατακερµατισµός (Extendible Hashing) Είναι µέθοδος που επιτρέπει την επαύξηση ή τη συρρίκνωση ενός πίνακα κατακερµατισµού, διατηρώντας παράλληλα τους χρόνους πρόσβασης στη δοµή χαµηλούς. Χρήσιµο για την αποθήκευση δεδοµένων στη δευτερεύουσα µνήµη. Μπορεί να χρησιµοποιηθεί εναλλακτικά αντί ενός Β-δένδρου. οµή εδοµένων 2 επιπέδων: o ένας κατάλογος (directory) που αποτελεί τη δοµή υψηλού επιπέδου και o ένα σύνολο από σελίδες φύλλα (leaf pages) στις οποίες αποθηκεύονται δεδοµένα. Ο κατάλογος είναι ένας πίνακας από δείκτες στις σελίδες. Οι σελίδες φύλλα είναι σταθερού µεγέθους, π.χ., b bytes η κάθε µια. 22

Επεκτάσιµος Κατακερµατισµός Η συνάρτηση κατακερµατισµού απεικονίζει κλειδιά σε bit strings µήκους L. L bits: 2 L τιµές κατακερµατισµού h d (K): τα πρώτα d bits του h(k), d <= L 23

Επεκτάσιµος Κατακερµατισµός Μια σελίδα περιέχει όλα εκείνα τα κλειδιά των οποίων η τιµή κατακερµατισµού έχει ένα συγκεκριµένο πρόθεµα από bits. Το µήκος αυτού του προθέµατος ονοµάζεται βάθος (depth) της σελίδας. Το µέγιστο βάθος κάθε σελίδας ονοµάζεται βάθος του πίνακα κατακερµατισµού. Ο κατάλογος είναι ένας πίνακας T µε 2 D δείκτες σε σελίδες, όπου D το βάθος του πίνακα κατακερµατισµού. Εύρεση σελίδας που περιέχει το κλειδί Κ Υπολογίζουµε το h D (K); Ακολουθούµε τον δείκτη T[h D (K)]; Αν για µια σελίδα ισχύει ότι d < D, τότε 2 D-d δείκτες σε συνεχόµενες θέσεις του πίνακα T θα δείχνουν στη σελίδα αυτή. 24

Επεκτάσιµος Κατακερµατισµός Εισαγωγές Μια σελίδα χωράει µόνο b δεδοµένα. Αν συµβεί υπερχείλιση µιας σελίδας µε βάθος d, η σελίδα χωρίζεται σε δύο σελίδες: δηµιουργία µιας νέας σελίδας, που ονοµάζεται φιλική σελίδα (buddy page) και αύξηση του βάθους των σελίδων σε d+1. Τι αλλαγές προκαλεί η δηµιουργία της νέας σελίδας στον κατάλογο? Περιπτώσεις 1. d < D Αλλαγή απλά µερικών δεικτών στον κατάλογο, ώστε αυτοί να δείχνουν στη νέα σελίδα. 2. d = D ιπλασιασµός του µεγέθους του καταλόγου και κατάλληλη αρχικοποίηση των δεικτών. 25

Επεκτάσιµος Κατακερµατισµός Παράδειγµα Εισαγωγής (Υποθέτουµε ότι b = 2) (α) Εισαγωγή κλειδιού µε τιµή κατακερµατισµού 11101. (β) Εισαγωγή κλειδιού µε τιµή κατακερµατισµού 01011. 26

Επεκτάσιµος Κατακερµατισµός ιαγραφές Αν η διαγραφή κάποιων κλειδιών από µια σελίδα 2i, για κάποιο i, έχει ως αποτέλεσµα αυτή µαζί µε την (2i+1) να έχει συνολικά b κλειδιά, θα µπορούσε να γίνει συνένωση των 2 σελίδων σε 1. Γενικά αυτή η λειτουργία είναι ακριβή και δεν είναι συνετό να γίνεται συχνά. Αποδοτικότητα Η µέθοδος: είναι αποδοτική σε χρόνο προσπέλασης, αφού απαιτείται µόνο µια πρόσβαση στην κύρια µνήµη και µια στη δευτερεύουσα για να επιτευχθεί η προσπέλαση του ζητούµενου κλειδιού (και δεδοµένου). δεν είναι αρκετά αποδοτική σε µνήµη, αφού πολλές από τις σελίδες µπορεί να είναι σχεδόν άδειες και αφού ο κατάλογος συνήθως περιέχει παραπάνω από έναν δείκτες που δείχνουν στην ίδια σελίδα. 27

Συναρτήσεις Κατακερµατισµού Οι µέθοδοι κατακερµατισµού που συζητήθηκαν έχουν πολύ καλή «µέση» απόδοση µόνο αν οι τιµές κατακερµατισµού των κλειδιών είναι οµοιόµορφα κατανεµηµένες (για το µέγεθος του πίνακα κατακερµατισµού). Στη χειρότερη περίπτωση τα πράγµατα µπορούν να είναι πολύ άσχηµα (γραµµική πολυπλοκότητα). Ενδέχεται, η συνάρτηση κατακερµατισµού να µην επιτυγχάνει καλή κατανοµή των κλειδιών γενικά ή για συγκεκριµένα σύνολα κλειδιών. Κατακερµατισµός µε ιαίρεση h(k) = K mod m m: µέγεθος πίνακα κατακερµατισµού p Αν Κ αλφαριθµητικό, υπολογίζουµε το όπου o p: µήκος του αλφαριθµητικού 1 i= 0 cir i, o c i : κωδικός (ASCII) του i-οστού χαρακτήρα του Κ o r: το πλήθος διαφορετικών χαρακτήρων στον κώδικα (συνήθως 128 ή 256) 28

Κατακερµατισµός µε ιαίρεση Προσοχή Τα κλειδιά µπορεί να µην είναι τυχαία Π.χ. Αν το m είναι r ή r 2, το αποτέλεσµα της διαίρεσης είναι ο κωδικός του ενός ή των δύο τελευταίων χαρακτήρων. Από τα γράµµατα του αλφάβητου είναι πολύ λίγα αυτά που συνήθως συναντούνται ως τελευταίοι χαρακτήρες λέξεων. Αν τα m και r είναι άρτια, η τιµή h(k) θα είναι άρτια ή περιττή ανάλογα µε το αν ο τελευταίος χαρακτήρας στο αλφαριθµητικό έχει περιττό ή άρτιο κωδικό. Καλή Συνάρτηση Κατακερµατισµού Αποφυγή συστηµατικών συγκρούσεων ακόµη και σε περιπτώσεις που τα κλειδιά επιλέγονται µε ένα συστηµατικά µη τυχαίο τρόπο. 29

Κατακερµατισµός µε ιαίρεση Λύση m να είναι πρώτος. Επίσης, είναι καλύτερο το m να µην διαιρεί τους r k +a, r k -1 για µικρές σταθερές k και a. Ενδεικτικά, έστω m = r-1 και έστω ότι r-1 είναι πρώτος: p 1 i= 0 ir c i p mod (r-1) = 1 i= 0 ( p = ( cir I mod (r-1)) mod (r-1) 1 i= 0 c i )mod (r-1) Μπορεί να αποδειχθεί επαγωγικά ότι για κάθε i, r i i = 1 + (r-1) 1 j= 0 r j. Άρα r i i mod (r-1) = (1 + (r-1) 1 j= 0 r j ) mod (r-1) = 1. ηλαδή, αν m = r-1, όλες οι µεταθέσεις του ίδιου συνόλου χαρακτήρων (π.χ., ABC, BCA, CBA, κλπ.) έχουν την ίδια τιµή κατακερµατισµού. 30

Συναρτήσεις Κατακερµατισµού Τέλειος Κατακερµατισµός Στατικών εδοµένων Αν γνωρίζαµε εξ αρχής τα κλειδιά που θέλουµε να αποθηκευτούν, ίσως να µπορούσαµε να σχεδιάσουµε µια συνάρτηση κατακερµατισµού που να αποφεύγει εντελώς τις συγκρούσεις. Έχουν αναπτυχθεί διάφορες τεχνικές για την εύρεση τέλειων συναρτήσεων κατακερµατισµού για δεδοµένα σύνολα κλειδιών. Η µέθοδος έχει περιορισµένη εφαρµογή, αφού συνήθως το σύνολο των κλειδιών δεν είναι γνωστό και τα δεδοµένα αλλάζουν δυναµικά. 31

Συναρτήσεις Κατακερµατισµού Ιδέα Η συνάρτηση κατακερµατισµού επιλέγεται τυχαία από ένα σύνολο συναρτήσεων κατακερµατισµού (κατά την εκτέλεση). Θετικά Η πιθανότητα επιλογής µιας «κακής» συνάρτησης κατακερµατισµού είναι µικρή. Σε επόµενη εκτέλεση του προγράµµατος, η πιθανότητα τα πράγµατα να πάνε και πάλι άσχηµα είναι µικρή. Ακόµη και αν τα κλειδιά που παρέχονται στο σύστηµα είναι πολύ προσεκτικά επιλεγµένα από έναν αντίπαλο (ώστε να αποτελούν άσχηµη είσοδο), η µέθοδος αυτή δουλεύει αποδοτικά. Αρνητικό Όχι επανάληψη προηγούµενων αποτελεσµάτων, σε περίπτωση που το θέλουµε (π.χ., αναπαραγωγή κάποιας κατάστασης σφάλµατος). 32

Καθολικές Κλάσεις Συναρτήσεων Κατακερµατισµού Κ: χώρος κλειδιών m: µέγεθος πίνακα κατακερµατισµού H: σύνολο συναρτήσεων από το Κ στο {0,...,m-1} Ορισµός Η κλάση συναρτήσεων Η λέγεται καθολική αν για κάθε ζεύγος κλειδιών x,y, όπου x y, ισχύει ότι: {h H: h(x) = h(y)} / H 1/m. ηλαδή, για κάθε ζεύγος διαφορετικών κλειδιών, µόνο ένα ποσοστό 1/m (το πολύ) των συναρτήσεων της κλάσης µπορεί να οδηγεί σε σύγκρουση κατά την αποθήκευση του ζεύγους. Εάν διαλέξουµε µια συνάρτηση από την κλάση τυχαία, η πιθανότητα ένα ζεύγος κλειδιών να οδηγήσει σε σύγκρουση είναι 1/m. 33

Καθολικές Κλάσεις Συναρτήσεων Κατακερµατισµού Θεώρηµα Έστω ότι Κ = k είναι πρώτος αριθµός, και έστω ότι το K περιέχει (ως κλειδιά) τους ακεραίους 0,..., k-1. Για κάθε αριθµό a {1,, k-1} και b {0,, k-1} έστω: Τότε, η h a,b (x) = ((ax+b) mod k) mod m H = {h a,b : 1 a < k και 0 b < k } είναι καθολική κλάση συναρτήσεων. Παρατηρήσεις Το µέγεθος m του πίνακα µπορεί να είναι οποιοσδήποτε ακέραιος και όχι απαραίτητα πρώτος, ούτε καν περιττός. Το m µπορεί να είναι ακόµη και δύναµη του 2. Η µέθοδος µπορεί να χρησιµοποιηθεί σε συνδυασµό µε τη µέθοδο του επεκτάσιµου κατακερµατισµού. 34