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

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

  • Upload
    tyanne

  • View
    36

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

Page 2: Κατακερματισμός

2

Το Πρόβλημα του Λεξικού – Λύσεις

Διατήρηση με αποδοτικό τρόπο ενός συνόλου κλειδιών ώστε οι εξής 3 πράξεις να υποστηρίζονται αποδοτικά:

1. Εύρεση ενός στοιχείου στο σύνολο

2. Ένθεση ενός νέου στοιχείου στο σύνολο

3. Διαγραφή ενός υπάρχοντος στοιχείου από το σύνολο

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

Λύνουν και το πρόβλημα του προηγούμενου στοιχείου

(predecessor)

Page 3: Κατακερματισμός

3

Άμεση Διευθυνσιοδότηση

Υποθέσεις: Τα στοιχεία είναι ανά δύο διαφορετικά Κάθε στοιχείο προκύπτει από ένα σύμπαν U = {0, 1, . . . , u - 1}

Ιδέα: Αποθήκευση των στοιχείων σε πίνακα με βάση το κλειδί

• Αναπαράσταση:• Ένας πίνακας T[0 . . . u - 1]• Κάθε κάδος (θέση) του T αντιστοιχεί σε ένα κλειδί του U• Για ένα στοιχείο x, ένας δείκτης στο (ή το ίδιο το x) αποθηκεύεται στην

θέση T[x] • Αν δεν υπάρχουν στοιχεία x στο σύνολο S, το T[x] είναι άδειο, (NIL)

Page 4: Κατακερματισμός

4

Άμεση Διευθυνσιοδότηση

U(σύμπαν στοιχείων)

S(σύνολο κλειδιών)

0

u - 1

k3

k2

k1

k4

k1

k4 k2

k3

Πρόβλημα;

Page 5: Κατακερματισμός

5

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

Όταν το S είναι μικρότερο του U, ένας πίνακας κατακερματισμού απαιτεί λιγότερο χώρο από την άμεση διευθυνσιοδότηση.

Μείωση του χώρου σε |S| Ακόμα έχουμε O(1) χρόνος εύρεσης, αλλά στη μέση

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

Page 6: Κατακερματισμός

6

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

Ιδέα: Χρήση της h για υπολογισμό του κάδου

Αποθήκευση του στοιχείου στο κάδο h(k)

Μία συνάρτηση κατακερματισμού h μετατρέπει ένα στοιχείο

σε διεύθυνση στον πίνακα T[0…m-1]:

h : U → {0, 1, . . . , m – 1}

Page 7: Κατακερματισμός

7

Παράδειγμα: Πίνακες Κατακερματισμού

U(σύμπαν κλειδιών)

0

m - 1

h(k3)

h(k2) = h(k5)

h(k1)

h(k4)

k1

k4 k2

k5k3

S(σύνολο κλειδιών)

Πρόβλημα;

Page 8: Κατακερματισμός

8

Αποφυγή Συγκρούσεων

Εν τάχει: Αλυσίδες (chaining)

Ανοικτή διευθυνσιοδότηση (Open addressing) Linear probing

Cuckoo Hashing

Universal Hashing

Perfect Hashing

Page 9: Κατακερματισμός

9

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

Page 10: Κατακερματισμός

10

Κατακερματισμός με Αλυσίδες: Ανάλυση

Πόσο χρειάζεται για την εύρεση

ενός στοιχείου;

Χειρότερη περίπτωση:

Τα n στοιχεία πέφτουν στον ίδιο

κάδο

Χρόνος χειρότερης περίπτωσης (n),

συν το χρόνο για υπολογισμό της

συνάρτησης κατακερματισμού.

0

m - 1

T

αλυσίδα

Page 11: Κατακερματισμός

11

Κατακερματισμός με Αλυσίδες: Ανάλυση

Μέση Περίπτωση: Εξαρτάται από πόσο καλά κατανείμει η

συνάρτηση τα n στοιχεία στους m κάδους Υπόθεση: απλός ομοιόμορφος κατακερματισμός

Κάθε στοιχείo έχει ίδια πιθανότητα να πέσει σε οποιονδήποτε από τους m κάδους (η πιθανότητα σύγκρουσης Pr(h(x)=h(y)), είναι 1/m)

Μήκος λίστας:

T[j] = nj, j = 0, 1, . . . , m – 1 Πλήθος κλειδιών στον πίνακα:

n = n0 + n1 +· · · + nm-1

Μέσο μήκος nj:

E[nj] = α = n/m

n0 = 0

nm – 1 = 0

T

n2

n3

nj

nk

Page 12: Κατακερματισμός

12

Περίπτωση 1: Ανεπιτυχής Αναζήτηση

Θεώρημα

Μία ανεπιτυχής αναζήτηση απαιτεί Θ(1+α) αναμενόμενο χρόνο με βάση την

υπόθεση του απλού ομοιόμορφου κατακερματισμού.

Απόδειξη:

Ανεπιτυχής αναζήτηση για το στοιχείο k Απαιτείται αναζήτηση μέχρι το τέλος της λίστας T[h(k)]

Μέσο μήκος αλυσίδας:

E[nh(k)] = α = n/m

Μέσο πλήθος στοιχείων είναι ίσο με α

Συνολικός χρόνος: O(1) (υπολογισμός συνάρτησης ) + α Θ(1+α)

Page 13: Κατακερματισμός

13

Συναρτήσεις

Πότε μία συνάρτηση είναι καλή;(1) Εύκολα υπολογίσιμη

(2) Προσεγγίζει μία τυχαία συνάρτηση: για κάθε είσοδο κάθε έξοδο έχει ίδια πιθανότητα (απλός ομοιόμορφος κατακερματισμός)

Στην πράξη είναι δύσκολο να ικανοποιηθεί αυτή η υπόθεση. Δεν ξέρουμε συνήθως την κατανομή των δεδομένων

των στοιχείων

Page 14: Κατακερματισμός

14

Χαρακτηριστικά Καλών Συναρτήσεων

Ελαχιστοποίηση πιθανότητας να πέσουν δύο

κοντινά στοιχεία στον ίδιο κάδο

Οι λέξεις pt και pts θα πρέπει να απεικονίζονται

σε άλλους κάδους

Θέλουμε μία hash τιμή ανεξάρτητη των μοτίβων

που μπορεί να υπάρχουν στα στοιχεία του S.

Page 15: Κατακερματισμός

15

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

Στην πράξη: D.E. Knuth: The Art of Computer Programming Μέθοδος διαίρεσης Για αλφαριθμητικά της μορφής s = s0s1 . . . sk-1:

π.χ. B = 131 και w = μήκος λέξης (bits) (w = 32 ή w = 64).

msBsh wk

ii

