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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Advanced Data Indexing

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

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

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

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

Advanced Data Indexing

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

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

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

4. Συνδεδεμένες Λίστες

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

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

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

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

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

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

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

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

9. Κόκκινα-Μαύρα Δέντρα

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

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

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

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

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

Βασικά Στοιχεία της Java

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

Πληροφορική 2. Δομές δεδομένων και αρχείων

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

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

H κλάση ArrayList. Γιώργος Θάνος. Γραφείο Γ. Γκλαβάνη 37. Αντικει ενοστραφής Προγρα. ος όροφος

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

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

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

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

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

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

έντρα ομές εδομένων 3ο εξάμηνο ιδάσκων: Χρήστος ουλκερίδης ιαφάνειες προσαρμοσμένες από το υλικό της Μαρίας Χαλκίδη

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

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

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

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Προγραμματισμός 2 Σημειώσεις εργαστηρίου

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

Βασικά Στοιχεία της Java

HY-252 Αντικειμενοστραφής Προγραμματισμός. Χειμερινό Εξάμηνο 2012 Διδάσκων: Χριστοφίδης Βασίλης. Ημερομηνία Παράδοσης: 16/11/2012

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

Ευρετήρια. Ευρετήρια. Βάσεις Δεδομένων : Ευρετήρια 1

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 17/1/08

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

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

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

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

Προγραμματισμός ΙI (Θ)

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

Τύποι δεδομένων, τελεστές, μεταβλητές

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

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

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

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

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

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Transcript:

Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 10. Πίνακες Κατακερματισμού 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 16/12/2016

Πίνακες (Μια παλιά άσκηση) Σε έναν πίνακα A, n θέσεων, έχουμε: Εισαγωγή: O(1) Αναζήτηση: O(n) ιαγραφή: O(n)(αναζήτηση + μετακίνηση στοιχείων) Ερώτημα Αν θέλουμε να αποθηκεύουμε σε έναν πίνακα οποιοδήποτε υποσύνολο των ακέραιων τιμών 0,1,2,,n-1, μπορούμε να βελτιώσουμε το χρόνο των πράξεων Αναζήτηση και ιαγραφή, χωρίς να αυξήσουμε τον χρόνο εισαγωγής? Αν ναι, πώς? Δομές Δεδομένων, 3ο Εξάμηνο 2

Πίνακες (Μια παλιά άσκηση) Ερώτημα Μπορούμε να πετύχουμε το ίδιο για οποιοδήποτε υποσύνολο οποιουδήποτε συνόλου δεδομένων Ν στοιχείων? Δομές Δεδομένων, 3ο Εξάμηνο 3

Εισαγωγή Πίνακας κατακερματισμού: ομή δεδομένων που προσφέρει πολύ γρήγορη εισαγωγή και αναζήτηση Η αναζήτηση, εισαγωγή (μερικές φορές και διαγραφή) εκτελούνται σχεδόν σε σταθερό χρόνο Ο(1) Πίνακες κατακερματισμού είναι σημαντικά πιο γρήγοροι από τα δέντρα τα οποία αποδίδουν σε σχετικά γρήγορο χρόνο Ο(logN) Δομές Δεδομένων, 3ο Εξάμηνο 4

Μειονεκτήματα Βασίζονται σε πίνακες και είναι δύσκολο να επεκταθούν μετά την δημιουργία τους Η απόδοση μπορεί να μειωθεί σημαντικά όταν ένας πίνακας υπερκορεστεί εν υπάρχει κάποιος εύκολος τρόπος να γίνουν επισκέψεις στα στοιχεία με συγκεκριμένη σειρά Δομές Δεδομένων, 3ο Εξάμηνο 5

Πίνακες/Συναρτήσεις Κατακερματισμού Βασικό στοιχείο είναι ο τρόπος με τον οποίον ένα εύρος τιμών κλειδιών μετασχηματίζονται σ ένα εύρος δεικτών πίνακα Ο μετασχηματισμός αυτός επιτυγχάνεται στους πίνακες κατακερματισμού με μία συνάρτηση κατακερματισμού Απλή περίπτωση, χωρίς χρήση συνάρτησης κατακερματισμού Τιμές κλειδιών δείκτες πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 6

