Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Κατακερματισμός. Το Πρόβλημα του Λεξικού – Λύσεις Διατήρηση με αποδοτικό τρόπο ενός συνόλου κλειδιών ώστε οι εξής 3 πράξεις να υποστηρίζονται αποδοτικά:

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Κατακερματισμός. Το Πρόβλημα του Λεξικού – Λύσεις Διατήρηση με αποδοτικό τρόπο ενός συνόλου κλειδιών ώστε οι εξής 3 πράξεις να υποστηρίζονται αποδοτικά:"— Μεταγράφημα παρουσίασης:

1 Κατακερματισμός

2 Το Πρόβλημα του Λεξικού – Λύσεις Διατήρηση με αποδοτικό τρόπο ενός συνόλου κλειδιών ώστε οι εξής 3 πράξεις να υποστηρίζονται αποδοτικά: 1. Εύρεση ενός στοιχείου στο σύνολο 2. Ένθεση ενός νέου στοιχείου στο σύνολο 3. Διαγραφή ενός υπάρχοντος στοιχείου από το σύνολο ΚατακερματισμόςΔέντρα 2 Λύνουν και το πρόβλημα του προηγούμενου στοιχείου (predecessor)

3 Άμεση Διευθυνσιοδότηση  Υποθέσεις:  Τα στοιχεία είναι ανά δύο διαφορετικά  Κάθε στοιχείο προκύπτει από ένα σύμπαν U = { 0, 1,..., u - 1 }  Ιδέα:  Αποθήκευση των στοιχείων σε πίνακα με βάση το κλειδί • Αναπαράσταση: • Ένας πίνακας T[0... u - 1] • Κάθε κάδος (θέση) του T αντιστοιχεί σε ένα κλειδί του U • Για ένα στοιχείο x, ένας δείκτης στο (ή το ίδιο το x ) αποθηκεύεται στην θέση T[x] • Αν δεν υπάρχουν στοιχεία x στο σύνολο S, το T[x] είναι άδειο, (NIL) 3

4 4 Άμεση Διευθυνσιοδότηση U (σύμπαν στοιχείων) S (σύνολο κλειδιών) 0 u - 1 k3k3 k2k2 k1k1 k4k4 k1k1 k4k4 k2k2 k3k3 Πρόβλημα;

5 Πίνακες Κατακερματισμού  Όταν το S είναι μικρότερο του U, ένας πίνακας κατακερματισμού απαιτεί λιγότερο χώρο από την άμεση διευθυνσιοδότηση.  Μείωση του χώρου σε |S|  Ακόμα έχουμε O(1) χρόνος εύρεσης, αλλά στη μέση περίπτωση (και στη χειρότερη σε κάποιες περιπτώσεις όπως θα δούμε) 5

6 Πίνακες Κατακερματισμού Ιδέα:  Χρήση της h για υπολογισμό του κάδου  Αποθήκευση του στοιχείου στο κάδο h(k)  Μία συνάρτηση κατακερματισμού h μετατρέπει ένα στοιχείο σε διεύθυνση στον πίνακα T[0…m-1]: h : U → {0, 1,..., m – 1} 6

7 7 Παράδειγμα: Πίνακες Κατακερματισμού U (σύμπαν κλειδιών) 0 m - 1 h(k 3 ) h(k 2 ) = h(k 5 ) h(k 1 ) h(k 4 ) k1k1 k4k4 k2k2 k5k5 k3k3 S (σύνολο κλειδιών) Πρόβλημα;

8 Αποφυγή Συγκρούσεων  Εν τάχει:  Αλυσίδες (chaining)  Ανοικτή διευθυνσιοδότηση (Open addressing)  Linear probing  Cuckoo Hashing  Universal Hashing  Perfect Hashing 8

9 9 Συγκρούσεις με Αλυσίδες

10 10 Κατακερματισμός με Αλυσίδες: Ανάλυση  Πόσο χρειάζεται για την εύρεση ενός στοιχείου;  Χειρότερη περίπτωση:  Τα n στοιχεία πέφτουν στον ίδιο κάδο  Χρόνος χειρότερης περίπτωσης  (n), συν το χρόνο για υπολογισμό της συνάρτησης κατακερματισμού. 0 m - 1 T αλυσίδα

