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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Advanced Data Indexing

Advanced Data Indexing

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

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

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

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

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #15

Δομές Δεδομένων & Ανάλυση Αλγορίθμων. 3ο Εξάμηνο. Ουρά (Queue) Υλοποίηση της με τη βοήθεια πίνακα.

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

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

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

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

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

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

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Συνδεδεμένη Λίστα ΣΛ null VK 23

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Πολυπλοκότητα - Εισαγωγή στους Αλγόριθμους Αναζήτησης

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

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

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

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

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

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

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

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

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

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

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

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

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

Συλλογές, Στοίβες και Ουρές

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

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

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

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

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

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

«ΕΙΔΙΚΑ ΘΕΜΑΣΑ ΣΟΝ ΠΡΟΓΡΑΜΜΑΣΙΜΟ ΤΠΟΛΟΓΙΣΩΝ» Κεφάλαιο 4: Αντικειμενοςτρεφήσ Προγραμματιςμόσ

public class ArrayStack implements Stack {

Αντικειµενοστρεφής Προγραµµατισµός

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

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

Αντικειμενοστραφής Προγραμματισμός I (5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

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

Βασικές Έννοιες Δοµών Δεδοµένων

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Αντικειμενοστραφής Προγραμματισμός I(5 ο εξ) Εργαστήριο #2 ο : Ανατομία προγραμμάτων εφαρμογών, η

Μεταγλωττιστές. Συντακτικός Αναλυτής Κατασκευή Πίνακα Συμβόλων (ΠΣ) Εργαστήριο 7. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Κεφάλαιο 6 Ουρές Προτεραιότητας

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

Κληρονομικότητα. Παύλος Εφραιμίδης pefraimi <at> ee.duth.gr. Java Κληρονομικότητα 1

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

Week. 6: Java Collections

Στοιχειώδεις Δομές Δεδομένων

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

public class ArrayQueue implements Queue {

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

Διαδικασιακός Προγραμματισμός

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

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

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

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

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

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

Η γλώσσα προγραμματισμού C

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

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

4 Συλλογές Αντικειμένων

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

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

Transcript:

Μια συνάρτηση κατακερματισμού (hash function) h απεικονίζει κλειδιά ενός δοσμένου τύπου σεακεραίουςενόςσταθερούδιαστήματος [0,N 1]όπουΝτομέγεθοςτουπίνακα. Πχ: Συναρτήσεις Κατακερματισμού και Πίνακες Κατακερματισμού h(x) = x% N είναι μια συνάρτηση κατακερματισμού για ακέραια κλειδιά με σκοπό την ομοιόμορφη διασποράτωνκλειδιώνxστοπεδίο[0,n 1]. Ο ακέραιος h(x) ονομάζεται τιμή κατακερματισμού (hash value) του κλειδιού x. h(13)=13%10->3 h(23)=23%20->3 Μια σύγκρουση (collision) συμβαίνει όταν δύο κλειδιά του λεξικού έχουν την ίδια τιμή κατακερματισμού(3). Σχήματα χειρισμού συγκρούσεων: Chaining: τα συγκρουόμενα αντικείμενα αποθηκεύονται σε ακολουθία. Open addressing: τα συγκρουόμενα αντικείμενα τοποθετούνται σε διαφορετικά κελιά του πίνακα. VK 38

Open addressing Linear Probing Γραμμική διερεύνηση Το Linear probing χειρίζεται τις συγκρούσεις τοποθετώντας το συγκρουόμενο αντικείμενο στο επόμενο (κυκλικά) διαθέσιμο κελί του πίνακα. Κάθε κελί του πίνακα που επιθεωρείται αναφέρεται ως probe. Συγκρουόμενα αντικείμενα συσσωρεύονται, με συνέπεια μελλοντικές συγκρούσεις να προκαλούν μεγαλύτερες ακολουθίες από probes. Πχ: h(x)=x%13 Εισαγωγήτων8κλειδιών18,41,22, 44, 59, 32, 31,73σεαυτήτηνσειρά hashvalues 5, 2, 9, (5), 7, (6),(5),(8) 6, 7, (6), 8, 10,11 A[18%13]=5 0 1 2 3 4 5 6 7 8 9 10 11 41 18 44 59 32 22 31 73 11 12 To διάστημα μεταξύ των θέσεων είναι σταθερό (συνήθως 1). VK 39

Open addressing Double Hashing Διπλός Κατακερματισμός Το Double hashing χρησιμοποιεί μια δευτερεύουσα συνάρτηση κατακερματισμού d(k) και χειρίζεται τις συγκρούσεις τοποθετώντας το αντικείμενο στο πρώτο διαθέσιμο κελί από τις σειρές (i+ jd(k)) % N για j = 0, 1,, N 1 Σε ένα πίνακα κατακερματισμού που χειρίζεται συγκρούσεις με double hashing, συγκρουόμενα αντικείμενα συσσωρεύονται, με συνέπεια μελλοντικές συγκρούσεις να προκαλούν μεγαλύτερες ακολουθίες από probes. Πχ: Ν=13 (πρώτος αριθµός) h(x) = x % 13 d(x) = 7 - x % 7 VK 40

JAVA & Hashing To πακέτο java.utilπεριέχει την κλάση Hashtableη οποία υλοποιεί γενικέςτεχνικές κατακερματισμού αντιστοιχίζοντας κλειδιά σε τιμές. Ένα αντικείμενο Hashtable έχει δύο παραμέτρους που επηρεάζουν την λειτουργία του: αρχική χωρητικότητα (initialcapacity) παράγοντα φόρτου (load factor). Η αρχική χωρητικότητα ορίζει το πλήθος των στοιχείων που μπορεί να αποθηκευτεί στον πίνακα κατά την στιγμή της δημιουργίας του. Ο παράγοντας φόρτου είναι ένα μέτρο που δείχνει πόσο επιτρέπεται να γεμίσει ο πίνακας πριν αυξηθεί αυτόματα η χωρητικότητά του. Όταν οι εισαγωγές στον πίνακα κατακερματισμού ξεπεράσουν το γινόμενο της τρέχουσας χωρητικότητας επί τον παράγοντα φόρτου, η χωρητικότητα αυξάνεται καλώντας της μέθοδο rehash. Η δημόσια (public) κλάση Hashtable διαθέτει τους δομητές: public Hashtable() public Hashtable(int size) public Hashtable(int size, float load) throws IllegalArgumentException που δημιουργούν ένα πίνακα κατακερματισμού, θέτοντας την αρχική του χωρητικότητα (ή αφήνοντας το προκαθορισμένο μέγεθος που είναι 101) και ένα παράγοντα φόρτου (προκαθορισμένο 0.75). Στην πράξη, το hashing είναι πολύ γρήγορο αν ο παράγοντας φόρτου(load factor) δεν είναι κοντά στο 100%. LF=Keys/N ( 0<= LF <1) VK 41

Chaining Σε κάθε θέση του πίνακα αντιστοιχεί μια συνδεδεμένη λίστα. Eστω πίνακας Ν=10θέσεων: ΗΤ[10] και έστω έχω και 10 κλειδιά. Συνάρτηση h(x) = x% 10 33, 41, 53, 74, 87, 127, 144, 154, 178, 199 3 1 3 4 7 7 4 4 8 9 insert (53) if ( isfull() ) rehash() HT [53%10].insertLast(53) boolean contains (53) return HT[53%10].contains(53) remove (53) if (! contains(53) ) return; tmpl= HT [53%10] for (int i=0; i<s; i++){ tmp=tmpl.removefirst(); if (! tmp.equals(53) ) tmplist.insertlast(tmp); } VK 42

HT Rehashing Μεταβάλλει το µέγεθος του πίνακα κατακερµατισµού. Καλείται αυτόµαταόταν το πλήθος των κλειδιών ξεπεράσει την χωρητικότητα και τον παράγοντα φόρτου. int size() = 10 // κλειδιά return sum(ητ[i].size()) boolean isfull () return ((double) ( size() /HT.length ) > maxlf) maxlf=0.7 7/10,στο 8 ο κλειδί γίνεται rehash rehash () nsize=2* HT.length OldHT=HT HT = new SimpleLinkedList[ nextprime(s*2) ]; for (int i = 0; i< HT.length; i++) { //buildνέο HT HT[ i] = new SimpleLinkedList( ); while(! oldht[i].isempty() ) { //για κάθε λίστα Object obj = oldarray[i].removelast(); HT[ obj.hashcode()%ht.length].insertlast(obj); } } VK 43