Τρόπος Λειτουργίας Η συνάρτηση κατακερματισμού μετασχηματίζει τα κλειδιά σε θέσεις στο πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 7

Παράδειγμα Τρόπου Λειτουργίας: Τηλεφωνικός Κατάλογος Πηγή: http://en.wikipedia.org/wiki/hash_table Δομές Δεδομένων, 3ο Εξάμηνο 8

Παραδείγματα Χρήσης Πρόσβαση σε εγγραφές υπαλλήλων Αριθμοί υπαλλήλων 1-1000 Οι αριθμοί υπαλλήλων κλειδιά στην προσπέλαση εγγραφών Τι είδους δομή δεδομένων θα πρέπει να χρησιμοποιηθεί σ αυτή την περίπτωση; Δομές Δεδομένων, 3ο Εξάμηνο 9

Παραδείγματα Χρήσης (Συνέχεια) Υπάλληλος_1 Υπάλληλος_2 Υπάλληλος_72 Αριθμοί δεικτών ίδιοι με τους αριθμούς υπαλλήλων Προσπέλαση στοιχείου πίνακα... Υπάλληλος_1000 1 2 72 1000... emprecord rec = databasearray[72]; Προσθήκη στοιχείου databasearray[totalemployees++] = newrecord; Δομές Δεδομένων, 3ο Εξάμηνο 10

Παραδείγματα Χρήσης (Συνέχεια) Χρήση πίνακα απλή και αποδοτική δομή για την προσπέλαση των στοιχείων Περιορισμοί: Καλά τακτοποιημένα κλειδιά Περιορισμένος αριθμός διαγραφών ιαγραφές οδηγούν σε κενά στην μνήμη Στοιχεία μπορούν να προστίθενται μόνο στο τέλος του πίνακα Μέγεθος πίνακα σταθερό Πώς θα διαχειριστούμε περιπτώσεις που τα κλειδιά δεν πληρούν τους περιορισμούς του πίνακα? Ο πίνακας κατακερματισμού είναι μία κατάλληλη δομή δεδομένων Δομές Δεδομένων, 3ο Εξάμηνο 11

Εφαρμογές Πινάκων Κατακερματισμού Μεταγλωττιστές γλωσσών προγραμματισμού ιατήρηση πίνακα συμβόλων σε πίνακα κατακερματισμού (ονόματα μεταβλητών/συναρτήσεων, διευθύνσεις στη μνήμη) Λεξικό όρων Κάθε λέξη καταλαμβάνει ένα κελί σε έναν πίνακα Προσπέλαση της λέξης χρησιμοποιώντας έναν αριθμό δείκτη Δομές Δεδομένων, 3ο Εξάμηνο 12

Συνάρτηση Κατακερματισμού Μία συνάρτηση κατακερματισμού μετατρέπει το αντικείμενο σε έναν ακέραιο κατάλληλο για δεικτοδότηση σε έναν πίνακα που είναι αποθηκευμένο το αντικείμενο h: O [0, M) Εάν η συνάρτηση είναι 1-1, μπορούμε να προσπελάσουμε το αντικείμενο με βάση το δείκτη του στον πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 13

Ιδιότητες Συνάρτησης Κατακερματισμού 1. Κατανομή κλειδιών ομοιόμορφα στο χώρο 2. ύο εγγραφές δεν μπορούν να καταλαμβάνουν την ίδια θέση 3. ιατήρηση της σειράς k i k j, i j: h(k i ) h(k j ) ύσκολο να βρεθεί μία τέτοια συνάρτηση κατακερματισμού Η 2 η ιδιότητα είναι η πιο σημαντική!! Σύγκρουση: ύο ή περισσότερα διαφορετικά αντικείμενα μπορεί να αντιστοιχίζονται μέσω της συνάρτησης στην ίδια θέση Δομές Δεδομένων, 3ο Εξάμηνο 14