11 Κατακερματισμός με Αλυσίδες: Ανάλυση  Μέση Περίπτωση:  Εξαρτάται από πόσο καλά κατανείμει η συνάρτηση τα n στοιχεία στους m κάδους  Υπόθεση: απλός ομοιόμορφος κατακερματισμός  Κάθε στοιχείo έχει ίδια πιθανότητα να πέσει σε οποιονδήποτε από τους m κάδους (η πιθανότητα σύγκρουσης Pr(h(x)=h(y)), είναι 1/m)  Μήκος λίστας: T[j] = n j, j = 0, 1,..., m – 1  Πλήθος κλειδιών στον πίνακα: n = n 0 + n 1 +· · · + n m-1  Μέσο μήκος n j : E[n j ] = α = n/m n 0 = 0 n m – 1 = 0 T n2n2 n3n3 njnj nknk 11

12 Περίπτωση 1: Ανεπιτυχής Αναζήτηση Θεώρημα Μία ανεπιτυχής αναζήτηση απαιτεί Θ(1+α) αναμενόμενο χρόνο με βάση την υπόθεση του απλού ομοιόμορφου κατακερματισμού. Απόδειξη: Ανεπιτυχής αναζήτηση για το στοιχείο k  Απαιτείται αναζήτηση μέχρι το τέλος της λίστας T[h(k)]  Μέσο μήκος αλυσίδας:  E[n h(k) ] = α = n/m  Μέσο πλήθος στοιχείων είναι ίσο με α  Συνολικός χρόνος:  O(1) (υπολογισμός συνάρτησης ) + α  Θ(1+α) 12

13 Συναρτήσεις  Πότε μία συνάρτηση είναι καλή; (1) Εύκολα υπολογίσιμη (2) Προσεγγίζει μία τυχαία συνάρτηση: για κάθε είσοδο κάθε έξοδο έχει ίδια πιθανότητα (απλός ομοιόμορφος κατακερματισμός)  Στην πράξη είναι δύσκολο να ικανοποιηθεί αυτή η υπόθεση.  Δεν ξέρουμε συνήθως την κατανομή των δεδομένων των στοιχείων 13

14 Χαρακτηριστικά Καλών Συναρτήσεων  Ελαχιστοποίηση πιθανότητας να πέσουν δύο κοντινά στοιχεία στον ίδιο κάδο  Οι λέξεις pt και pts θα πρέπει να απεικονίζονται σε άλλους κάδους  Θέλουμε μία hash τιμή ανεξάρτητη των μοτίβων που μπορεί να υπάρχουν στα στοιχεία του S. 14

15 Κοινές Συναρτήσεις Κατακερματισμού Στην πράξη:  D.E. Knuth: The Art of Computer Programming  Μέθοδος διαίρεσης  Για αλφαριθμητικά της μορφής s = s 0 s 1... s k-1 : π.χ. B = 131 και w = μήκος λέξης (bits) (w = 32 ή w = 64). 15

16 Η Μέθοδος της Διαίρεσης  Ιδέα:  Απεικόνισε το στοιχείο k σε έναν από τους m κάδους: h(k) = k mod m  Πλεονέκτημα:  Γρήγορο, μόνο μία πράξη  Μειονέκτημα:  Μερικές τιμές του m είναι κακές  Δυνάμεις του 2  Σύνθετοι αριθμοί 16

17 Παράδειγμα  Αν m = 2 p, τότε το h(k) είναι τα p λιγότερο σημαντικά bits του k  p = 1  m = 2  h(k) = {0,1}, 1 ο LSB του k  p = 2  m = 4  h(k) = {0,1,2,3}, 2 λιγότερα σημαντικά ψηφία του k  Επιλογή m ως πρώτου αριθμού, όχι κοντά σε δύναμη του 2  Στήλη 2: k mod 97  Στήλη 3: k mod 100 m 97 m

18 18 Η Μέθοδος Πολλαπλασιασμού Ιδέα:  Πολλαπλασιασμός k με μία σταθερά A, όπου 0 < A < 1 (ο Knuth προτείνει το χρυσό λόγο φ )  Εξάγουμε το κλασματικό μέρος του kA  Πολλαπλασιάζουμε με m h(k) =  m (k A mod 1)   Μειονέκτημα: Πιο αργό από την μέθοδο διαίρεσης (;;;)  Πλεονέκτημα: Η τιμή του m δεν είναι κρίσιμη (τυπικά m=2 p )

19 Ανοικτή Διευθυνσιοδότηση  Αν (m > n)  αποθήκευση κλειδιών στον πίνακα μόνο  Όχι λίστες  Ιδέα:  Ένθεση: αν ένας κάδος είναι γεμάτος, δοκίμασε κάποιον άλλον μέχρι να βρεθεί ένας άδειος  Αναζήτηση: ίδια ακολουθία ελέγχων  Διαγραφή: πιο δύσκολη  Ο χρόνος αναζήτησης εξαρτάται από την ακολουθία ελέγχων! Ένθεση 14 19

