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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Advanced Data Indexing

Advanced Data Indexing

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

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

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

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

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

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

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

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

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

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

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 5 ΑΚΟΛΟΥΘΙΕΣ ΑΡΙΘΜΗΤΙΚΗ ΓΕΩΜΕΤΡΙΚΗ ΠΡΟΟΔΟΣ

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

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

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

Θεωρητικό Μέρος. 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); } }

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

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

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

ΗΥ240: Δομές Δεδομένων Εαρινό Εξάμηνο Ακαδημαϊκό Έτος 2018 Διδάσκουσα: Παναγιώτα Φατούρου Προγραμματιστική Εργασία - 2o Μέρος

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Κατακερµατισµός Κεφάλαιο 14. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

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

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

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

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

Άσκηση 1. με κόκκινο χρώμα σημειώνονται οι κρίσιμοι κόμβοι

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

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

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

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

Προγραμματιστικές Τεχνικές

Προγραμματιστικές Τεχνικές

Ενδεικτικές Ερωτήσεις Θεωρίας

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

Αριθμητική εύρεση ριζών μη γραμμικών εξισώσεων

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

Κάθε στοιχείο που γίνεται αντιληπτό με μία από τις πέντε αισθήσεις μας

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

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

a n = 3 n a n+1 = 3 a n, a 0 = 1

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

Βασίλειος Μαχαιράς Πολιτικός Μηχανικός Ph.D.

Αλγόριθμοι και Πολυπλοκότητα

Πληροφορική 2. Αλγόριθμοι

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

ΑΡΙΘΜΗΤΙΚΗ ΠΡΟΟΔΟΣ. Σύμφωνα με τα παραπάνω, για μια αριθμητική πρόοδο που έχει πρώτο όρο τον ...

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

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

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

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

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 7: Χωρικοί Χρονικοί Συμβιβασμοί. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

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

Δομημένος Προγραμματισμός (ΤΛ1006)

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

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

Transcript:

Δομές Δεδομένων Κατακερματισμός Πληροφορικής 1

Πρόβλημα Insert, Search και DELETE εγγραφής Σε σταθερό χρόνο Σε πίνακα εγγραφών όπου το πεδίο τιμών στα κλειδιά >> Μέγεθος Πίνακα (M) το πλήθος των εγγραφών < Μέγεθος Πίνακα (M) Πληροφορικής 2

Απλή Περίπτωση Insert, Search και Delete το πολύ 10 εγγραφών σε πίνακα (StudNo, Name, Telno) Κλειδί = Staff Number Τιμές κλειδιού 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Ποια δομή να χρησιμοποιήσουμε? (δενδρικές δομές κ.τ.λ.) Μπορούμε και καλύτερα... Λύση: χρησιμοποιώ πίνακα με κάθε εγγραφή να καταχωρείται στη θέση = τιμή κλειδιού Πληροφορικής 3

Παράδειγμα Stud No Name Tel No 0 0 J Bloggs 23456 1 1 A Sque 45678 2 2 S Duff 12345 3 3 R Duff 34567 4 4 A Hillis 45671 5 5 E Brown 45679 6 6 D Hill 12349 7 7 B Carter 22334 8 8 A Self 12348 9 9 D Last 56789 Position Key Position = Key POSITION = KEY Πλεονέκτημα Σταθερός χρόνος Μειονέκτημα Χρειάζομαι μέγεθος πίνακα=max(κλειδί) Πρόκληση Τι κάνουμε αν τα κλειδιά είναι 1, 2, 3, 4, 5, 6, 7, 8, 999 Πληροφορικής 4

Παράδειγμα Stud No Name Tel No 0 0 J Bloggs 23456 1 1 A Sque 45678 2 2 S Duff 12345 3 3 R Duff 34567 4 4 A Hillis 45671 5 5 E Brown 45679 6 6 D Hill 12349 7 7 B Carter 22334 8 8 A Self 12348.... 999 999 D Last 56789 Position Key Position = Key POSITION = KEY Πλεονέκτημα Σταθερός χρόνος Μειονέκτημα Σπατάλη χώρου Πώς σώζουμε χώρο? Πληροφορικής 5