Πρωτογενείς Τύποι Δεδομένων Μπορούμε να αντιστοιχίσουμε κάθε τιμή ενός βασικού τυπού σε μία τιμή τύπου int Τύπος char: κάθε χαρακτήρας κατακερματίζεται σε έναν μοναδικό θετικό ακέραιο (όπως ορίζεται στο Unicode) Αφηρημένοι τύποι δεδομένων δεν έχουν προκαθορισμένες τιμές Υπολογισμός της τιμής κατακερματισμού για κάθε αντικείμενο με βάση μία πολυωνυμική συνάρτηση Δομές Δεδομένων, 3ο Εξάμηνο 15

Συνάρτηση Κατακερματισμού Έστω ο αριθμός 1234 είναι μία συλλογή από ψηφία 1, 2, 3 και 4 110 3 + 210 2 + 310 1 +410 0 Έστω το string junk συλλογή από χαρακτήρες j, u, n, k ASCII χαρακτήρες αναπαριστώνται με 7bits σαν ένας αριθμός 0 και 127 128 3 j + 128 2 u + 128 1 n + 128 0 k Για να αντιστοιχίσουμε μεγάλους αριθμούς (όπως προκύπτουν από την μετατροπή strings σε αριθμούς) χρειαζόμαστε μία συνάρτηση (συνάρτηση κατακερματισμού) Έστω tablesize το μέγεθος του πίνακα T Εάν x είναι ένας ακέραιος η συνάρτηση x%tablesize παράγει αριθμό στο διάστημα [0, tablesize-1] κατάλληλο για δεικτοδότηση στο πίνακα T Δομές Δεδομένων, 3ο Εξάμηνο 16

Κατακερματισμός Αντικειμένων Έστω αντικείμενα της τάξης C έχουν k το πλήθος πεδία τύπου int O=(x 0,, x k-1 ) Η τιμή κατακερματισμού για κάθε αντικείμενο ο επιλέγοντας μία θετική σταθερά α, υπολογίζεται ως h(x 0 )α k-1 + h(x 1 )α k-2 + +h(x k-2 )α+h(x k-1 ) ή h(x k-1 ) + α(h(x k-2 ) +α(h(x k-3 )+...+α(h(x 1 )+αh(x 0 ))...)) Δομές Δεδομένων, 3ο Εξάμηνο 17

Διαχείριση Συγκρούσεων Έχοντας μία συνάρτηση κατακερματισμού, τι θα κάνουμε σε περίπτωση σύγκρουσης (collision)? Εάν το στοιχείο Χ κατακερματιστεί σε θέση που είναι ήδη κατειλημμένη, πού θα το τοποθετήσουμε? Δομές Δεδομένων, 3ο Εξάμηνο 18

Ανοιχτή Διεύθυνση Όταν ένα στοιχείο δεν μπορεί να τοποθετηθεί στο δείκτη που υπολογίστηκε από τη συνάρτηση κατακερματισμού, το πρόγραμμα ψάχνει για άλλη θέση στον πίνακα Μέθοδοι ανοικτής διεύθυνσης (open addressing) Γραμμική εξέταση (linear probing) ευτεροβάθμια εξέταση (quadratic probing) ιπλός κατακερματισμός (double hashing) Δομές Δεδομένων, 3ο Εξάμηνο 19

Ανοιχτή Διεύθυνση: Γραμμική Εξέταση Σειριακή αναζήτηση στον πίνακα μέχρι να βρούμε κενό κελί Εάν Η είναι το αποτέλεσμα της συνάρτησης κατακερματισμού και υπάρχει σύγκρουση τότε η αναζήτηση γίνεται στις θέσεις Η+1, Η+2, Η+3,..., Η+ι Βασικές λειτουργίες: Αναζήτηση, Εισαγωγή, ιαγραφή ιαγραφή Ένα αντικείμενο στον πίνακα κατακερματισμού δεν αναπαριστά μόνο τον εαυτό του αλλά συνδέει επίσης και άλλα αντικείμενα. Εικονική διαγραφή: Εάν διαγραφεί πραγματικά ένα στοιχείο, η διαδικασία αναζήτησης στον πίνακα μπορεί να αποτύχει Δομές Δεδομένων, 3ο Εξάμηνο 20