20 Γενίκευση Συνάρτησης Κατακερματισμού:  Μία συνάρτηση με 2 παραμέτρους: (i) Στοιχείο, και (ii) Ακολουθία ελέγχου h(k,p), p=0,1,...,m-1  Ακολουθία ελέγχων  Πρέπει να είναι αναδιάταξη  Υπάρχουν m! διαφορετικές αναδιατάξεις  Οι καλές συναρτήσεις θα έπρεπε να παράγουν όλες τις m! αναδιατάξεις Ένθεση 14 20

21 Κοινές Μέθοδοι Ανοικτής Διευθυνσιοδότησης  Γραμμικός Έλεγχος  Τετραγωνικός Έλεγχος  Διπλός Κατακερματισμός  κ.α. 21

22 Γραμμικός Έλεγχος: Ένθεση  Ιδέα: όταν υπάρχει σύγκρουση, έλεγξε την επόμενη διαθέσιμη θέση στον πίνακα (έλεγχος) h(k,i) = (h 1 (k) + i) mod m i = 0,1,2,...  Πρώτος κάδος: h 1 (k)  Δεύτερος κάδος: h 1 (k) + 1  Τρίτος κάδος: h 1 (k)+2, κοκ. Ακολουθία ελέγχων: Επιστρέφει στην αρχή 22

23 Γραμμικός Έλεγχος: Αναζήτηση  Τρεις περιπτώσεις: (1) Η θέση στον πίνακα περιέχει το στοιχείο που αναζητάμε (2) Η θέση είναι άδεια (3) Η θέση περιέχει ένα διαφορετικό στοιχείο  Περίπτωση (2): έλεγξε τα επόμενα κελιά μέχρι να φτάσουμε σε (1) ή σε (3) 0 m - 1 h(k 3 ) h(k 2 ) = h(k 5 ) h(k 1 ) h(k 4 ) 23

24 Γραμμικός Έλεγχος: Διαγραφή  Πρόβλημα:  Δεν μπορούμε να κάνουμε το κελί άδειο  Αδύνατο να βρούμε τα κλειδιά που εντέθηκαν αφού ο κάδος αυτός γέμισε.  Λύση:  Μάρκαρε τον κάδο ως διαγραμμένο.  Ο διαγραμμένος κάδος μπορεί να χρησιμοποιηθεί για ένθεση  Η αναζήτηση εκτελείται κανονικά 0 m

25 Γραμμικός Έλεγχος: Κόστος 25  Ανεπιτυχής αναζήτηση:  Επιτυχής αναζήτηση:

26 Καθολικός Κατακερματισμός Τέλειος Κατακερματισμός Bloom Φίλτρα Ας Προχωρήσουμε πιο Βαθιά

27 Καθολικός Κατακερματισμός (Universal Hashing)  Στην πράξη, τα στοιχεία δεν είναι ομοιόμορφα κατανεμημένα  Κάθε καθορισμένη συνάρτηση μπορεί να δώσει Θ(n) χρόνο  Στόχος: Συναρτήσεις που παράγουν τυχαίες διευθύνσεις στον πίνακα ανεξάρτητα από τα κλειδιά  Ιδέα:  Επέλεξε μία συνάρτηση τυχαία, από μία προκαθορισμένη οικογένεια συναρτήσεων 27

28 Καθολικός Κατακερματισμός (στην αρχή της εκτέλεσης) h 1 ( ) h 2 ( ) … h k ( ) Σύνολο συναρτήσεων κατακερματισμού Τυχαία επιλογή συνάρτησης h i ( ) Πίνακας Κατακερματισμού 28

29 Καθολικές Συναρτήσεις Κατακερματισμού H={ h(k): U  {0,1,..,m-1} } Η H είναι καθολική αν για κάθε x  y: 29 H

30 Γιατί αυτή η ιδιότητα είναι χρήσιμη; Ποια είναι η πιθανότητα σύγκρουσης σε αυτή την περίπτωση; Είναι ίση με την πιθανότητα επιλογής μία συνάρτησης h  H έτσι ώστε x  y  h(x) = h(y) που είναι ίση με: 30