Κατακερματισμός-Γενικά Έχω: Κάθε εγγραφή έχει μοναδικό κλειδί Σώζω τις εγγραφές σε πίνακα μεγέθους (TableSize TS) Από 0 - (TS -1) Συνάρτηση κατακερματισμού (hash function) h h(key) = θέση όπου μπαίνει η εγγραφή στον πίνακα Πρόβλημα: Συγκρούσεις (όταν δύο εγγραφές μπαίνουν στην ίδια θέση από τη συνάρτηση κατακερματισμού (hush function) Πληροφορικής 6

Συναρτήσεις κατακερματισμού Η συνάρτηση κατακερματισμού μετασχηματίζει την τιμή του κλειδιού σε τιμή διεύθυνσης, έχει σκοπό την αντιστοίχηση του πεδίου τιμών των κλειδιών στο πεδίο τιμών διευθύνσεων κατά τυχαίο τρόπο. Καλή συνάρτηση είναι εκείνη που διασπείρει τις εγγραφές σε όλη την έκταση του πίνακα/αρχείου. Πληροφορικής 7

Απλός Κατακερματισμός Συνάρτηση Κατακερματισμού h=(key) mod 10 key h 81 64 36 49 Στο παράδειγμα δε συμβαίνουν συγκρούσεις (γενικά συμβαίνουν) Stud No Name Tel No 0 1 81 John 12345 2 3 4 64 Sally 23456 5 6 36 Mary 34567 7 8 9 49 Philimon 87654 Position KEY Πληροφορικής 8

Συναρτήσεις Κατακερματισμού Hash Functions 2 προβλήματα 1) Συγκρούσεις και πώς επιλύονται 2) Οι τιμές κλειδιού μπορεί να είναι αλφαριθμητικά Key = Χρήστος Πώς αντιστοιχούμε αριθμητική τιμή στο κλειδί Χρήστος? Πόσο χρόνο παίρνει για να υπολογιστεί η συνάρτηση κατακερματισμού? Πληροφορικής 9

Επίλυση Συγκρούσεων Μέθοδοι που θα εξετάσουμε: Ανοιχτής Διευθυνσιοδότησης Γραμμική Αναζήτηση Τετραγωνική Αναζήτηση Διπλός κατακερματισμός Κατακερματισμός με αλυσίδες Ανακατακερματισμός Πληροφορικής 10

Κατακερματισμός με Αλυσίδες Ο πίνακας κατακερματισμού δε σώζει τα στοιχεία αλλά την αρχή από λίστα που περιέχει τα στοιχεία. 0 12 36 6 Τα στοιχεία στις λίστες μπορεί να σώζονται ταξινομημένα ή αταξινόμητα 1 2 3 14 Παράδειγμα h(x)=x mod 6 Insert: 6, 14, 29, 36, 12, 17 4 5 17 29 Πληροφορικής 11

Κατακερματισμός με Αλυσίδες Αν Μ το μέγεθος του πίνακα και Ν το πλήθος των στοιχείων τότε το μέσο μήκος κάθε αλυσίδας είναι α=ν/μ (όπου α γνωστός και ως παράγοντας φόρτωσης) Μια αναζήτηση (επιτυχημένη ή αποτυχημένη) κοστίζει Θ(1+α) (εύκολα για την περίπτωση αποτυχίας) Για την επιτυχημένη έχω: Cost=1/N (1+(i-1)/M) = 1+ 1/MN (i-1)=.=1+a/2-1/2m 1 i N 1 i N Μπορεί δε να δειχτεί ότι αν α<=1 τότε το μέσο μήκος αλυσίδας είναι Ο(logn/loglogn) Πληροφορικής 12

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

Παράδειγμα 0 1 2 3 4 5 6 7 67 34 46 114 26 17 hsize = 11 8 9 10 85 Εισαγωγή: 114 34 85 26 46 67 17 Πληροφορικής 14

Ανοιχτή Διευθυνσιοδότηση Γενική εξίσωση: hash(x) = ( h(x) + f(i) I=0, 1, 2, ) mod M h(x) είναι η συνάρτηση κατακερματισμού f(i) χρησιμοποιείται στην επίλυση συγκρούσεων Διάφορες επιλογές για την f(i) M μέγεθος πίνακα Πληροφορικής 15

