Κατακερµατισµός 1 Οργάνωση Αρχείων (σύνοψη) Οργάνωση αρχείων: πως είναι τοποθετημένες οι εγγραφές ενός αρχείου όταν αποθηκεύονται στο δίσκο 1. Αρχεία Σωρού 2. Ταξινομημένα Αρχεία Φυσική διάταξη των εγγραφών ενός αρχείου με βάση την τιμή ενός από τα πεδία του το οποίο λέγεται πεδίο διάταξης (ordering field) 2 : Κατακερµατισµός 1
Οργάνωση Αρχείων Αρχεία Κατακερματισμού Βασική ιδέα: η τοποθέτηση των εγγραφών στα blocks του αρχείου γίνεται εφαρμόζοντας μια συνάρτηση κατακερματισμού σε κάποιο από τα πεδία της εγγραφής 3 Εσωτερικός Κατακερµατισµός ΕσωτερικόςΚατακερματισμός (τα δεδομένα είναι στη μνήμη, όπως στις δομές δεδομένων) Πίνακας κατακερματισμού με Μ θέσεις - κάδους (buckets) h: συνάρτηση κατακερματισμού h(k) = i Πεδίο αναζήτησης -Πεδίο κατακερματισμού Σε ποιο κάδο -τιμή από 0 έως Μ-1 4 : Κατακερµατισµός 2
Αρχεία Κατακερµατισµού ΕξωτερικόςΚατακερματισμός (εφαρμογή σε δεδομένα αποθηκευμένα σε αρχεία) Στόχος h(k) = i Τιμή του πεδίου κατακερματισμού Διεύθυνση(αριθμός) block του αρχείου που είναι αποθηκευμένη Η εγγραφή με τιμή στο πεδίο κατακερματισμού k αποθηκεύεται στο i-οστο block(κάδο) του αρχείου 5 Εξωτερικός Κατακερµατισµός Κάδος: μια συστάδα από συνεχόμενα blocks του αρχείου h(k) = i Σχετική διεύθυνση του κάδου (ποιος κάδος του αρχείου) Τιμή του πεδίου κατακερματισμού Ο κατακερματισμός είναι πολύ αποδοτικός για επιλογές (ερωτήσεις) ισότητας 6 : Κατακερµατισµός 3
Εξωτερικός Κατακερµατισµός Ένας πίνακας που αποθηκεύεται στην επικεφαλίδα του αρχείου μετατρέπει τον αριθμό κάδου στην αντίστοιχη διεύθυνση block 0 διεύθυνση 1ου block του κάδου στο δίσκο 1 διεύθυνση 1ου block του κάδου στο δίσκο 2 διεύθυνση 1ου block του κάδου στο δίσκο... Μ-1 διεύθυνση 1ου block του κάδου στο δίσκο 7 Εξωτερικός Κατακερµατισµός Πέρα από την οργάνωση αρχείων, ο κατακερματισμός μπορεί να χρησιμοποιηθεί ως ευρετήριο h(k) = i Τιμή του πεδίου κατακερματισμού Δείκτης στο block του αρχείου δεδομένων που είναι αποθηκευμένη η εγγραφή με τιμή k στο πεδίο κατακερματισμού 8 : Κατακερµατισµός 4
Εξωτερικός Κατακερµατισµός Πρόβλημα: Έστω Μ κάδους και r εγγραφές ανά κάδο - το πολύ Μ * r εγγραφές (αλλιώς μεγάλες αλυσίδες υπερχείλισης) Δυναμικός Κατακερματισμός Στατικός Κατακερματισμός Επεκτατός Γραμμικός 9 Δυναµικός Εξωτερικός Κατακερµατισµός Δυναμικός Εξωτερικός Κατακερματισμός Δυαδική αναπαράσταση του αποτελέσματος της συνάρτησης κατακερματισμού, δηλαδή ως μια ακολουθίας δυαδικών ψηφίων Κατανομήεγγραφώνμεβάσητηντιμήτωναρχικών(ή τελικών) ψηφίων 10 : Κατακερµατισµός 5
Δυναµικός Εξωτερικός Κατακερµατισµός Τοαρχείοξεκινάμεέναμόνοκάδο Μόλις γεμίσει ένας κάδος διασπάται σε δύο κάδους με βάση την τιμή του 1ου (ή τελευταίου) δυαδικού ψηφίου των τιμών κατακερματισμού -- δηλαδή οι εγγραφές που το πρώτο (τελευταίο) ψηφίο της τιμής κατακερματισμού τους είναι 1 τοποθετούνται σε ένακάδοκαιοιάλλες (με0)στονάλλο Νέα υπερχείλιση ενός κάδου οδηγεί σε διάσπαση του με βάση το αμέσως επόμενο δυαδικό ψηφίο κοκ 11 Δυναµικός Εξωτερικός Κατακερµατισµός Έτσι δημιουργείται μια δυαδική δενδρική δομή που λέγεται κατάλογος (dirtectory) ή ευρετήριο(index) με δύο ειδών κόμβους εσωτερικούς: που καθοδηγούν την αναζήτηση εξωτερικούς: που δείχνουν σε ένα κάδο 12 : Κατακερµατισµός 6
Δυναµικός Εξωτερικός Κατακερµατισµός (Παράδειγµα) Χρήση των τελευταίων bits της δυαδικής αναπαράστασης Αποτέλεσμα συνάρτησης κατακερματισμού 1 000001 4 000100 5 000101 7 000111 10 001010 12 001100 15 001111 16 010000 19 010011 21 010101 32 100000 13 001101 20 010100 4 εγγραφές ανά κάδο 13 Δυναµικός Εξωτερικός Κατακερµατισµός Αλγόριθμος αναζήτησης h := τιμή κατακερματισμού t := ρίζα του δέντρου i:= 1 while (t εσωτερικός κόμβος) if (i-οστό bit του h είναι 0) t := αριστερά του t else t := δεξιά του t i := i +1 14 : Κατακερµατισµός 7
Δυναµικός Εξωτερικός Κατακερµατισµός Που αποθηκεύεται ο κατάλογος στημνήμη,εκτόςανείναιπολύμεγάλος τότε στο δίσκο οπότε θα απαιτούνται επιπρόσθετες προσπελάσεις Δυναμική επέκταση αλλά μέγιστος αριθμός επιπέδων (το πλήθος των δυαδικών ψηφίων της συνάρτησης κατακερματισμού) Ισοζύγιση Συνένωση κάδων (δυναμική συρρίκνωση) 15 Επεκτατός Εξωτερικός Κατακερµατισµός Ο κατάλογος είναι ένας πίνακας με 2 d διευθύνσεις κάδων (d: ολικό βάθος του καταλόγου) Κάδος για τις εγγραφές με τιμές 000 κατακερματισμού που τελειώνουν σε 000 001 010 011 Extendible hashing 100 101 110 111 Τα τελευταία d ψηφία της τιμής κατακερματισμού χρησιμοποιούνται ως δείκτης στον πίνακα Στις διαφάνειες, χρησιμοποιούμε τα τελευταία bits της δυαδικής αναπαράστασης 16 : Κατακερµατισµός 8
Επεκτατός Εξωτερικός Κατακερµατισµός Δε χρειάζεται ένας διαφορετικός κάδος για κάθε μία από τις 2 d θέσεις - μπορεί η θέση του πίνακα να δείχνει στη διεύθυνση του ίδιου κάδου αν αυτές χωράνε σεένακάδο 000 001 010 011 100 101 110 111 Κάδος για τις εγγραφές με τιμές κατακερματισμού που τελειώνουν από 00 Για κάθε κάδο, τοπικό βάθος d o αριθμός των δυαδικών ψηφίων στα οποία βασίζεται η χρήση του κάδου Παράδειγμα: 2 εγγραφές ανά κάδο εισαγωγή 2, 4, 3, 10, 7, 9 17 Επεκτατός Εξωτερικός Κατακερµατισµός (Παράδειγµα) Χρήση των τελευταίων bits της δυαδικής αναπαράστασης 1 000001 4 000100 5 000101 7 000111 10 001010 12 001100 15 001111 16 010000 19 010011 21 010101 32 100000 13 001101 4 εγγραφές ανά κάδο 18 : Κατακερµατισµός 9
Επεκτατός Εξωτερικός Κατακερµατισµός (Παράδειγµα) Χρήση των τελευταίων bits της δυαδικής αναπαράστασης 1 000001 4 000100 5 000101 7 000111 10 001010 12 001100 15 001111 16 010000 19 010011 21 010101 32 100000 13 001101 19 Επεκτατός Εξωτερικός Κατακερµατισµός Η τιμή του d μπορεί να αυξάνεται (μέχρι 2 κ, κ: αριθμός δυαδικών ψηφίων της τιμής κατακερματισμού) ή να μειώνεται Αύξηση της τιμής του d Όταν ένας κάδος με τιμή d = d υπερχειλίσει Διπλασιασμός του πίνακα Μείωση της τιμής του d Όταν για όλους τους κάδους d < d Μείωση του μεγέθους του πίνακα στο μισό Δε χρειάζεται rehash (επανα-κερματισμό), διασπάμε κάθε κάδο Επίσης, κάθε φορά μόνο τον κάδο που υπερχείλισε 20 : Κατακερµατισµός 10
Επεκτατός Εξωτερικός Κατακερµατισµός (Παράδειγµα) 20 010100 1 000001 4 000100 5 000101 7 000111 10 001010 12 001100 15 001111 16 010000 19 010011 21 010101 32 100000 13 001101 Διάσπαση- > Ολικό βάθος 3 21 1 000001 4 000100 5 000101 7 000111 10 001010 12 001100 15 001111 16 010000 19 010011 21 010101 32 100000 13 001101 20 010100 Επεκτατός Εξωτερικός Κατακερµατισµός 4 12 32 16 20 -> διάσπαση 22 : Κατακερµατισµός 11
Κατακερµατισµός Επανάληψη: Τι αποθηκεύουμε στους κάδους Στα παραδείγματα δείχνουμε μόνο την τιμή του πεδίου κατακερματισμού Την ίδια την εγγραφή (ως τρόπος οργάνωσης αρχείου) μέγεθος κάδου-> 1 block(ή συστοιχία από συνεχόμενα blocks) Τιμή του πεδίου κατακερματισμού + δείκτη στο υπόλοιπο της εγγραφής; (ως ευρετήριο) Τι γίνεται αν το πεδίο κατακερματισμού δεν είναι κλειδί (παραπάνω από μια εγγραφή με την ίδια τιμή) 23 Γραµµικός Εξωτερικός Κατακερµατισµός Γραμμικός Κατακερματισμός Θέλουμε να αποφύγουμε τη χρήση καταλόγου + Διπλασιασμό μεγέθους του καταλόγου Προσοχή! Αυτή η μέθοδος: Διατηρεί λίστες υπερχείλισης Δε χρησιμοποιεί τη δυαδική αναπαράσταση 24 : Κατακερµατισµός 12
Γραµµικός Εξωτερικός Κατακερµατισµός Χρησιμοποιεί μια οικογένεια από συναρτήσεις κατακερματισμού h 0 (k), h 1 (k),, h d (k) Κάθε συνάρτηση διπλάσιους κάδους από την προηγούμενη: h 0 (k) = k mod M, h 1 (k) = k mod 2M, h 2 (k) = k mod 4M,, h j (k) = k mod 2 j M Όταν συμβαίνει η πρώτη υπερχείλιση ενός κάδου, πάμε στην επόμενη συνάρτηση μέχρι να διασπαστούν όλοι οι κάδοι με αυτήν τη συνάρτηση ΠΡΟΣΟΧΗ: δε διασπάμε τον κάδο που υπερχειλίζει, αλλά έναν-έναν τον κάδο με τη σειρά! 25 Γραµµικός Εξωτερικός Κατακερµατισµός Βασικά σημεία Πολλές συναρτήσεις κατακερματισμού (άλλη σε κάθε βήμα) Οι κάδοι σε κάθε βήμα διασπώνται με τη σειρά (ο ένας μετά τον άλλο ανεξάρτητα αν έχουν ή όχι υπερχειλίσει) Επίσης, υποθέτουμε ότι κάθε υπερχείλιση, οδηγεί σε διάσπαση 26 : Κατακερµατισµός 13
Γραµµικός Εξωτερικός Κατακερµατισµός Αρκούν 2 μεταβλητές Βήμα Διάσπασης - ποια συνάρτηση χρησιμοποιούμε Πλήθος Διασπάσεων (στο τρέχον βήμα) ποιος είναι ο επόμενος κάδο που θα διασπαστεί 27 Γραµµικός Εξωτερικός Κατακερµατισµός Αρχικά: Βήμα Διάσπασης (ποια συνάρτηση χρησιμοποιούμε) αρχικά j = 0: Πλήθος Διασπάσεων (στο τρέχον βήμα) αρχικά n = 0, j-> ποια συνάρτηση χρησιμοποιούμε n->ποιοκάδοδιασπάμε Έστω αρχικά Μ κάδους αριθμημένους από 0 έως Μ - 1 και αρχική συνάρτηση κατακερματισμού h 0 (k) = k mod M 28 : Κατακερµατισµός 14
j -> ποια συνάρτηση χρησιμοποιούμε n -> ποιο κάδο διασπάμε Γραµµικός Εξωτερικός Κατακερµατισµός Όταν συμβεί μια υπερχείλιση σε έναν οποιοδήποτε κάδο, ο κάδος 0 χωρίζεται σε δύο κάδους: τον αρχικό κάδο 0 και ένα νέο κάδο Μ στο τέλος τουαρχείουμεβάσητηνσυνάρτησηh 1 (k)=kmod2m Βήμα Διάσπασης (ποια συνάρτηση χρησιμοποιούμε) j = 1 Πλήθος Διασπάσεων n = 1 Συνεχίζουμε γραμμικά, διασπώντας με τη σειρά τους κάδους 1, 2, 3,... μέχρι να διασπαστούν όλοιοι «παλιοί» κάδοι η μεταβλητή n («ΠλήθοςΔιασπάσεων») κρατάει ποιος κάδος έχει σειρά για διάσπαση 29 Γραµµικός Εξωτερικός Κατακερµατισµός Βήμα διάσπασης (ποια συνάρτηση χρησιμοποιούμε) j = 1: ΠλήθοςΔιασπάσεωνn=m-1: Όταν συμβεί μια υπερχείλιση σε έναν οποιοδήποτε κάδο, οκάδοςm-1 χωρίζεταισεδύοκάδους:τοναρχικόκάδοm-1καιένανέο κάδο m + k - 1 στο τέλος του αρχείου με βάση την συνάρτηση h 1 (k) = k mod2m Δηλαδή, σε κάθε υπερχείλιση χωρίζουμε όλους τους κάδους με τη σειρά ξεκινώντας από τον πρώτο κάδο 30 : Κατακερµατισµός 15
Γραµµικός Εξωτερικός Κατακερµατισµός Συνεχίζουμε... Όλοι οι κάδοι έχουν διασπαστεί όταν: n = M Τότε έχουμε 2M κάδους Όταν n = M, μηδενίζουμε το n, n = 0 και για οποιαδήποτε νέα διάσπαση εφαρμόζουμε την h 2 (k) = k mod 4M Διασπώντας πάλι τον κάδο 0, 1,... κ.τ.λ 31 Γραµµικός Εξωτερικός Κατακερµατισµός Γενικά βήμα διάσπασης j(j = 0, 1, 2, ) h j (k) = k mod 2 j M, και την h j+1 (k) για διασπάσεις 32 : Κατακερµατισµός 16
Γραµµικός Εξωτερικός Κατακερµατισµός 32 9 44 31 25 5 35 7 36 14 18 10 11 30 Κάθε κάδος 4 εγγραφές Αρχικά4κάδους(M=4) ΠΡΟΣΟΧΗ: Δε χρησιμοποιούμε τη δυαδική αναπαράσταση 33 Γραµµικός Εξωτερικός Κατακερµατισµός (παράδειγµα) h 0 (k) = k mod 4 h 1 (k) = k mod 8 Για μη διασπασμένους κάδους: παλιά συνάρτηση Για διασπασμένους κάδους: νέα συνάρτηση 37 29 Βήμα διάσπασης 0 (χρήση h 0 ) Πλήθος διασπάσεων = 0 43 Διασπάμε τον πρώτο κάδο 22 66 34 34 : Κατακερµατισµός 17
Γραµµικός Εξωτερικός Κατακερµατισµός (παράδειγµα) 50 Βήμα διάσπασης 0 (χρήση h 0 ) Πλήθος διασπάσεων = 0 35 Γραµµικός Εξωτερικός Κατακερµατισµός Αναζήτηση Εγγραφής (γενικά) Τι χρειάζεται να ξέρουμε για να βρεθεί ο κάδος της εγγραφής k που ψάχνουμε; ποια συνάρτηση χρησιμοποιούμε (δηλαδή, το j) σε ποια διάσπαση βρισκόμαστε (δηλαδή το n) Έστω ότι είμαστε στο βήμα j, Τότε θα πρέπει να κοιτάξουμε είτε το ή το h j (k) αν ο κάδος δεν έχει διασπαστεί h j+1 (k) αν έχει διασπαστεί Πως θα ελέγξουμε αν ο κάδος έχει διασπαστεί ή όχι 36 : Κατακερµατισµός 18
Γραµµικός Εξωτερικός Κατακερµατισµός Αναζήτηση Εγγραφής Κρατάμε μια μεταβλητή το πλήθος n των διασπάσεων Έστω n ο αριθμός διασπάσεωνκαι ότι αναζητούμε το k, βρίσκεται στον κάδο h 0 (k) τότε αν n h 0 (k)o κάδος δεν έχει διασπαστεί ενώ αν n > h 0 (k)o κάδος έχει διασπαστεί και εφαρμόζουμε την h 1 (k) 37 Γραµµικός Εξωτερικός Κατακερµατισµός Αλγόριθμος Αναζήτησης j : βήμα διάσπασης if (n = 0) else { } then m := h j (k); m := h j (k); if (m < n) then m := h j+1 (k) n : πλήθος διασπάσεων στο βήμα j σημαίνει ότι ο κάδος έχει διασπαστεί 38 : Κατακερµατισµός 19