31 Καθολικός Κατακερματισμός Με τον καθολικό κατακερματισμό η πιθανότητα σύγκρουσης μεταξύ διαφορετικών στοιχείων k και l δεν είναι παραπάνω από 1/m αν οι θέσεις h(k) και h(l) επιλέχθηκαν τυχαία και ανεξάρτητα από το σύνολο {0, 1, …, m – 1} 31

32 Σχεδιάζοντας μία Οικογένεια Καθολικών Συναρτήσεων  Επέλεξε έναν πρώτο αριθμό p αρκετά μεγάλο ώστε κάθε στοιχείο k να είναι στο διάστημα [0... p – 1] Z p = {0, 1, …, p - 1} και Z p * = {1, …, p - 1}  Ορίζουμε τη συνάρτηση h a,b (k) = ((ak + b) mod p) mod m,  a  Z p * και b  Z p  Η οικογένεια όλων αυτών των συναρτήσεων είναι H p,m = {h a,b : a  Z p * και b  Z p }  a, b: επιλέγονται τυχαία στην αρχή της εκτέλεσης 32

33 Παράδειγμα p = 17, m = 6 h a,b (k) = ((ak + b) mod p) mod m h 3,4 (8) = ((3  8 + 4) mod 17) mod 6 = (28 mod 17) mod 6 = 11 mod 6 = 5 33

34 Άλλη Καθολική Οικογένεια Συναρτήσεων 34 Έστω m πρώτος. Αναπαριστούμε το στοιχείο k με r + 1 ψηφία σε βάση m. Έστω k = 〈 k 0, k 1, …, k r 〉, όπου 0 ≤ k i < m. Επιλέγουμε a = 〈 a 0, a 1, …, a r 〉, όπου κάθε a i επιλέχθηκε τυχαία από το σύνολο {0, 1, …, m–1}.

35 Πλεονεκτήματα Καθολικού Κατακερματισμού  Δίνει καλά αποτελέσματα στη μέση περίπτωση ανεξαρτήτως των στοιχείων που αποθηκεύονται  Εγγυάται ότι καμία είσοδος δεν θα προκαλεί συμπεριφορά χειρότερης περίπτωσης  Κακή απόδοση έχουμε μόνο όταν η τυχαία επιλογή επιστρέφει μία κακή συνάρτηση κατακερματισμού (μικρή πιθανότητα) 35

36 Τέλειος Κατακερματισμός 36  Οι λύσεις που είδαμε μέχρι τώρα λύνουν το πρόβλημα σε O(n) χώρο αλλά με O(1) αναμενόμενο χρόνο για αναζήτηση. Μπορούμε καλύτερα; Μία τέλεια συνάρτηση κατακερματισμού για ένα σύνολο S είναι μία συνάρτηση χωρίς συγκρούσεις. Με μία τέλεια συνάρτηση για το S έχουμε O(1) χρόνο χειρότερης περίπτωσης για την αναζήτηση για το στατικό πρόβλημα του λεξικού στο S. (Γιατί;)

37 Στατικό Λεξικό 37 Συνδυασμός δύο λύσεων για στατικό κατακερματισμό με χρήση καθολικού κατακερματισμού:  Μία λύση που χρησιμοποιεί πολύ χώρο χωρίς συγκρούσεις.  Μία λύση με λίγο χώρο αλλά πολλές συγκρούσεις. Λύση δύο επιπέδων:  Χρήση λίγου χώρου στο επίπεδο 1  Επίλυση συγκρούσεων στο επίπεδο 1 με χρήση λύσης χωρίς συγκρούσεις στο επίπεδο 2  lookup(x): αναζήτηση στο επίπεδο 1 για την εύρεση του σωστού επιπέδου 2. Αναζήτηση μετά στο επίπεδο 2.

38 Όταν Χρησιμοποιούμε Πολύ Χώρο 38  Χρήση μίας καθολικής συνάρτησης για απεικόνιση σε πίνακα μεγέθους N 2. Ποιο είναι το αναμενόμενο πλήθος συγκρούσεων; Αποδεικνύεται ότι είναι ½. Με πιθανότητα ½ παίρνουμε μία τέλεια συνάρτηση κατακερματισμού που υποστηρίζει αναζητήσεις σε O(1) χρόνο χειρότερης περίπτωσης αν ο χώρος είναι O(N 2 ).

39 Όταν Χρησιμοποιούμε Λίγο Χώρο 39  Χρήση μίας καθολικής συνάρτησης για απεικόνιση σε πίνακα μεγέθους N. Ποιο είναι το αναμενόμενο πλήθος συγκρούσεων; Είναι ίσο με ½Ν.