Δομές Δεδομένων, 3ο Εξάμηνο 21

Κλάση DataItem Δομές Δεδομένων, 3ο Εξάμηνο 22

December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 23

Δομές Δεδομένων, 3ο Εξάμηνο 24

December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 25

Γραμμική Εξέταση: Δημιουργία Δεσμών Γραμμική εξέταση ημιουργία δεσμών (clusters) Μεγάλες ακολουθίες εξέτασης Προσπέλαση κελιών στο τέλος της ακολουθίας πολύ αργή Το πρόβλημα των δεσμών (primary clustering) είναι μεγαλύτερο όσο πιο γεμάτος είναι ο πίνακας εν είναι σημαντικό το πρόβλημα όταν ο πίνακας είναι κατά το ήμισυ γεμάτος Δομές Δεδομένων, 3ο Εξάμηνο 26

Επέκταση Πίνακα Ανακατακερματισμός Όταν ο πίνακας γεμίζει πολύ, μια επιλογή που έχουμε είναι να τον επεκτείνουμε ημιουργώντας νέο πίνακα και εισάγοντας ένα-ένα τα στοιχεία με χρήση της insert() Η διαδικασία αυτή καλείται ανακατακερματισμός (rehashing) εν μπορούμε απλά να αντιγράψουμε τα στοιχεία στο νέο πίνακα! Συνήθως, διπλασιάζεται το μέγεθος του πίνακα Όμως το μέγεθος πρέπει να είναι πρώτος αριθμός (γιατί?) private boolean isprime(int n) { for (int j=2 ; (j*j <= n) ; j++) if (n % j == 0) return false; return true; } Δομές Δεδομένων, 3ο Εξάμηνο 27

Ανοιχτή Διεύθυνση: Δευτεροβάθμια Εξέταση Συντελεστής φόρτου (load factor) loadfactor = nitems / arraysize Η δευτεροβάθμια εξέταση προσπαθεί να αντιμετωπίσει το πρόβλημα της γραμμικής εξέταση Εξετάζει συγκεκριμένα κελιά μακριά από το αρχικό σημείο σύγκρουσης ιαχείριση συγκρούσεων με βάση τη συνάρτηση F(i) = i 2 Εάν η συνάρτηση κατακερματισμού οδηγεί στο Η και το Η είναι γεμάτο, τότε δοκιμάζουμε τα κελιά Η+1 2, Η+2 2, Η+3 2,...Η+ι 2 Δομές Δεδομένων, 3ο Εξάμηνο 28

December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 29

Απόδοση Δευτεροβάθμιας Εξέτασης Υλικό από τις Δομές διαφάνειες Δεδομένων, 3ο του Εξάμηνο Ορέστη Τελέλη 30

Απόδειξη (1/2) Υλικό από τις Δομές διαφάνειες Δεδομένων, 3ο του Εξάμηνο Ορέστη Τελέλη 31

Απόδειξη (2/2) Υλικό από τις Δομές διαφάνειες Δεδομένων, 3ο του Εξάμηνο Ορέστη Τελέλη 32

Πρόβλημα με Δευτεροβάθμια Εξέταση ευτεροβάθμια εξέταση οδηγεί σε δευτερεύουσα δημιουργία δεσμών (secondary clustering) Ο αλγόριθμος που παράγει την ακολουθία βημάτων στη δευτεροβάθμια εξέταση παράγει πάντα τα ίδια βήματα: 1, 4, 9, 16 Π.χ. 184, 302, 420, 544 μετασχηματίζονται στο 7 και εισάγονται στον πίνακα με αυτήν τη σειρά 302 εξέταση ενός βήματος 420εξέταση 4 βημάτων 544εξέταση 9 βημάτων Κάθε επιπλέον στοιχείο με κλειδί που μετασχηματίζεται σε 7 θα χρειάζεται μία ακόμα μεγαλύτερη εξέταση Δομές Δεδομένων, 3ο Εξάμηνο 33