Γραμμική Αναζήτηση hash(key) = ( h(key) + f(i) i=0, 1, 2, 3 ) mod M h(key) = key mod 6 f(i) = i 0 20 1 2 2 8 14 20 3 8 14 20 4 14 20 5 5 20 Πληροφορικής 16

Γραμμική Αναζήτηση - Ανάλυση Ένθεση - Κάνουμε τις δοκιμές μέχρι να ξαναγυρίσουμε στη θέση που έγινε η πρώτη δοκιμή (τότε ο πίνακας είναι γεμάτος) Διαγραφή (πρόβλημα) - Βρίσκουμε με γραμμικές δοκιμές την τιμή και τη συγκεκριμένη θέση τη μαρκάρουμε σαν από πριν γεμάτη. Αναζήτηση - Δοκιμάζουμε γραμμικά (αν διαβάζουμε στοιχεία μαρκαρισμένα σαν πριν γεμάτα συνεχίζουμε). Όταν βρούμε θέση που ποτέ δεν είχε γεμίσει (κενή) τότε μπορούμε να σταματήσουμε. Πληροφορικής 17

Γραμμική Αναζήτηση - Ανάλυση H αποτυχημένη αναζήτηση κοστίζει: 1/2 (1 + 1/(1-a) 2 ) Η επιτυχημένη αναζήτηση: 1/2 (1 + 1/(1-a)) Όσο μικραίνει ο παράγων φόρτου τόσο μικραίνει το πλήθος των αναζητήσεων. Για α=0.5 καλές τιμές Πρόβλημα: Αν το α->1 τότε έχουμε clustering πρόβλημα (ή πρόβλημα συστοιχίας). Η απόδοση πέφτει. Πληροφορικής 18

Γραμμική Αναζήτηση Έστω ένας πίνακας κατακερματισμού (hash table) A που χρησιμοποιεί γραμμική αναζήτηση (linear probing) find(k) Ξεκινάμε με το κελί h(k) Ελέγχουμε διαδοχικές θέσεις μέχρι να συμβεί κάτι από τα παρακάτω Βρέθηκε στοιχείο με κλειδί k, ή Βρέθηκε άδειο κελί, ή Ελέγχθηκαν ανεπιτυχώς N κελιά Algorithm find(k) i h(k) p 0 repeat c A[i] if c return Position(null) else if c.key () k return Position(c) else i (i 1) mod N p p 1 until p N return Position(null) 19

Ενημέρωση για γραμμική αναζήτηση (Linear Probing) Για τον χειρισμό εισαγωγών και διαγραφών, παρουσιάζουμε ένα ειδικό αντικείμενο, που ονομάζεται AVAILABLE, και αντικαθιστά διαγραμμένα στοιχεία removeelement(k) Αναζητούμε στοιχείο με κλειδί k Αν βρεθεί στοιχείο (k, o), το αντικαθιστούμε με το ειδικό στοιχείο AVAILABLE και επιστρέφουμε την θέση του στοιχείου αυτού Αλλιώς, επιστρέφουμε null θέση insertitem(k, o) Exception αν ο πίνακας είναι γεμάτος Ξεκινάμε στο κελί h(k) Ελέγχουμε διαδοχικά κελιά μέχρι να συμβεί ένα από τα παρακάτω Βρέθηκε κελί i που είτε είναι άδειο ή περιέχει AVAILABLE, ή Ελέγχθηκαν ανεπιτυχώς N Αποθηκεύουμε το στοιχείο (k, o) στο κελί i 20

Γραμμική Αναζήτηση Open addressing: του συγκρουόμενο στοιχείο τοποθετείται σε διαφορετικό κελί του πίνακα Η γραμμική αναζήτηση χειρίζεται συγκρούσεις τοποθετώντας το συγκρουόμενο στοιχείο στο επόμενο διαθέσιμο κελί του πίνακα Κάθε κελί που εξετάζεται ονομάζεται 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 21