40 Λύση 2 Επιπέδων 40 Λύση 2 επιπέδων:  Στο επίπεδο 1 κάνουμε χρήση της λύσης με O(N) συγκρούσεις.  Επιλύουμε τις συγκρούσεις στο επίπεδο 2 με την λύση τετραγωνικού χώρου χωρίς συγκρούσεις.

41 Παράδειγμα 41 S = {1,16,41,54,66,96} Επίπεδο 1: S 1 = {1, 41}, S 4 = {54}, S 6 = {16, 66, 96} Επίπεδο 2: πληροφορία για συνάρτηση αποθηκεύεται με τον κάδο O(1) χρόνος χειρότερης περίπτωσης. Χώρος;

42 Bloom Φίλτρα 42

43 43 Το Κύριο Σημείο  Όταν έχετε ένα σύνολο ή μία λίστα, και ο χώρος είναι θέμα (και δεν σας πειράζει να έχετε false positives) τότε το Bloom φίλτρο είναι μία καλή εναλλακτική.

44 44 Πρόβλημα  Δοθέντος ενός συνόλου S = {x 1,x 2,…,x n }, σχεδιάστε μία δομή για να απαντά ερωτήματα της μορφής “Είναι το y στο S?”  Η δομή θα πρέπει να είναι:  Γρήγορη (πιο γρήγορη από την αναζήτηση στο S ).  Μικρή (μικρότερη από μία ρητή αναπαράσταση).  Για να πετύχουμε τα παραπάνω επιτρέπουμε μία πιθανότητα λάθους:  False positives: y  S αλλά αναφέρουμε ότι y  S  False negatives: y  S αλλά αναφέρουμε ότι y  S

45 45 Bloom Φίλτρα Ξεκινάμε με έναν πίνακα με m bit, γεμάτος 0. Απεικονίζουμε κάθε στοιχείο x j στο S k φορές. Αν H i (x j ) = a, τότε B[a] = B B Για να ελέγξουμε αν το y είναι στο S, ελέγχουμε το B στα H i (y). Όλες οι k τιμές θα πρέπει να είναι B B Πιθανό να έχουμε false positive; όλες οι k τιμές είναι 1, αλλά το y δεν ανήκει στο S. n στοιχεία m = cn bits k συναρτήσεις κατακερματισμού

46 46 Παράδειγμα m/n = 8 Βέλτιστο k = 8 ln 2 = n στοιχεία m = cn bits k συναρτήσεις

47 Cuckoo Κατακερματισμός 47

48 48 Cuckoo Κατακερματισμός  Pagh και Rodler (2001)  Εξαιρετικά απλό:  2 πίνακες: T 1 και T 2  Μεγέθους r = (1+ε)n  2 συναρτήσεις: h 1 και h 2  Αναζήτηση:  Ελέγχουμε στο T 1 και T 2... T1T1 T2T2 h 1 (x) h 2 (x) x a c d b t y z x Που είναι το x ?

49 49 Cuckoo Κατακερματισμός: Ένθεση Για την ένθεση του x, καλούμε Insert(x, 1) Insert(x, i): 1. Τοποθετούμε το x στη θέση h i (x) του T i 2. Αν το T i [h i (x)] ήταν άδειο, επέστρεψε 3. Αν το T i [h i (x)] περιείχε το y, Insert(y, 3–i) Παράδειγμα:... T1T1 T2T2 h 1 (e) = h 1 (a) h 2 (y) = h 2 (a) e a c d b t y z x h 1 (y)

50 50 Cuckoo Κατακερματισμός: Ιδιότητες  Πολλές καλές ιδιότητες:  Η αναζήτηση και διαγραφή με 2 προσπελάσεις στη χειρότερη περίπτωση  Μπορεί να γίνει παράλληλα  Η ένθεση απαιτεί Ο(1) επιμερισμένο αναμενόμενο χρόνο  Καλή χρήση μνήμης  Όχι δυναμική δέσμευση μνήμης  Πολλές επεκτάσεις με καλύτερη χρήση μνήμης Mitzenmacher’s survey ESA 2009 Fotakis, Pagh, Sanders, Spirakis Dietzfelbinger, Weidling Panigrahy Lehman-Panigrahy


Κατέβασμα ppt "Κατακερματισμός. Το Πρόβλημα του Λεξικού – Λύσεις Διατήρηση με αποδοτικό τρόπο ενός συνόλου κλειδιών ώστε οι εξής 3 πράξεις να υποστηρίζονται αποδοτικά:"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google