Ανοιχτή Διεύθυνση: Διπλός Κατακερματισμός (1) Λύση στο πρόβλημα της δημιουργίας δεσμών Παραγωγή σειράς εξέτασης που εξαρτώνται από το κλειδί αντί να είναι η ίδια για κάθε κλειδί Για ένα δεδομένο κλειδί, το μέγεθος βήματος παραμένει σταθερό σε όλη την εξέταση, αλλά είναι διαφορετικό για διαφορετικά κλειδιά Δομές Δεδομένων, 3ο Εξάμηνο 34

Ανοιχτή Διεύθυνση: Διπλός Κατακερματισμός (2) Η δευτερεύουσα συνάρτηση κατακερματισμού πρέπει να έχει συγκεκριμένα χαρακτηριστικά: εν πρέπει να είναι η ίδια με την πρωτεύουσα συνάρτηση κατακερματισμού. εν πρέπει ποτέ να έχει έξοδο 0 (αλλιώς κάθε εξέταση θα κατέληγε στο ίδιο κελί και ο αλγόριθμος θα εκτελούσε ένα συνεχή βρόγχο). Έχει αποδειχθεί ότι οι συναρτήσεις της παρακάτω μορφής αποδίδουν πολύ καλά: stepsize = constant (key % constant) όπου constant πρέπει να είναι πρώτος αριθμός και μικρότερος από το μέγεθος πίνακα Δομές Δεδομένων, 3ο Εξάμηνο 35

Κώδικας για ιπλό Κατακερματισμό December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 36

Το Μέγεθος Πίνακα να είναι Πρώτος Αριθμός Έστω πίνακας 15 θέσεων (δείκτες 0 ως 14) Έστω κλειδί που κατακερματίζεται στη θέση 0 με βήμα 5 Τότε η ακολουθία εξέτασης θα είναι: 0, 5, 10, 0, 5, 10,... ΠΡΟΒΛΗΜΑ Εάν το μέγεθος πίνακα ήταν 13 (πρώτος): 0, 5, 10, 2, 7, 12, 4, 9, 1, 6, 11, 3... Δομές Δεδομένων, 3ο Εξάμηνο 37

Ξεχωριστή Αλυσίδα (1) Μία διαφορετική προσέγγιση, που ονομάζεται Ξεχωριστή Αλυσίδα (separate chaining), είναι να εγκαταστήσουμε μία συνδεδεμένη λίστα σε κάθε δείκτη στον πίνακα κατακερματισμού. Η βασική ιδέα είναι: Το κλειδί ενός στοιχείου μετασχηματίζεται στο δείκτη με βάση τη συνάρτηση κατακερματισμού και το στοιχείο εισάγεται στη συνδεδεμένη λίστα Τα στοιχεία που κατακερματίζονται στον ίδιο δείκτη απλώς προστίθενται στη συνδεδεμένη λίστα. Δομές Δεδομένων, 3ο Εξάμηνο 38

Ξεχωριστή Αλυσίδα (2) Συντελεστής φόρτου αριθμός στοιχείων / μέγεθος πίνακα Στην ξεχωριστή αλυσίδα μπορούμε να τοποθετήσουμε Ν ή περισσότερα στοιχεία σε πίνακα Ν κελιών Ο χρόνος που απαιτείται για την προσπέλαση των στοιχείων αυξάνεται καθώς αυξάνεται το μέγεθος της λίστας ιπλοεγγραφές Επιτρέπονται- Μπορεί να παραχθούν κατά τη διαδικασία εισαγωγής στοιχείων ιαγραφή Ο αλγόριθμος κατακερματίζει το κλειδί στη κανονική λίστα και μετά διαγράφει το στοιχείο από τη λίστα Δομές Δεδομένων, 3ο Εξάμηνο 39

Παράδειγμα Ξεχωριστής Αλυσίδας κενό 906 881 807 κενό 458 383 333 559 Πίνακας Συνδεδεμένες λίστες Δομές Δεδομένων, 3ο Εξάμηνο 40