Τετραγωνική Αναζήτηση hash(key) = ( h (key) + f(i) i=0,1, 2, 3. ) mod Μ h(key) = key mod 16 f(i) = i 2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 18 18 34 34 34 66 66 66 66 130 130 130 13 0 Πληροφορικής 22

Τετραγωνική Δοκιμή Έχει ως σκοπό τη γρήγορη απομάκρυνση των κλειδιών από την αρχική περιοχή σύγκρουσης f(i) = i 2 Όταν δύο στοιχεία συγκρούονται Η επόμενη θέση που δοκιμάζουμε είναι σχετικά μακριά: i 0, 1, 2, 3, 4, 5 i 2 0, 1, 4, 9, 16, 25 Όπου i ο αύξων αριθμός της αναζήτησης Αλλά οι ίδιες τιμές δοκιμάζονται πάντα όταν συμβεί σύγκρουση στην ίδια θέση Το clustering πρόβλημα γίνεται πιο μικρό αλλά εξακολουθεί να υφίσταται ( Secondary clustering ) Πληροφορικής 23

Υλοποίηση Τετραγωνική δοκιμή :hash(key)=(h(key)+i 2 )modμ H i = H 0 + i 2 (mod Μ) H i-1 = H i + (i-1) 2 (mod Μ) Προκειμένου να μην υπολογισθεί το τετράγωνο που είναι χρονοβόρα πράξη, μπορεί να υπολογισθεί, αφαιρώντας: H i = H i-1 + 2i-1 (mod Μ) Υλοποιείται σαν: hash = hash + 2i +1; If hash >= tablesize then hash=hash - tablesize; Πολύ πιο γρήγορη από τη χρήση πολλαπλασιασμού και υπολοίπου Πληροφορικής 24

Θεώρημα Όταν Μ είναι πρώτος αριθμός και το πλήθος των κενών θέσεων υπερβαίνει τη μισή χωρητικότητα τότε πάντα είναι δυνατό να βρεθεί κενή θέση. Αρκεί να δείξουμε ότι τα Μ/2 μέλη της ακολουθίας hash(key)=(h(key)+i 2 )modμ είναι διακριτά. Έστω ότι υπάρχουν δύο μέλη i, j <=M/2 που είναι ίδια. Τότε έχω: (h(x)+i^2)modm=(h(x)+j^2)modm => (i^2)modm=(j^2)modm => (i^2-j^2)modm=0modm => (i-j)(i+j)modm=0 Αφού το Μ είναι πρώτος ή το i-j ή το i+j διαιρείται με το Μ, άτοπο αφού ισχύει i, j <=M/2 Πληροφορικής 25

Διπλός Κατακερματισμός Χρησιμοποιεί δεύτερη συνάρτηση κατακερματισμού για να εντοπίσει την επόμενη διαθέσιμη θέση hash(key) = ( h (key) + f(i) i=0, 1, 2, 3 ) mod Μ h(key) = key mod 10 f(i) = i*hash 2 (key) Δοκιμάζουμε για κενές θέσεις στα: hash(key) hash(key) + hash 2 (key) hash(key) + 2 * hash 2 (key) hash(key) + 3 * hash 2 (key) κλπ. Πληροφορικής 26

Διπλός Κατακερματισμός hash 2 (key) δεν πρέπει να είναι 0 Μερικές επιλογές: hash 2 (key) = R - (key mod R) hash 2 (key) = 1 + (key mod R) όπου R πρώτος <= Μ (Μέγεθος Πίνακα) Πληροφορικής 27

Διπλός Κατακερματισμός hash(key) = ( h (key) + f(i) i = 0, 1, 2, 3 ) mod Μ h(key) = key mod 16 f(i) = i*(1+key(mod7)) Εισαγωγή: 2, 18, 34, 66, 130 Με μπλε έντονο το αποτέλεσμα της τετραγωνικής αναζήτησης (το 130 δεν μπορεί να μπει) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 18 34 66 2 18 18 34 34 66 66 130 130 130 Πληροφορικής 28

