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

Σχετικά έγγραφα
Insert(K,I,S) Delete(K,S)

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

ΕΝΟΤΗΤΑ 7 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ ΣΩΡΟΙ

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

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

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

Δυαδικά Δέντρα Αναζήτησης (Binary Search Trees) Ορισμός : Ένα δυαδικό δέντρο αναζήτησης t είναι ένα δυαδικό δέντρο, το οποίο είτε είναι κενό είτε:

Οι βασικές πράξεις που ορίζουν τον ΑΤ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

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

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

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

ΟιβασικέςπράξειςπουορίζουντονΑΤΔ δυαδικό δέντρο αναζήτησης είναι οι ακόλουθες:

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

Κατ οίκον Εργασία 3 Σκελετοί Λύσεων

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

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

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

Δυαδικά Δένδρα Αναζήτησης, Δένδρα AVL

Ενότητα 7 Ουρές Προτεραιότητας

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εξωτερική Αναζήτηση και Β-δέντρα Κεφάλαιο 16. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

ΕΝΟΤΗΤΑ 4 ΣΥΝΟΛΑ - ΛΕΞΙΚΑ

Εκτενείς Δομές Δεδομένων

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

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Διάλεξη 13: Δέντρα ΙΙΙ - Ισοζυγισμένα Δέντρα, AVL Δέντρα

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

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