Δομές Δεδομένων, 3ο Εξάμηνο 41

December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 42

Καλές Επιλογές για Συναρτήσεις Κατακερματισμού Η συνάρτηση κατακερματισμού πρέπει να Υπολογίζεται γρήγορα Κατανέμει με ομοιόμορφο τυχαίο τρόπο τα κλειδιά στις θέσεις του πίνακα Μη χρησιμοποιεί άχρηστη πληροφορία Π.χ. Κωδικοί της μορφής 033-400-03-94-05-0-535 Χρησιμοποιεί όλα τα δεδομένα Εάν είναι η mod (%) να χρησιμοποιεί πρώτο αριθμό για τη βάση του διαιρέτη Δομές Δεδομένων, 3ο Εξάμηνο 43

Απόδοση Κατακερματισμού Η εισαγωγή και η αναζήτηση προσεγγίζουν το χρόνο Ο(1) (αν δε συμβεί καμία σύγκρουση) Αν συμβούν συγκρούσεις, ο χρόνος εξαρτάται από το μήκος της ακολουθίας των στοιχείων που θα εξεταστούν Το μέσο μήκος εξέτασης εξαρτάται από το συντελεστή φόρτου Έστω P: το μήκος εξέτασης και L: ο συντελεστής φόρτου Δομές Δεδομένων, 3ο Εξάμηνο 44

Απόδοση Γραμμικής Εξέτασης Επιτυχής αναζήτηση: P = ( 1 + 1 / (1 L) 2 ) / 2 Ανεπιτυχής αναζήτηση: P = ( 1 + 1 / (1 L) ) / 2 Ο συντελεστής φόρτου πρέπει να διατηρείται κάτω από το 2/3 και ακόμα καλύτερα κάτω από το 1/2 Μέσο μήκος εξέτασης Ανεπιτυχής 1.0 Συντελεστής φόρτου Επιτυχής Donald E.Knuth: The Art of Computer Programming Τόμος 3: Sorting and Searching Δομές Δεδομένων, 3ο Εξάμηνο 45

Απόδοση Δευτεροβάθμιας Εξέτασης και Διπλού Κατακερματισμού Επιτυχής αναζήτηση: P = - log ( 1 L ) / L Ανεπιτυχής αναζήτηση: P = 1 / ( 1 L) Με συντελεστή φόρτου 0.5 επιτυχείς και ανεπιτυχείς αναζητήσεις απαιτούν κατά μέσο όρο 2 εξετάσεις Μέσο μήκος εξέτασης 2 Ανεπιτυχής Επιτυχής 0.5 1.0 Συντελεστής φόρτου Δομές Δεδομένων, 3ο Εξάμηνο 46

Απόδοση Ξεχωριστής Αλυσίδας Έστω arraysize στοιχεία στον πίνακα και Ν το πλήθος των στοιχείων που έχουν εισαχθεί Κάθε λίστα περιέχει κατά μέσο όρο AverageListLength = N / arraysize Ίδιο με το συντελεστή φόρτου L = N / arraysize Αναζήτηση Επιτυχής: 1 + L / 2 Ανεπιτυχής: 1 + L Εισαγωγή Μη ταξινομημένες λίστες: Ο(1) Ταξινομημένες λίστες: 1 + L / 2 Μέσο μήκος εξέτασης Ανεπιτυχής Επιτυχής 1.0 Συντελεστής φόρτου Δομές Δεδομένων, 3ο Εξάμηνο 47