Διπλός Κατακερματισμός Πλεονεκτήματα Διαφορετικές συγκρούσεις ψάχνουν για ελεύθερο κελί σε διαφορετικά σημεία Στο παράδειγμα: μετά την πρώτη σύγκρουση τα κλειδιά κατανέμονται στις θέσεις 2+1 και 2+7+1. Αν κι εκεί δημιουργούνται συγκρούσεις δοκιμάζονται οι θέσεις 2+1...2+2*7+1 κλπ.. Μειονεκτήματα Περισσότερος χρόνος για υπολογισμό της f(i) Πληροφορικής 29

Διπλός Κατακερματισμός Ο διπλός κατακερματισμός (Double hashing) χρησιμοποιεί μια δεύτερη hash function h2(k) και χειρίζεται συγκρούσεις τοποθετώντας ένα στοιχείο στο πρώτο διαθέσιμο κελί της σειράς (i j h2(k)) mod N for j 0, 1,, N 1 Η δευτερεύουσα hash function h2(k) δεν μπορεί να έχει μηδενικές τιμές Το μέγεθος N του πίνακα πρέπει να είναι πρώτος αριθμός Κοινή επιλογή compression map για την δευτερεύουσα hash function: h 2 (k) q k mod q όπου q N q είναι πρώτος αριθμός Πιθανές τιμές για το h 2 (k) είναι 1, 2,, q 30