i mod2mod)(1

0

Page 16: Κατακερματισμός

16

Η Μέθοδος της Διαίρεσης

Ιδέα: Απεικόνισε το στοιχείο k σε έναν από τους m

κάδους:

h(k) = k mod m Πλεονέκτημα:

Γρήγορο, μόνο μία πράξη Μειονέκτημα:

Μερικές τιμές του m είναι κακές Δυνάμεις του 2 Σύνθετοι αριθμοί

Page 17: Κατακερματισμός

17

Παράδειγμα

Αν m = 2p, τότε το 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

m97

m100

Page 18: Κατακερματισμός

18

Η Μέθοδος Πολλαπλασιασμού

Ιδέα:

Πολλαπλασιασμός k με μία σταθερά A, όπου 0 < A < 1 (ο

Knuth προτείνει το χρυσό λόγο φ)

Εξάγουμε το κλασματικό μέρος του kA

Πολλαπλασιάζουμε με m

h(k) = m (k A mod 1)

Μειονέκτημα: Πιο αργό από την μέθοδο διαίρεσης (;;;)

Πλεονέκτημα: Η τιμή του m δεν είναι κρίσιμη (τυπικά m=2p)

Page 19: Κατακερματισμός

19

Ανοικτή Διευθυνσιοδότηση

Αν (m > n) αποθήκευση κλειδιών στον πίνακα μόνο

Όχι λίστες

Ιδέα: Ένθεση: αν ένας κάδος είναι γεμάτος, δοκίμασε κάποιον

άλλον μέχρι να βρεθεί ένας άδειος

Αναζήτηση: ίδια ακολουθία ελέγχων

Διαγραφή: πιο δύσκολη

Ο χρόνος αναζήτησης εξαρτάται από την

ακολουθία ελέγχων!

Ένθεση 14

Page 20: Κατακερματισμός

20

Γενίκευση Συνάρτησης Κατακερματισμού:

Μία συνάρτηση με 2 παραμέτρους: (i) Στοιχείο, και (ii) Ακολουθία ελέγχου

h(k,p), p=0,1,...,m-1

Ακολουθία ελέγχων

<h(k,0), h(k,1), ..., h(k,m-1)>

Πρέπει να είναι αναδιάταξη <0,1,...,m-1> Υπάρχουν m! διαφορετικές αναδιατάξεις Οι καλές συναρτήσεις θα έπρεπε να

παράγουν όλες τις m! αναδιατάξεις

Ένθεση 14

<1, 5, 9>

Page 21: Κατακερματισμός

21

Κοινές Μέθοδοι Ανοικτής Διευθυνσιοδότησης

Γραμμικός Έλεγχος Τετραγωνικός Έλεγχος Διπλός Κατακερματισμός κ.α.

Page 22: Κατακερματισμός

22

Γραμμικός Έλεγχος: Ένθεση

Ιδέα: όταν υπάρχει σύγκρουση, έλεγξε την επόμενη διαθέσιμη θέση στον πίνακα (έλεγχος)

h(k,i) = (h1(k) + i) mod m

i = 0,1,2,... Πρώτος κάδος: h1(k)

Δεύτερος κάδος: h1(k) + 1

Τρίτος κάδος: h1(k)+2, κοκ.

Ακολουθία ελέγχων: < h1(k), h1(k)+1 , h1(k)+2 , ....>Επιστρέφει στην αρχή

Page 23: Κατακερματισμός

23

Γραμμικός Έλεγχος: Αναζήτηση

Τρεις περιπτώσεις:(1) Η θέση στον πίνακα περιέχει το

στοιχείο που αναζητάμε

(2) Η θέση είναι άδεια

(3) Η θέση περιέχει ένα διαφορετικό στοιχείο

Περίπτωση (2): έλεγξε τα επόμενα κελιά μέχρι να φτάσουμε σε (1) ή σε (3)

0

m - 1

h(k3)

h(k2) = h(k5)

h(k1)

h(k4)

Page 24: Κατακερματισμός

24

Γραμμικός Έλεγχος: Διαγραφή

Πρόβλημα: Δεν μπορούμε να κάνουμε το κελί άδειο Αδύνατο να βρούμε τα κλειδιά που

εντέθηκαν αφού ο κάδος αυτός γέμισε. Λύση:

Μάρκαρε τον κάδο ως διαγραμμένο. Ο διαγραμμένος κάδος μπορεί να

χρησιμοποιηθεί για ένθεση Η αναζήτηση εκτελείται κανονικά

0

m - 1

Page 25: Κατακερματισμός

25

Γραμμικός Έλεγχος: Κόστος

Ανεπιτυχής αναζήτηση:

Επιτυχής αναζήτηση:

1

1

a1

1ln

1

Page 26: Κατακερματισμός

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

Τέλειος Κατακερματισμός

Bloom Φίλτρα

Ας Προχωρήσουμε πιο Βαθιά

Page 27: Κατακερματισμός

27

Καθολικός Κατακερματισμός (Universal Hashing)

Στην πράξη, τα στοιχεία δεν είναι ομοιόμορφα

κατανεμημένα

Κάθε καθορισμένη συνάρτηση μπορεί να δώσει Θ(n) χρόνο

Στόχος: Συναρτήσεις που παράγουν τυχαίες διευθύνσεις στον πίνακα ανεξάρτητα από τα κλειδιά

Ιδέα: Επέλεξε μία συνάρτηση τυχαία, από μία προκαθορισμένη

οικογένεια συναρτήσεων

Page 28: Κατακερματισμός

28

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

(στην αρχή της εκτέλεσης)

h1( )h2( )…

hk( )

Σύνολο συναρτήσεων κατακερματισμού

Τυχαία επιλογή συνάρτησης

hi( )

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

Page 29: Κατακερματισμός

29

Καθολικές Συναρτήσεις Κατακερματισμού

H={ h(k): U {0,1,..,m-1} }

Η H είναι καθολική αν για κάθε x y:

m

HyhxhHh :

H

m

H

Page 30: Κατακερματισμός

30

Γιατί αυτή η ιδιότητα είναι χρήσιμη;

Ποια είναι η πιθανότητα σύγκρουσης σε αυτή την περίπτωση;

Είναι ίση με την πιθανότητα επιλογής μία συνάρτησης h H έτσι ώστε x y h(x) = h(y) που είναι ίση με:

mH

mHyhxh

1/Pr

Page 31: Κατακερματισμός

31

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

Με τον καθολικό κατακερματισμό η πιθανότητα

σύγκρουσης μεταξύ διαφορετικών στοιχείων k και l

δεν είναι παραπάνω από 1/m αν οι θέσεις h(k) και

h(l) επιλέχθηκαν τυχαία και ανεξάρτητα από το

σύνολο {0, 1, …, m – 1}

Page 32: Κατακερματισμός

32

Σχεδιάζοντας μία Οικογένεια Καθολικών Συναρτήσεων

Επέλεξε έναν πρώτο αριθμό p αρκετά μεγάλο ώστε κάθε στοιχείο k να

είναι στο διάστημα [0 ... p – 1]

Zp = {0, 1, …, p - 1} και Zp* = {1, …, p - 1}

Ορίζουμε τη συνάρτηση

ha,b(k) = ((ak + b) mod p) mod m,

a Zp* και b Zp

Η οικογένεια όλων αυτών των συναρτήσεων είναι

Hp,m = {ha,b: a Zp* και b Zp}

a , b: επιλέγονται τυχαία στην αρχή της εκτέλεσης

Page 33: Κατακερματισμός

33

Παράδειγμα

p = 17, m = 6

ha,b(k) = ((ak + b) mod p) mod m

h3,4(8) = ((38 + 4) mod 17) mod 6

= (28 mod 17) mod 6

= 11 mod 6

= 5

Page 34: Κατακερματισμός

34

Άλλη Καθολική Οικογένεια Συναρτήσεων

Έστω m πρώτος. Αναπαριστούμε το στοιχείο k με r + 1 ψηφία σε βάση m. Έστω k = k⟨ 0, k1, …, kr⟩, όπου 0 ≤ ki < m.

Επιλέγουμε a = a⟨ 0, a1, …, ar⟩, όπου κάθε ai επιλέχθηκε τυχαία από το σύνολο {0, 1, …, m–1}.

mkakhr

iiia mod

0

Page 35: Κατακερματισμός

35

Πλεονεκτήματα Καθολικού Κατακερματισμού

Δίνει καλά αποτελέσματα στη μέση περίπτωση

ανεξαρτήτως των στοιχείων που αποθηκεύονται

Εγγυάται ότι καμία είσοδος δεν θα προκαλεί

συμπεριφορά χειρότερης περίπτωσης

Κακή απόδοση έχουμε μόνο όταν η τυχαία επιλογή

επιστρέφει μία κακή συνάρτηση κατακερματισμού

(μικρή πιθανότητα)

Page 36: Κατακερματισμός

36

Τέλειος Κατακερματισμός

Οι λύσεις που είδαμε μέχρι τώρα λύνουν το πρόβλημα σε O(n) χώρο αλλά με O(1) αναμενόμενο χρόνο για αναζήτηση.

Μπορούμε καλύτερα;

Μία τέλεια συνάρτηση κατακερματισμού για ένα σύνολο S είναι μία συνάρτηση χωρίς συγκρούσεις.

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

Page 37: Κατακερματισμός

37

Στατικό Λεξικό

Συνδυασμός δύο λύσεων για στατικό κατακερματισμό με χρήση καθολικού κατακερματισμού: Μία λύση που χρησιμοποιεί πολύ χώρο χωρίς συγκρούσεις. Μία λύση με λίγο χώρο αλλά πολλές συγκρούσεις.

Λύση δύο επιπέδων: Χρήση λίγου χώρου στο επίπεδο 1 Επίλυση συγκρούσεων στο επίπεδο 1 με χρήση λύσης χωρίς

συγκρούσεις στο επίπεδο 2 lookup(x): αναζήτηση στο επίπεδο 1 για την εύρεση του

σωστού επιπέδου 2. Αναζήτηση μετά στο επίπεδο 2.

Page 38: Κατακερματισμός

38

Όταν Χρησιμοποιούμε Πολύ Χώρο

Χρήση μίας καθολικής συνάρτησης για απεικόνιση σε πίνακα μεγέθους N2. Ποιο είναι το αναμενόμενο πλήθος συγκρούσεων;

Αποδεικνύεται ότι είναι ½.

Με πιθανότητα ½ παίρνουμε μία τέλεια συνάρτηση κατακερματισμού που υποστηρίζει αναζητήσεις σε O(1) χρόνο χειρότερης περίπτωσης αν ο χώρος είναι O(N2).

Page 39: Κατακερματισμός

39

Όταν Χρησιμοποιούμε Λίγο Χώρο

Χρήση μίας καθολικής συνάρτησης για απεικόνιση σε πίνακα μεγέθους N. Ποιο είναι το αναμενόμενο πλήθος συγκρούσεων;

Είναι ίσο με ½Ν.

Page 40: Κατακερματισμός

40

Λύση 2 Επιπέδων

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

συγκρούσεις. Επιλύουμε τις συγκρούσεις στο επίπεδο 2 με την

λύση τετραγωνικού χώρου χωρίς συγκρούσεις.

Page 41: Κατακερματισμός

41

Παράδειγμα

S = {1,16,41,54,66,96}

Επίπεδο 1: S1 = {1, 41}, S4 = {54}, S6 = {16, 66, 96}

Επίπεδο 2: πληροφορία για συνάρτηση αποθηκεύεται με τον κάδο

O(1) χρόνος χειρότερης περίπτωσης. Χώρος;

Page 42: Κατακερματισμός

42 Bloom Φίλτρα

Page 43: Κατακερματισμός

43

Το Κύριο Σημείο

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

Page 44: Κατακερματισμός

44

Πρόβλημα

Δοθέντος ενός συνόλου S = {x1,x2,…,xn}, σχεδιάστε μία δομή για να απαντά ερωτήματα της μορφής “Είναι το y στο S?”

Η δομή θα πρέπει να είναι: Γρήγορη (πιο γρήγορη από την αναζήτηση στο S). Μικρή (μικρότερη από μία ρητή αναπαράσταση).

Για να πετύχουμε τα παραπάνω επιτρέπουμε μία πιθανότητα λάθους: False positives: y S αλλά αναφέρουμε ότι y S False negatives: y S αλλά αναφέρουμε ότι y S

Page 45: Κατακερματισμός

45

Bloom ΦίλτραΞεκινάμε με έναν πίνακα με m bit, γεμάτος 0.

Απεικονίζουμε κάθε στοιχείο xj στο S k φορές. Αν Hi(xj) = a, τότε B[a] = 1.

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0B

0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 0B

Για να ελέγξουμε αν το y είναι στο S, ελέγχουμε το B στα Hi(y). Όλες οι k τιμές θα πρέπει να είναι 1.

0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 0B

0 1 0 0 1 0 1 0 0 1 1 1 0 1 1 0BΠιθανό να έχουμε false positive; όλες οι k τιμές είναι 1, αλλά το y δεν ανήκει στο S.

n στοιχεία m = cn bits k συναρτήσεις κατακερματισμού

Page 46: Κατακερματισμός

46

Παράδειγμα

0

0.01

0.02

0.03

0.04

0.05

0.06

0.07

0.08

0.09

0.1

0 1 2 3 4 5 6 7 8 9 10

Fal

se p

osit

ive

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

m/n = 8Βέλτιστο k = 8 ln 2 = 5.45...

n στοιχεία m = cn bits k συναρτήσεις

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

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

Page 48: Κατακερματισμός

48

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

Pagh και Rodler (2001) Εξαιρετικά απλό:

2 πίνακες: T1 και T2 Μεγέθους r = (1+ε)n

2 συναρτήσεις: h1 και h2

Αναζήτηση: Ελέγχουμε στο T1 και T2

. . .

T1

. . .

T2

h1(x)

h2(x)

xa

c

d

b

ty

z

xΠου είναι το x?

Page 49: Κατακερματισμός

49

Cuckoo Κατακερματισμός: Ένθεση

Για την ένθεση του x, καλούμε Insert(x, 1)

Insert(x, i):

1. Τοποθετούμε το x στη θέση hi(x) του Ti

2. Αν το Ti[hi(x)] ήταν άδειο, επέστρεψε

3. Αν το Ti[hi(x)] περιείχε το y, Insert(y, 3–i)

Παράδειγμα:...

T1

...

T2

h1(e) = h1(a)

h2(y) = h2(a)

e

a

c

d

b

ty

z

x

h1(y)

Page 50: Κατακερματισμός

50

Cuckoo Κατακερματισμός: Ιδιότητες

Πολλές καλές ιδιότητες: Η αναζήτηση και διαγραφή με 2 προσπελάσεις στη

χειρότερη περίπτωση Μπορεί να γίνει παράλληλα

Η ένθεση απαιτεί Ο(1) επιμερισμένο αναμενόμενο χρόνο Καλή χρήση μνήμης Όχι δυναμική δέσμευση μνήμης Πολλές επεκτάσεις με καλύτερη χρήση μνήμης

Mitzenmacher’s survey ESA 2009

Fotakis, Pagh, Sanders, Spirakis