ένδρα u o Κόµβοι (nodes) o Ακµές (edges) o Ουρά και κεφαλή ακµής (tail, head) o Γονέας Παιδί Αδελφικός κόµβος (parent, child, sibling) o Μονοπάτι (pat

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

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

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

Ισορροπημένα Δένδρα. για κάθε λειτουργία; Ισορροπημένο δένδρο : Διατηρεί ύψος κάθε εισαγωγή ή διαγραφή

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

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

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

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

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

Τυχαίοι Αλγόριθμοι. Περιεχόμενα Κεφαλαίου

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

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

οµές εδοµένων 3 ο Εξάµηνο ΕΝΟΤΗΤΑ 4 ΕΝ ΡΑ

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Δοµές Δεδοµένων. 17η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

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

Εργαστήριο 2: Πίνακες

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

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

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

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

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

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

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

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

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα?

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

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

ΕΝΟΤΗΤΑ 9 ΕΝΩΣΗ ΞΕΝΩΝ ΣΥΝΟΛΩΝ ( ΟΜΕΣ UNION-FIND)

#2 Αλγόριθµοι, οµές εδοµένων και Πολυπλοκότητα

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

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Ενότητα 7 Ουρές Προτεραιότητας

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

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

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

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

Αλγόριθμοι Αναζήτησης

1o Φροντιστήριο ΗΥ240

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

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

Διάλεξη 26: Σωροί. Διδάσκων: Παναγιώτης Ανδρέου

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Προγραµµατισµός Ι (ΗΥ120)

Γέφυρες σε Δίκτυα. Μας δίνεται ένα δίκτυο (κατευθυνόμενο γράφημα) αφετηριακός κόμβος. Γέφυρα του (με αφετηρία τον ) :

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

Αναδρομικοί Αλγόριθμοι

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

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

Δομές Δεδομένων Εργαστηριακή Άσκηση Γκόγκος Νίκος Α.Μ.: 4973 Έτος: 3 ο gkogkos@ceid.upatras.gr. Εισαγωγικά:

Transcript:

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

Ταχεία Αναζήτηση Σε πίνακα: δυαδική αναζήτηση (binary search) σε ταξινοµηµένο πίνακα O(log n) Σε δένδρο: αναζήτηση σε ισοζυγισµένο δένδρο O(log n) Σε λίστα: Μπορούµε να επιτύχουµε αναζήτηση σε O(log n) χρόνο? λίστες παράλειψης (skip lists) (αναφέρονται και ως λίστες αναπηδήσεως) (Pugh, 1990) 2

Λίστες Παράλειψης (Skip Lists) Τέλεια Οργανωµένη Λίστα Παράλειψης Έχουµε επίπεδα δεικτών: ανά 1 στοιχείο, ανά 2, ανά 4, κ.ο.κ. Οι δείκτες που συνδέουν όλα τα στοιχεία στη σειρά είναι οι δείκτες επιπέδου 0. Οι δείκτες που συνδέουν τα (k * 2 i ) οστά στοιχεία (k 1) είναι οι δείκτες επιπέδου i. Ένας κόµβος κεφαλή δείχνει στον 1ο κόµβο κάθε επιπέδου. Χρειάζονται το πολύ 1+logn δείκτες ανά στοιχείο για µια λίστα παράλειψης µε n στοιχεία. Τα περισσότερα στοιχεία δεν χρειάζεται να κρατούν τόσους πολλούς δείκτες: Μόνο τα µισά στοιχεία χρειάζονται έναν ακόµη δείκτη, και από αυτά µόνο τα µισά έναν ακόµη, κ.ο.κ. Χώρος n + n/2 + n/4 + + 1 2 n 3

Λίστες Παράλειψης Αλγόριθµος Αναζήτησης κλειδιού Κ Ξεκινώντας µε τους δείκτες του υψηλότερου επιπέδου: Ακολούθησε δείκτες µέχρι να βρεθεί ένα στοιχείο µε κλειδί t το οποίο είναι Κ. Αν t = Κ, τότε το κλειδί Κ βρέθηκε! αλλιώς (δηλ., t > Κ), οπισθοδροµούµε στο προηγούµενο στοιχείο και επαναλαµβάνουµε ακολουθώντας δείκτες του επόµενου χαµηλότερου επιπέδου. Αν εκτελώντας την παραπάνω διαδικασία στο επίπέδο 0, βρούµε κλειδί t > Κ, τότε το κλειδί Κ δεν υπάρχει στη λίστα παράλειψης. Πως γίνεται η οπισθοδρόµηση; Σε µια τέλεια οργανωµένη λίστα παράλειψης, ποια θα ήταν η πολυπλοκότητα του αλγορίθµου; Είναι οι τέλεια οργανωµένες λίστες παράλειψης πρακτικές στην περίπτωση που έχουµε εισαγωγές και εξαγωγές στοιχείων; 4

Υλοποίηση Λειτουργίας Αναζήτησης Ν: µέγιστο δυνατό πλήθος στοιχείων της λίστας MaxLevel = logn : µέγιστο δυνατό επίπεδο Κάθε κόµβος µιας λίστας παράλειψης έχει πεδία: o Key o Info o έναν πίνακα Forward από δείκτες. Η λίστα παράλειψης είναι δοµή µε πεδία: o Header: δείκτης σε dummy node (που περιέχει πίνακα Forward από MaxLevel δείκτες). Ο δείκτης Header->Forward[j] δείχνει στον πρώτο κόµβο στο επιπέδου j. o Level: ακέραιος (=το τρέχον µέγιστο επίπεδο) Αρχικά, Level = 0, και όλοι οι δείκτες NULL. function SkipListLookUp(key K, slist_ptr L): item_ptr /* επιστρέφει δείκτη στον κόµβο µε κλειδί Κ εάν υπάρχει στη λίστα παράλειψης, διαφορετικά NULL */ P = L->Header; for j from L->Level downto 0 do while ((P->Forward[j])->Key < K) do P = P->Forward[j]; P = P->Forward[0]; if (P->Key == K) return P; else return NULL; 5

Λίστες Παράλειψης Μη-τέλεια οργανωµένες λίστες παράλειψης εισάγουµε τυχαιότητα στην κατασκευή Βασική Ιδέα Για κάθε επίπεδο: έχουµε «περίπου» το ίδιο πλήθος κόµβων όπως και στην τέλεια οργανωµένη λίστα (δηλ., το επίπεδο i+1 έχει περίπου τους µισούς κόµβους από ότι το επίπεδο i), αλλά οι κόµβοι αυτοί είναι διασκορπισµένοι τυχαία µέσα στη λίστα του επιπέδου. Η εισαγωγή γίνεται ως εξής: βρίσκουµε την κατάλληλη θέση εισαγωγής στη λίστα του επιπέδου 0 (που περιέχει όλα τα στοιχεία), επιλέγουµε το επίπεδου του κόµβου µε τυχαίο τρόπο, αλλά µε βάση τον κανόνα: «Για κάθε επίπεδο j, η πιθανότητα να επιλεγεί το j ως επίπεδο του κόµβου είναι διπλάσια από την πιθανότητα να επιλεγεί το j+1». συνδέουµε τον κόµβο στις λίστες των επιπέδων. 6

Υλοποίηση Λειτουργίας Εισαγωγής function RandomLevel(): integer /* τυχαίο επίπεδο µεταξύ 0 και MaxLevel */ v = 0; while (Random() < ½ && v < MaxLevel) do v = v+1; return v; procedure SkipListInsert(key K, info I, slist_ptr L) /* εισάγει πληροφορία Ι µε κλειδί Κ στη λίστα παράλειψης L */ P = L->Header; for j from L->Level downto 0 while ((P->Forward[j])->Key < K) do P = P->Forward[j]; Update[j] = P; /* πίνακας προηγούµενων κόµβων*/ P = P->Forward[0]; if (P->Key == K) P->Info = I; /* ενηµέρωση */ else NewLevel = RandomLevel(); if (NewLevel > L->Level) for j from L->Level+1 to NewLevel do Update[j] = L->Header; L->Level = NewLevel; /* κατασκευή νέου κόµβου & σύνδεση */ P = new_struct(skiplistnode); P->Key = K; P->Info = I; for i from 0 to NewLevel /* σύνδεση */ P->Forward[i] = (Update[i])->Forward[i] ; (Update[i])->Forward[i] = P; 7