Παράδειγμα Διπλού Κατακερματισμού Έστω ένας πίνακας κατακερματισμού (hash table) που περιέχει ακέραια κλειδιά και χειρίζεται τις συγκρούσεις με double hashing N 13 h1(k) k mod 13 h2(k) 7 k mod 7 Εισαγωγή κλειδιών 18, 41, 22, 44, 59, 32, 31, 73, με αυτή τη σειρά k h1(k ) h2(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 31

Επανακατακερματισμός Ξεκίνα από ένα πίνακα μεγέθους Μ 0 Όταν γεμίσει κατά το ήμισυ α>=1/2 Διπλασίασε το μέγεθος (ή κάντο = με τον πρώτο αριθμό > 2*Μ 0 Για κάθε εγγραφή του αρχικού πίνακα υπολόγισε το που θα μπει στον καινούργιο πίνακα Προαιρετικά: Όταν α<=1/4 υποδιπλασίασε τον πίνακα για καλύτερη εκμετάλλευση χώρου Στόχος του σχήματος: να κρατιέται το α κοντά στην τιμή 1/2 Πληροφορικής 32

Συνάρτηση Κατακερματισμού για Αλφαριθμητικά (1) Μέθοδος 1 μη αποδοτική Πρόσθεσε τις ASCII τιμές των χαρακτήρων Το κλειδί C1 μπορεί να μετατραπεί σε 6749, όπου 67 είναι ο ASCII κώδικας του C και 49 ο ASCII κώδικας του 1 unsigned int hash( const string & key, int tablesize) { unsigned int hashval = 0; for( int i = 0; i < key.length( ); i++) hashval += key[ i ]; return hashval % tablesize; } Πληροφορικής 33

Συνάρτηση Κατακερματισμού για Αλφαριθμητικά (1) Ανάλυση Υποθέστε κλειδί 8 χαρακτήρων Τιμή χαρακτήρα 0 -- 127 Min τιμή κατακερματισμού = 8 * 0 = 0 Max τιμή = 8 * 127 = 1026 Πολύ κακή διαμέριση αν το μέγεθος πίνακα είναι 10007 Μόνο το 1026/10007 = 10% του πίνακα χρησιμοποιείται Πληροφορικής 34

Μέθοδος (2) Method 2 -- καλύτερη Για τους πρώτους 3 χαρακτήρες πάρε το άθροισμα SUM (ch(i) * 27 i ) Μόνο κεφαλαία + κενό = 27 χαρακτήρες unsigned int hash( const string & key, int tablesize) { return (key[ 0 ] + 27 * key[ 1] + 729 * key[ 2 ] ) % tablesize; } Πληροφορικής 35

Μέθοδος (2) 25 είναι οι επιτρεπόμενοι χαρακτήρες Min value = 0 + 27 * 0 + 729 * 0 = 0 Max value = 27 + 27 * 27 + 729 *27 = 20,439 > 10,007 Φαντάζει καλό αλλά Η κατανομή χαρακτήρων στα Αγγλικά δεν είναι τυχαία 26 * 26 * 26 = 17,576 διαφορετικοί συνδυασμοί 3 χαρακτήρων μόνο 2851 χρησιμοποιούνται Αν δεν έχουμε συγκρούσεις 2851/10,007 = 28% του πίνακα χρησιμοποιείται Πληροφορικής 36

Μέθοδος(3) Χρησιμοποίησε όλους τους χαρακτήρες Χρησιμοποίησε όλο το σετ ASCII (128 chars) key [0] + key [1] * 128 + key [2] * 128 2 + key[keysize-1]*128 ( Keysize-1 ) Πληροφορικής 37

Μέθοδος (3) Χρήση κανόνα Horner για υπολογισμό πολυώνυμου Με έξυπνη χρήση αγκύλων μειώνουμε τις πράξεις h k = k 2 * 128 * 128 + k 1 * 128 + k 0 3* & 2+ h k = ((k 2 ) * 128 + k 1 ) * 128 + k 0 2* & 2+ h k = k 3 * 128*128*128 + k 2 *128*128+128*k 1 +k 0 6* & 3+ h k = ( ( (k3 * 128) + k 2 ) * 128 + k 1 ) * 128 + k 0 3* & 3+ Πληροφορικής 38

Μέθοδος 3 unsigned int hash ( const string & key, int tablesize) { unsigned hashval = 0; for( int I=0; I<key.length( ); I++) hashval=(128*hashval + key[ I ]) % tablesize; } return hashval; Πληροφορικής 39

Μέθοδος 3 Καλή υλοποίηση Χρήση κανόνα Horner Μη βέλτιστη Mod (%) χρησιμοποιείται σε κάθε βήμα Πληροφορικής 40

Μέθοδος 4 Ταχύτερη υλοποίηση Μόνο μια πράξη mod (στο τέλος) Πολλαπλασιασμός με το 128 μπορεί να γίνει πολύ γρήγορα (με 8 shifts) Μπορεί να οδηγήσει σε υπερχείλιση overflow Πληροφορικής 41

Μέθοδος 4 unsigned int hash ( const string & key, int tablesize) { unsigned hashval = 0; for( int I=0; I<key.length( ); I++) hashval=128 * hashval + key[ I ]; } return hashval % tablesize; Πληροφορικής 42

Παράδειγμα Εισάγονται τα ακόλουθα στοιχεία διαδοχικά με την ακόλουθη σειρά {4371, 1323, 6173, 4199, 4344, 9679, 1989} σε ένα πίνακα κατακερµατισµού µεγέθους 10. Ο συγκεκριμένος πίνακας χρησιμοποιεί την συνάρτηση κατακερµατισµού h(x) = x mod 10. Να δείξετε την τελική μορφή που θα πάρει ο πίνακας στις ακόλουθες περιπτώσεις κατακερματισμού: (α)κατακερματισμός με ξεχωριστές αλυσίδες (β)κατακερματισμός με γραμμική αναζήτηση (γ) κατακερματισμός με τετραγωνική αναζήτηση. (δ) διπλού κατακερματισμού Πληροφορικής 43

Παράδειγμα Εισάγονται τα ακόλουθα στοιχεία διαδοχικά με την ακόλουθη σειρά { 6, 9, 14, 17, 5, 7,16, 20, 18, 19, 4, 11} σε ένα πίνακα κατακερµατισµού µεγέθους 13. Να καθορίσετε την συνάρτηση κατακερματισμού. Να δείξετε την τελική μορφή που θα πάρει ο πίνακας στις ακόλουθες περιπτώσεις κατακερματισμού: (α) κατακερματισμός με γραμμική αναζήτηση (β) κατακερματισμός με τετραγωνική αναζήτηση. (γ) διπλού κατακερματισμού με h2(x)=1+x mod3 Πληροφορικής 44

Κατακερματισμός με γραμμική αναζήτηση

κατακερματισμός με τετραγωνική αναζήτηση

Διπλός κατακερματισμός