Συμπερασματικά Αν χρησιμοποιείται ανοιχτή διεύθυνση, ο διπλός κατακερματισμός είναι πιθανώς το καλύτερο σύστημα Με μικρή υπεροχή ως προς τη δευτεροβάθμια εξέταση Αν υπάρχει άφθονη μνήμη, η γραμμική εξέταση είναι πιο απλή στην υλοποίηση και η απόδοση επιβαρύνεται λίγο εφόσον ο συντελεστής φόρτου είναι κάτω από 0.5 Αν δε γνωρίζουμε το πλήθος των στοιχείων που θα εισαχθούν, τότε προτιμούμε ξεχωριστή αλυσίδα αντί για ανοιχτή διεύθυνση Όταν αυξάνεται ο συντελεστής φόρτου, η απόδοση της ξεχωριστής αλυσίδας μειώνεται μόνο γραμμικά Όταν δεν είμαστε βέβαιοι, προτιμούμε την ξεχωριστή αλυσίδα που απαιτεί μεν κλάση συνδεδεμένης λίστας, αλλά η προσθήκη περισσότερων των αναμενόμενων δεδομένων δεν προκαλεί δραματική μείωση της απόδοσης Δομές Δεδομένων, 3ο Εξάμηνο 48

Εξωτερικός Κατακερματισμός (External Hashing) ιατηρείται ένας πίνακας κατακερματισμού στο δίσκο που περιέχει αριθμούς μπλοκ, οι οποίοι αναφέρονται σε μπλοκ εξωτερικής αποθήκευσης December 16, 2016 Δομές Δεδομένων, 3ο Εξάμηνο 49 Fundamentals of Database Systems by Elmasri and Navathe 2nd edition

Άσκηση Δομές Δεδομένων, 3ο Εξάμηνο 50

Πίνακες Κατακερματισμού στη Java Κλάση HashMap Παρέχεται από το πακέτο java.util Απαιτείται import java.util.hashmap; Constructor Κατασκευάζει HashMap() HashMap(int size) HashMap(int size, float lf) HashMap(HashMap m) Άδειο πίνακα 16 θέσεων με μέγιστο συντελεστή φόρτου 0.75 Άδειο πίνακα size θέσεων με μέγιστο συντελεστή φόρτου 0.75 Άδειο πίνακα size θέσεων με μέγιστο συντελεστή φόρτου lf Πίνακα με χαρακτηριστικά και τα στοιχεία του m Δομές Δεδομένων, 3ο Εξάμηνο 51

Δημιουργία Πίνακα Κατακερματισμού στη Java Η κλάση HashMap έχει οριστεί με χρήση Java Generics Στη δήλωση αναφοράς σε αντικείμενο τύπου HashMap πρέπει να δηλώσουμε Τον τύπο των κλειδιών K(αυτά κατακερματίζονται) Τον τύπο των δεδομένων (τιμών) V Με δήλωση του είδους HashMap<K,V> hmap; εν μπορούν να είναι βασικοί τύποι (int, float, double, char, ) Υποκαθιστούνται από σύνθετους τύπους Integer, Float, Double (με κεφαλαίο το πρώτο γράμμα) Επιτρέπονται σύνθετοι τύποι (κλάσεις) που έχουμε ορίσει Δομές Δεδομένων, 3ο Εξάμηνο 52

Παραδείγματα Πίνακας με κλειδιά τύπου Integer και τιμές τύπου String HashMap<Integer,String> hm = new HashMap<Integer,String>(); Πίνακας με κλειδιά τύπου String και τιμές τύπου MyClass HashMap<String,MyClass> hm = new HashMap<String,MyClass>(20); Δομές Δεδομένων, 3ο Εξάμηνο 53

Μέθοδοι Πινάκων Κατακερματισμού στη Java Μέθοδοςkey V put(k key, V value) V remove(object key) V get(object key) boolean isempty() boolean containskey(object key) boolean containsvalue(object value) int size() Λειτουργία Εισάγει το ζεύγος key, value ιαγράφει την εγγραφή για κλειδί key Επιστρέφει την τιμή για κλειδί key Επιστρέφει true αν ο πίνακας είναι άδειος Επιστρέφει true αν ο πίνακας περιέχει ζεύγος για το κλειδί key Επιστρέφει true αν ο πίνακας περιέχει ζεύγος με την τιμή value Επιστρέφει πλήθος ζευγών Δομές Δεδομένων, 3ο Εξάμηνο 54

Παράδειγμα Δομές Δεδομένων, 3ο Εξάμηνο 55