Διαχρονικές δομές δεδομένων

Σχετικά έγγραφα
Δυναμική Διατήρηση Γραμμικής Διάταξης

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Εισαγωγή ενός νέου στοιχείου. Επιλογή i-οστoύ στοιχείου : Εύρεση στοιχείου με το i-οστό μικρότερο κλειδί

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

Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης

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

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

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

Κεφάλαιο 14 Προηγμένες Ουρές Προτεραιότητας

Κεφάλαιο 8 Ισορροπημένα Δένδρα Αναζήτησης

Δομές Δεδομένων και Αλγόριθμοι. Λουκάς Γεωργιάδης

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 10 Δυαδικά Δένδρα Αναζήτησης

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση

Ουρά Προτεραιότητας (priority queue)

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

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

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

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

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

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

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

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

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

Κατανεμημένα Συστήματα Ι

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

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

Αντισταθμιστική ανάλυση

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

ΟΠΣ-ΕΣΠΑ : Ειδική Υπηρεσία Ολοκληρωμένου Πληροφοριακού Συστήματος ΕΚΠΑΙΔΕΥΤΙΚΟΣ ΟΔΗΓΟΣ ΓΙΑ ΤΗ ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ ΚΕΝΤΡΙΚΟΥ ΛΟΓΑΡΙΑΣΜΟΥ

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

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

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

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

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

ΟΠΣ-ΕΣΠΑ : Ειδική Υπηρεσία Ολοκληρωμένου Πληροφοριακού Συστήματος ΕΚΠΑΙΔΕΥΤΙΚΟΣ ΟΔΗΓΟΣ ΓΙΑ ΤΗ ΛΕΙΤΟΥΡΓΙΑ ΤΟΥ ΚΕΝΤΡΙΚΟΥ ΛΟΓΑΡΙΑΣΜΟΥ

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

13/5/2015 ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ. Δομές Δεδομένων. Ουρές Προτεραιότητας

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

Μέγιστη ροή. Κατευθυνόμενο γράφημα. Συνάρτηση χωρητικότητας. αφετηρίακός κόμβος. τερματικός κόμβος. Ροή δικτύου. με τις ακόλουθες ιδιότητες

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

Vodafone Business Connect

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

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

Κατανεμημένα Συστήματα Ι

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

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

Μελετάμε την περίπτωση όπου αποθηκεύουμε ένα (δυναμικό) σύνολο στοιχειών. Ένα στοιχείο γράφεται ως, όπου κάθε.

ΟΥΡΕΣ ΠΡΟΤΕΡΑΙΟΤΗΤΑΣ

Δυναμικά Πολυεπίπεδα Ευρετήρια (Β-δένδρα) Μ.Χατζόπουλος 1

Δομές Αναζήτησης. κλειδί από ολικά διατεταγμένο σύνολο. Θέλουμε να υποστηρίξουμε δύο βασικές λειτουργίες: Εισαγωγή ενός νέου στοιχείου

Εισαγωγή στην επιστήμη των υπολογιστών

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

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

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

ΛΥΣΗ ΤΗΣ ΔΕΥΤΕΡΗΣ ΑΣΚΗΣΗΣ Όλγα Γκουντούνα

Ισοζυγισμένα υαδικά έντρα Αναζήτησης

Κεφάλαιο 11 Ένωση Ξένων Συνόλων

Εγκατάσταση αρχείων βιβλιοθήκης VHOPE και VHOPE

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

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

Διάλεξη 18: B-Δένδρα

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

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύ

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

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

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

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

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

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Κεφάλαιο 10 Ψηφιακά Λεξικά

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

Ουρά Προτεραιότητας (priority queue)

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

Προσεγγιστικοί Αλγόριθμοι

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ. Πρόγραμμα Διαχείρισης Α.Π.Δ.

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

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

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

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

Οι δυναμικές δομές δεδομένων στην ΑΕΠΠ

Διάλεξη 14: Δέντρα IV - B-Δένδρα

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Αναπαράσταση Αριθμών

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Βασικές δοµές δεδοµένων. Ορολογία λιστών. 8.1 Βασικές έννοιες δοµών δεδοµένων 8.2 Υλοποίηση δοµών δεδοµένων 8.3 Μια σύντοµη υπόθεση εργασίας

Διάλεξη 17: Συμφωνία με Βυζαντινά Σφάλματα. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

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

Σχεδίαση και Ανάλυση Αλγορίθμων

4.1 Άνοιγμα υπάρχοντος βιβλίου εργασίας

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

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

Σχεδίαση & Ανάλυση Αλγορίθμων

Εργαστηριακός Οδηγός. Βάσεις Δεδομένων της Γ' Τάξης ΕΠΑΛ

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

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

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

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

Διαίρει και Βασίλευε. πρόβλημα μεγέθους Ν. διάσπαση. πρόβλημα μεγέθους k. πρόβλημα μεγέθους Ν-k

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Σχεδίαση Βάσεων Δεδομένων

3η Σειρά Γραπτών Ασκήσεων

Transcript:

Διαχρονικές δομές δεδομένων Μια τυπική δομή δεδομένων μεταβάλλεται με πράξεις εισαγωγής ή διαγραφής Π.χ. κοκκινόμαυρο δένδρο εισαγωγή 0 18 0 5 39 73 1 46 6 80 Αποκατάσταση ισορροπίας 5 39 73 0 46 6 80 18 1 Μια τέτοια δομή είναι εφήμερη: Δεν έχουμε πρόσβαση στις προηγούμενες καταστάσεις (εκδοχές) της δομής. Διαχρονική δομή: Επιτρέπει την πρόσβαση σε όλες τις εκδοχές της δομής.

Διαχρονικές δομές δεδομένων Διαχρονική δομή: Επιτρέπει την πρόσβαση σε όλες τις εκδοχές της δομής. εισαγωγή διαγραφή 0 1 3 4 5 6 7 8 9 10 11 εκδοχές

Διαχρονικές δομές δεδομένων Διαχρονική δομή: Επιτρέπει την πρόσβαση σε όλες τις εκδοχές της δομής. Μερική Διαχρονικότητα: Επιτρέπει την πρόσβαση σε όλες τις εκδοχές της δομής, αλλά είναι δυνατόν να τροποποιηθεί μόνο η τελευταία εκδοχή. Ολική Διαχρονικότητα: Επιτρέπει τόσο την πρόσβαση όσο την τροποποίηση σε όλες τις εκδοχές της δομής. Για να υποστηρίξουμε τη διαχρονικότητα της δομής εισάγουμε την ακόλουθη παράμετρο : Αριθμός εκδοχής: Η αρχική δομή αποτελεί την εκδοχή 0. Η i-οστή πράξη τροποποίησης δημιουργεί την εκδοχή i. Παράμετροι απόδοσης: αριθμός στοιχείων στην τρέχουσα εκδοχή συνολικός αριθμός τροποποιήσεων

Διαχρονικές δομές δεδομένων Απλοϊκές λύσεις Κάθε εκδοχή δημιουργεί ένα πλήρες αντίγραφο. εκδοχή 0 1 3 4 5 6 7 head tail α β γ δ ε ins(0,α) ins(1,δ) ins(,ε) ins(3,γ) del(4,a) ins(5,β) del(5,γ)

Διαχρονικές δομές δεδομένων Απλοϊκές λύσεις Κάθε εκδοχή δημιουργεί ένα πλήρες αντίγραφο. Απαιτεί χρόνο και χώρο ανά τροποποίηση. Δεν αποθηκεύουμε καμία εκδοχή, αλλά μόνο την ακολουθία τροποποιήσεων. Για να πραγματοποιήσουμε μια πρόσβαση στην i-οστή εκδοχή κατασκευάζουμε τη δομή έως αυτή την εκδοχή από την αρχή. Απαιτεί χρόνο για την κάθε πρόσβαση στην i-οστή εκδοχή. Συνδυασμός των δύο παραπάνω: Αποθηκεύουμε κάθε k-οστή εκδοχή. Για να πραγματοποιήσουμε μια πρόσβαση στην i-οστή εκδοχή κατασκευάζουμε τη δομή έως αυτή την εκδοχή από την εκδοχή. Για οποιαδήποτε επιλογή του k έχουμε αύξηση χώρου ή χρόνου κατά παράγοντα

Διαχρονικές δομές δεδομένων [Driscoll, Sarnak, Sleator and Tarjan 89] : Γενικές μέθοδοι μετατροπής εφήμερης δομής σε διαχρονική. Υποθέτουμε ότι η εφήμερη δομή που θα μετατρέψουμε σε διαχρονική αποθηκεύει τα δεδομένα σε συνδετικά στοιχεία, δηλαδή σε κόμβους που συνδέονται με δείκτες (π.χ. συνδεδεμένη λίστα, δένδρο αναζήτησης κλπ) Για το χειρισμό της δομής έχουμε : πεδία πληροφορίας (π.χ. μέγεθος της δομής) πεδία προσβάσεως (π.χ. δείκτης στη ρίζα του δένδρου) Κάθε εφήμερος κόμβος αποθηκεύει : πεδία πληροφορίας (π.χ. κλειδί, πληροφορία ισορροπίας κλπ) πεδία συνδέσεως (π.χ. αριστερό/δεξί παιδί, γονέας κλπ) εφήμερος κόμβος πεδία πληροφορίας πεδία συνδέσεως

Διαχρονικές δομές δεδομένων Γενική Ιδέα Αποθηκεύουμε τους δείκτες προσβάσεως της δομής σε ένα πίνακα ο οποίος δεικτοδοτείται από τον αριθμό εκδοχής. εκδοχή 0 1 3 δείκτης προσβάσεως m Η δομή αποτελείται από διαχρονικούς κόμβους οι οποίοι αποθηκεύουν τα ίδια πεδία με τους εφήμερους κόμβους, αλλά πολλαπλές φορές. Κάθε τιμή ενός πεδίου φέρει μια «ετικέτα εκδοχής» στην οποία αναγράφεται ο αριθμός της εκδοχής που τροποποίησε το πεδίο. Οι ετικέτες εκδοχής βοηθούν για την πλοήγηση στις κατάλληλες εκδοχές της δομής.

Μερική διαχρονικότητα με «μακρείς κόμβους» Κάθε διαχρονικός κόμβος μπορεί να αποθηκεύσει ένα αυθαίρετο αριθμό από τιμές κάθε πεδίου. Κάθε τιμή ενός πεδίου φέρει μια «ετικέτα εκδοχής» στην οποία αναγράφεται ο αριθμός της εκδοχής που τροποποίησε το πεδίο. Επιπλέον, ένας διαχρονικός κόμβος φέρει τη δική του ετικέτα εκδοχής, η οποία υποδεικνύει την εκδοχή στην οποία δημιουργήθηκε ο κόμβος. Πλοήγηση στην i-οστή εκδοχή: διαχρονικός κόμβος Ξεκινάμε από τον κατάλληλο δείκτη προσβάσεως της i-οστής εκδοχής. Όταν βρισκόμαστε σε ένα διαχρονικό κόμβο P και θέλουμε να ανακτήσουμε την τιμή ενός πεδίου f, αναζητούμε την τιμή του πεδίου με μέγιστη ετικέτα χρόνο για να βρούμε την κατάλληλη ετικέτα εκδοχή 5 9 πρόσβαση στην εκδοχή 1 15 18 όταν έχουμε εκδοχές.

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Γ Ε

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Γ Ε 3 Μ

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Α 4 Γ Ε 3 Μ

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ Μ 5 Α Π

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ 6 Μ 5 Α Ι Π

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ 6 Μ 5 Α Ι 7 Π Η

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ 6 Μ 5 Α Ι 7 8 Π Η Λ

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ 6 Μ 5 Α Ι 7 8 Π Η 9 Κ Λ

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ 6 Μ 5 Α Ι 7 8 10 Π Η 9 Λ Ο Κ

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ 6 Μ 5 11 Α Ι 11 7 8 Η Λ 9 10 Ο Π 11 Κ

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε 3 4 Γ 6 Μ 5 11 Α 1 Ι 11 7 8 Η Λ 9 10 Ο Π 11 Κ

Μερική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 13 Ε 3 13 4 Γ 13 6 Μ 5 11 Α 1 Ι 11 7 8 Η Λ 9 10 Ο Π 11 Κ

Ολική διαχρονικότητα με «μακρείς κόμβους» Στην περίπτωση της ολικής διαχρονικότητας, οι εκδοχές της δομής δεν είναι ολικά διατεταγμένες, αλλά αναπαριστώνται από ένα δένδρο εκδοχών. Μερική Διαχρονικότητα 0 1 3 4 5 ins(0,a) ins(1,d) ins(,c) ins(3,b) del(4,d) = επιτρέπεται μόνο προσπέλαση = επιτρέπεται προσπέλαση και τροποποίηση

Ολική διαχρονικότητα με «μακρείς κόμβους» Στην περίπτωση της ολικής διαχρονικότητας, οι εκδοχές της δομής δεν είναι ολικά διατεταγμένες, αλλά αναπαριστώνται από ένα δένδρο εκδοχών. Ολική Διαχρονικότητα 0 1 ins(0,a) 6 ins(1,b) ins(1,d) 7 del(6,a) 5 ins(,b) ins(,c) 3 9 ins(7,c) del(3,a) 4 ins(4,b) 8

Ολική διαχρονικότητα με «μακρείς κόμβους» Στην περίπτωση της ολικής διαχρονικότητας, οι εκδοχές της δομής δεν είναι ολικά διατεταγμένες, αλλά αναπαριστώνται από ένα δένδρο εκδοχών : Η πλοήγηση πρέπει να γίνει με βάση τη θέση των εκδοχών στο δένδρο και όχι με βάση τις τιμές τους. 0 διαχρονικός κόμβος εκδοχή 5 6 8 6 ins(1,b) 1 ins(0,a) ins(1,d) πρόσβαση στην εκδοχή 9 7 del(6,a) 5 ins(,b) ins(,c) 3 9 ins(7,c) del(3,a) 4 ins(4,b) 8

Ολική διαχρονικότητα με «μακρείς κόμβους» Στην περίπτωση της ολικής διαχρονικότητας, οι εκδοχές της δομής δεν είναι ολικά διατεταγμένες, αλλά αναπαριστώνται από ένα δένδρο εκδοχών : Η πλοήγηση πρέπει να γίνει με βάση τη θέση των εκδοχών στο δένδρο και όχι με βάση τις τιμές τους. 0 Προδιάταξη εκδοχών: διαχρονικός κόμβος 1 0, 1, 6, 7, 9,, 5, 3, 4, 8 εκδοχή 5 6 8 6 7 9 5 3 4 πρόσβαση στην εκδοχή 9 8 Αναζήτηση πεδίου f στην i-οστή εκδοχή: Αναζητούμε το πεδίο f με ετικέτα εκδοχής j, όπου j η δεξιότερη εκδοχή του πεδίου f που δεν είναι στα δεξιά της i στην προδιάταξη των εκδοχών.

Ολική διαχρονικότητα με «μακρείς κόμβους» Εισαγωγή νέας εκδοχής στο δένδρο εκδοχών Η νέα εκδοχή τοποθετείται στην προδιάταξη εκδοχών αμέσως μετά τον γονέα της στο δένδρο εκδοχών. 0 1 Προδιάταξη εκδοχών: 0, 1, 6, 10, 7, 9,, 5, 3, 4, 8 6 τροποποιεί την εκδοχή 6 10 7 5 3 9 4 8

Ολική διαχρονικότητα με «μακρείς κόμβους» Διαστήματα εκδοχών Έστω διαχρονικός κόμβος x που αποθηκεύει ένα πεδίο f. Οι ετικέτες εκδοχών των τιμών του πεδίου f διαμερίζουν το σύνολο όλων των εκδοχών τη δομής. Έστω η προδιάταξη όλων των εκδοχών της δομής. Μια τιμή v του πεδίου f με ετικέτα έχει διάστημα εκδοχών, όπου είναι η αμέσως επόμενη ετικέτα τιμής του πεδίου f που είναι αποθηκευμένη στον κόμβο x. (Αν δεν υπάρχει η, τότε.) διαχρονικός κόμβος 6 0 1 Προδιάταξη εκδοχών: 0, 1, 6, 10, 7, 9,, 5, 3, 4, 8 εκδοχή 0 6 4 10 7 9 5 3 4 8

Ολική διαχρονικότητα με «μακρείς κόμβους» Διαστήματα εκδοχών Η δημιουργία μιας νέας εκδοχής αλλάζει τα διαστήματα εκδοχών : διαχρονικός κόμβος 0 Προδιάταξη εκδοχών: εκδοχή 0 4 6 11 εκδοχή 4 0 10 6 11 7 9 1 5 3 4 8 0, 1, 6, 10, 7, 11, 9,, 5, 3, 4, 8 Το διάστημα της εκδοχής 6 διαιρείται. Για να μπορεί να γίνει σωστή πλοήγηση πρέπει να εισαχθεί στον κόμβο x η τιμή v του πεδίου f με ετικέτα 9, όπου v η τιμή που αντιστοιχεί στην ετικέτα 6. 6 9 11

Ολική διαχρονικότητα με «μακρείς κόμβους» Διαστήματα εκδοχών Η δημιουργία μιας νέας εκδοχής αλλάζει τα διαστήματα εκδοχών : διαχρονικός κόμβος εκδοχή 4 0 0 1 Προδιάταξη εκδοχών: 0, 1, 6, 10, 7, 11, 9,, 5, 3, 4, 8 6 9 6 11 10 7 5 3 11 9 4 8

Ολική διαχρονικότητα με «μακρείς κόμβους» Λειτουργίες τροποποίησης Θεωρούμε την i-οστή λειτουργία τροποποίησης της δομής, η οποία δημιουργεί την i-οστή εκδοχή. Έστω ότι η λειτουργία τροποποιεί το πεδίο f του κόμβου x. Εντοπίζουμε στον x τις τιμές v 1 και v του πεδίου f με ετικέτες i 1 και i αντίστοιχα, όπου η i 1 είναι η δεξιότερη, στην προδιάταξη, εκδοχή του πεδίου f στον x που βρίσκεται πριν την εκδοχή i και i είναι η αριστερότερη, στην προδιάταξη, εκδοχή του πεδίου f στον x που βρίσκεται μετά την εκδοχή i. Έστω j η αμέσως επόμενη εκδοχή από την i στην προδιάταξη των εκδοχών. προδιάταξη εκδοχών τιμές του πεδίου f στον κόμβο x τιμές ετικέτες

Ολική διαχρονικότητα με «μακρείς κόμβους» Λειτουργίες τροποποίησης Θεωρούμε την i-οστή λειτουργία τροποποίησης της δομής, η οποία δημιουργεί την i-οστή εκδοχή. Έστω ότι η λειτουργία τροποποιεί το πεδίο f του κόμβου x. Εντοπίζουμε στον x τις τιμές v 1 και v του πεδίου f με ετικέτες i 1 και i αντίστοιχα, όπου η i 1 είναι η δεξιότερη, στην προδιάταξη, εκδοχή του πεδίου f στον x που βρίσκεται πριν την εκδοχή i και i είναι η αριστερότερη, στην προδιάταξη, εκδοχή του πεδίου f στον x που βρίσκεται μετά την εκδοχή i. Έστω j η αμέσως επόμενη εκδοχή από την i στην προδιάταξη των εκδοχών. Εκτελούμε τα παρακάτω βήματα : Εισάγουμε την κατάλληλη νέα τιμή του πεδίου με ετικέτα. Αν ή αν η εκδοχή υπάρχει αλλά η εκδοχή δεν υπάρχει τότε προσθέτουμε στο πεδίο του κόμβου ένα νέο αντίγραφο της τιμής με ετικέτα.

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 Ε

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 ins(1,γ) Ε Γ

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 ins(1,γ) Ε 3 ins(,μ) 3 Γ Μ

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 ins(1,γ) Ε 3 ins(,μ) 3 Γ 4 Μ ins(3,i) 4 Ι

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 ins(1,γ) Ε 3 5 ins(,μ) 3 Γ 4 Μ ins(3,i) 4 Ι del(4,m) 5

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 6 ins(1,a) ins(1,γ) 6 Ε 3 5 ins(,μ) 3 A Γ 4 Μ ins(3,i) 4 Ι del(4,m) 5

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 6 7 ins(1,a) ins(6,h) ins(1,γ) ins(,μ) 3 A 6 Γ Ε 7 Η 3 4 5 Μ ins(3,i) 4 Ι del(4,m) 5

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 6 7 ins(1,a) ins(6,h) ins(1,γ) 8 ins(,α) ins(,μ) 3 ins(3,i) 4 A 6 Α 8 Γ 3 Ε 7 Η 3 Ι 4 5 Μ del(4,m) 5

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 6 7 ins(1,a) ins(6,h) ins(1,γ) 8 ins(,α) ins(,μ) 3 9 ins(8,μ) ins(3,i) 4 A 6 Α 8 Γ 3 Ε 7 5 3 9 Η Μ Μ 4 Ι del(4,m) 5

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1 6 7 10 ins(1,a) ins(6,h) ins(7,k) ins(1,γ) 8 ins(,α) ins(,μ) 3 9 ins(8,μ) ins(3,i) 4 A 6 Α 8 Γ 3 Ε 7 5 3 9 Η Μ Μ 4 10 Κ Ι del(4,m) 5

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1-10, 1 11 6 7 10 ins(1,a) ins(6,h) ins(7,k) ins(1,γ) 8 ins(,α) ins(,μ) 3 9 ins(8,μ) ins(3,i) 4 A 6 Α 8 Γ 3 Ε 7 5 3 9 Η Μ Μ 4 10 Κ Ι 11 del(10,e) del(4,m) 5 11

Ολική διαχρονικότητα με «μακρείς κόμβους» Παράδειγμα 0 1 ins(0,e) 1-10, 1 11 6 7 10 11 ins(1,a) ins(6,h) ins(7,k) del(10,e) ins(1,γ) 8 ins(,α) ins(,μ) 3 9 ins(8,μ) ins(3,i) 4 del(4,m) 5 A 6 Α 8 11 Γ 3 Ε 7 5 3 9 Η Μ Μ 4 10 Κ Ι 1 Ο ins(5,o) 1

Ολική διαχρονικότητα με «μακρείς κόμβους» Για τη διατήρηση μιας προδιάταξης του δένδρου εκδοχών χρησιμοποιούμε την ακόλουθη δομή δεδομένων. Δομή Δυναμικής Διατήρησης Γραμμικής Διάταξης Διατηρεί μια γραμμική διάταξη δυναμικά μεταβαλλόμενης συλλογής στοιχείων. Υποστηρίζει τις λειτουργίες: Εισαγωγή νέου στοιχείου y αμέσως μετά από το στοιχείο x. x y Έλεγχος της σειράς διάταξης δύο στοιχείων x και y. y x Προσεχώς: Δομές που επιτυγχάνουν χρόνο Ο(1) ανά πράξη

Ολική διαχρονικότητα με «μακρείς κόμβους» Επιδόσεις Χώρος ανά βήμα τροποποίησης (χειρότερη περίπτωση) Χρόνος ανά βήμα πρόσβασης/τροποποίησης (χειρότερη περίπτωση)

Μερική διαχρονικότητα με «διάσπαση κόμβων» Στόχος : Επιβάρυνση αναζήτησης. σε χώρο και χρόνο ανά βήμα τροποποίησης ή Παρατήρηση : Κατά την πλοήγηση σε μια διαχρονική δομή με «μακρείς κόμβους» επαναλαμβάνουμε σε κάθε διαχρονικό κόμβο την αναζήτηση της κατάλληλης ετικέτας. διαχρονικός κόμβος πρόσβαση στην εκδοχή 1 εκδοχή 5 5 9 18 15 Όταν μεταβαίνουμε από τον κόμβο x στον κόμβο y, η αναζήτηση στον x μπορεί να διευκολύνει την αναζήτηση στον y 10 11 15

Μερική διαχρονικότητα με «διάσπαση κόμβων» Ιδέα : Κάθε διαχρονικός κόμβος αποθηκεύει ένα σταθερό αριθμό τιμών για κάθε πεδίο. Αν δεν υπάρχει διαθέσιμος χώρος σε ένα κόμβο x δημιουργούμε νέο αντίγραφο του κόμβου, στο οποίο αποθηκεύουμε μόνο τις νεότερες τιμές κάθε πεδίου. διαχρονικός κόμβος x διαχρονικός κόμβος x αντίγραφο του x τιμή πεδίου f α γ β ε α γ β ε δ ετικέτα εκδοχής 1 3 4 6 τροποποίηση πεδίου f για την εκδοχή 9 1 3 4 6 9 Για απλότητα, θα θεωρήσουμε ότι κάθε διαχρονικός κόμβος αποθηκεύει μόνο μία τιμή ενός πεδίου πληροφορίας, αλλά πολλαπλές τιμές ενός πεδίου συνδέσεως (δείκτη).

Μερική διαχρονικότητα με «διάσπαση κόμβων» Ιδέα : Κάθε διαχρονικός κόμβος αποθηκεύει ένα σταθερό αριθμό τιμών για κάθε πεδίο. Αν δεν υπάρχει διαθέσιμος χώρος σε ένα κόμβο x δημιουργούμε νέο αντίγραφο x του κόμβου x στο οποίο αποθηκεύουμε μόνο τις νεότερες τιμές κάθε πεδίου. Προσοχή : Οι προκάτοχοι του x (κόμβοι y που δείχνουν στον x) θα πρέπει επίσης να συνδεθούν με το νέο αντίγραφο του x. y y x δημιουργία αντίγραφου του x x x

Μερική διαχρονικότητα με «διάσπαση κόμβων» Ιδέα : Κάθε διαχρονικός κόμβος αποθηκεύει ένα σταθερό αριθμό τιμών για κάθε πεδίο. Αν δεν υπάρχει διαθέσιμος χώρος σε ένα κόμβο x δημιουργούμε νέο αντίγραφο x του κόμβου x στο οποίο αποθηκεύουμε μόνο τις νεότερες τιμές κάθε πεδίου. Προσοχή : Οι προκάτοχοι του x (κόμβοι y που δείχνουν στον x) θα πρέπει επίσης να συνδεθούν με το νέο αντίγραφο του x. Αν ο y δεν έχει διαθέσιμο χώρο για το νέο δείκτη στον x τότε πρέπει να γίνει αντιγραφή και του y. Η διαδικασία αυτή μπορεί να συνεχιστεί και σε άλλους κόμβους. y y y x δημιουργία αντιγράφων των x και y x x

Μερική διαχρονικότητα με «διάσπαση κόμβων» Ιδέα : Κάθε διαχρονικός κόμβος αποθηκεύει ένα σταθερό αριθμό τιμών για κάθε πεδίο. Αν δεν υπάρχει διαθέσιμος χώρος σε ένα κόμβο x δημιουργούμε νέο αντίγραφο x του κόμβου x στο οποίο αποθηκεύουμε μόνο τις νεότερες τιμές κάθε πεδίου. Προσοχή : Οι προκάτοχοι του x (κόμβοι y που δείχνουν στον x) θα πρέπει επίσης να συνδεθούν με το νέο αντίγραφο του x. Αν ο y δεν έχει διαθέσιμο χώρο για το νέο δείκτη στον x τότε πρέπει να γίνει αντιγραφή και του y. Η διαδικασία αυτή μπορεί να συνεχιστεί και σε άλλους κόμβους. Μπορούμε να επιτύχουμε αντισταθμιστικό φράγμα για τον αριθμό των κόμβων που αντιγράφονται ανά βήμα τροποποίησης (και επομένως για το χρόνο που απαιτείται) με την προϋπόθεση ότι κάθε εφήμερος κόμβος έχει ένα σταθερό αριθμό προκατόχων.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Υποθέτουμε ότι κάθε εφήμερος κόμβος έχει : πεδία δεικτών προκατόχους, όπου Ένας διαχρονικός κόμβος έχει χώρο για δείκτες : δείκτες αντιστοιχούν στα πεδία δεικτών του εφήμερου κόμβου (πρωτότυποι δείκτες) δείκτες σε προκατόχους επιπλέον δείκτες, όπου δείκτης σε κάποιο αντίγραφο του διαχρονικού κόμβου Κάθε επιπλέον δείκτης φέρει μια «ετικέτα εκδοχής». Ο διαχρονικός κόμβος φέρει τη δική του ετικέτα εκδοχής, η οποία υποδεικνύει την εκδοχή στην οποία δημιουργήθηκε ο κόμβος. Οι πρωτότυποι δείκτες έχουν την ίδια ετικέτα εκδοχής με τον διαχρονικό κόμβο.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Ένας εφήμερος κόμβος αντιστοιχεί σε μια «οικογένεια» διαχρονικών κόμβων. Οι διαχρονικοί κόμβοι σχηματίζουν μια συνδεδεμένη λίστα, χρησιμοποιώντας τους δείκτες αντιγράφου, σε αύξουσα σειρά εκδοχής. x [] x [5] x [6] x [9] δείκτης αντιγράφου Ο τελευταίος κόμβος της λίστας είναι ενεργός (μπορεί να τροποποιηθεί). Οι υπόλοιποι κόμβοι είναι ανενεργοί. Οι ενεργοί κόμβοι και οι νεότερες τιμές των πεδίων τους αντιπροσωπεύουν την πιο πρόσφατη εκδοχή της εφήμερης δομής. Ένας δείκτης στη διαχρονική δομή είναι ενεργός αν αντιστοιχεί σε δείκτη της νεότερης εκδοχής της εφήμερης δομής.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Κάθε ενεργός δείκτης έχει έναν «αντίστροφο» δείκτη : Αν ο ενεργός διαχρονικός κόμβος x έχει ένα ενεργό δείκτη προς τον ενεργό διαχρονικό κόμβο y, τότε ο y έχει έναν αντίστροφο δείκτη προς τον x. ενεργός δείκτης x αντίστροφος δείκτης y Ο αντίστροφος δείκτης αποθηκεύεται σε ένα από τα προκατόχους. πεδία δεικτών σε Πρόσβαση στη διαχρονική δομή Αποθηκεύουμε τους δείκτες προσβάσεως της δομής σε ένα πίνακα όπως και στη δομή με «μακρείς κόμβους»: Η πλοήγηση στη διαχρονική δομή με «διάσπαση κόμβων» γίνεται με τον ίδιο ακριβώς τρόπο, μόνο που τώρα κάθε βήμα πρόσβασης εκτελείται σε χρόνο.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Θεωρούμε την i-οστή λειτουργία τροποποίησης της δομής, η οποία δημιουργεί την i-οστή εκδοχή. Κατά τη διάρκεια της τροποποίησης, η διαχρονική δομή προσομοιώνει τα βήματα τροποποίησης της εφήμερης δομής. Διατηρούμε ένα σύνολο S των διαχρονικών κόμβων έχουμε διασπάσει (δηλαδή έχουμε δημιουργήσει αντίγραφο τους). Αρχικά το S είναι κενό. Αν η τροποποίηση της εφήμερης δομής δημιουργεί ένα νέο κόμβο, τότε η διαχρονική δομή δημιουργεί ένα νέο διαχρονικό κόμβο με ετικέτα εκδοχής i.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Έστω ότι κατά την i-οστή λειτουργία τροποποίησης, η εφήμερη δομή τροποποιεί την τιμή v ενός πεδίου πληροφορίας f του εφήμερου κόμβου χ. Στη διαχρονική δομή εξετάζουμε τον αντίστοιχο διαχρονικό κόμβο x : Aν η ετικέτα του x είναι i τότε απλά αλλάζουμε την τιμή του πεδίου f σε v. Αν η ετικέτα του x είναι μικρότερη από i και ο x έχει αντίγραφο x, τότε η ετικέτα του x πρέπει να είναι i και απλά αλλάζουμε την τιμή του πεδίου f στον x σε v. Αν η ετικέτα του x είναι μικρότερη από i και ο x δεν έχει αντίγραφο, τότε δημιουργούμε διαχρονικό κόμβο x με ετικέτα i, κάνουμε τον δείκτη αντιγράφου του x να δείχνει στον x και αντιγράφουμε στον x τις νεότερες τιμές των πεδίων πληροφορίας του x, εκτός του πεδίου f στο οποίο δίνουμε την τιμή v. Επιπλέον πρέπει να προσθέσουμε στον x τις πιο πρόσφατες τιμές των δεικτών του εφήμερου κόμβου χ.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Η ενημέρωση των πεδίων δεικτών του x απαιτεί να τροποποιηθούν ανάλογα και οι αντίστροφοι δείκτες. Έστω ότι ο x περιέχει ένα δείκτη προς τον κόμβο y ως την πιο πρόσφατη τιμή ενός πεδίου f. Αποθηκεύουμε σε ένα πεδίο των πρωτότυπων δεικτών του x ένα δείκτη προς τον y, ή προς το αντίγραφο y του y, αν ο y έχει προηγουμένως διασπαστεί. Διαγράφουμε από τον y το δείκτη προς τον x που είναι αποθηκευμένος σε κάποιο από τα πεδία προκατόχου. Αποθηκεύουμε ένα δείκτη προς τον x σε πεδίο προκατόχου του y, αν δεν υπάρχει ο y, ή του y αν αυτός υπάρχει. x x Όταν ολοκληρωθεί η συμπλήρωση όλων των πρωτότυπων δεικτών του x, προσθέτουμε τον x στο σύνολο S. y y

Μερική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Η τροποποίηση ενός πεδίου δείκτη είναι ανάλογη. Έστω ότι κατά την i-οστή τροποποίηση, η εφήμερη δομή τροποποιεί την τιμή v ενός πεδίου δείκτη f του εφήμερου κόμβου χ. Στη διαχρονική δομή εξετάζουμε τον αντίστοιχο διαχρονικό κόμβο x : Aν η ετικέτα του x είναι i τότε απλά αλλάζουμε την τιμή του πεδίου f σε v. Αν η ετικέτα του x είναι μικρότερη από i και ο x έχει αντίγραφο x, τότε η ετικέτα του x πρέπει να είναι i και απλά αλλάζουμε την τιμή του πεδίου f στον x σε v. Αν η ετικέτα του x είναι μικρότερη από i και ο x δεν έχει αντίγραφο, τότε εξετάζουμε αν ο x έχει χώρο (στα πεδία επιπλέον δεικτών) για ακόμα ένα δείκτη. Αν ναι τότε αποθηκεύουμε εκεί τον δείκτη v με όνομα πεδίου f και ετικέτα i. Διαφορετικά δημιουργούμε αντίγραφο x του x, όπως περιγράψαμε πριν, και προσθέτουμε τον x στο σύνολο S.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Κατά την προσομοίωση των βημάτων της εφήμερης δομής, όταν αποθηκεύουμε ένα δείκτη σε ένα διαχρονικό κόμβο x, τότε ο δείκτης συνδέει τον x με ενεργό κόμβο : Αν ο δείκτης αναφέρεται στον κόμβο y ο οποίος έχει διασπαστεί και έχει αντίγραφο y τότε στον x αποθηκεύουμε δείκτη προς τον y. Μόλις ολοκληρωθούν τα βήματα προσομοίωσης επεξεργαζόμαστε τους κόμβους του S έτσι ώστε οι ενεργοί δείκτες να δείχνουν σε ενεργούς κόμβους. Για το σκοπό αυτό εκτελούμε το παρακάτω βήμα μέχρι το S να γίνει κενό: Βήμα επικύρωσης δεικτών : Λαμβάνουμε τον επόμενο κόμβο y από το S και θέτουμε. Για κάθε κόμβο x προς τον οποίο υπάρχει δείκτης προκατόχου στον y βρίσκουμε στον x τον ενεργό δείκτη προς τον y. Αν ο δείκτης αυτός έχει ετικέτα i τότε τον αντικαθιστούμε με δείκτη προς τον y. Διαφορετικά δημιουργούμε νέο δείκτη προς τον y με ετικέτα i. Ο δείκτης αυτός αποθηκεύεται στον x αν υπάρχει χώρος. Διαφορετικά δημιουργούμε αντίγραφο του x και εισάγουμε τον x στο S. Κάθε φορά που αποθηκεύουμε ένα δείκτη, τροποποιούμε τον αντίστροφο δείκτη ανάλογα.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Υποθέτουμε ότι η πρόσβαση γίνεται από τη ρίζα του δένδρου. Τότε μπορούμε να απλοποιήσουμε τη δομή ως εξής : Δεν χρειαζόμαστε τους αντίστροφους δείκτες : για κάθε κόμβο της εφήμερης δομής υπάρχει μοναδικό μονοπάτι πρόσβασης από τη ρίζα. Για τον ίδιο λόγο δεν χρειαζόμαστε τους δείκτες αντιγράφου και τις ετικέτες εκδοχής των κόμβων. Αρκεί κάθε διαχρονικός κόμβος να έχει ένα πεδίο επιπλέον δείκτη.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1 Ε

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1- Ε Γ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1- Ε 3 Ε Γ Μ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1- Ε 3-4 Ε Α 4 Γ Μ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1- Ε 3-5 Ε Α 4 Γ Μ 5 Π

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-6 Γ Ε Ε Μ 5 6 Μ 4 Α Ι Π

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-7 Γ Ε Ε Μ 5 6 Μ 4 Α 7 Ι Π Η

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-8 Γ Ε Ε Μ 5 6 Μ 4 8 Α 7 Ι Ι Π Η Λ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-9 Γ Ε Ε Μ 5 6 Μ 4 8 Α 7 Ι Ι Π Η 9 Λ Κ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-10 Γ Ε Ε Μ 5 6 Μ 4 8 Α 7 Ι Ι 10 Π Η 9 Λ Ο Κ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-10 11 Γ Ε Ε Μ Ε 5 6 Μ 4 8 Α 7 Ι Ι 10 Π Π Η 9 Λ Ο Ο Κ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-10 11-1 Γ Ε Γ 1 Ε Μ Ε 5 6 Μ 4 8 Α 7 Ι Ι 10 Π Π Η 9 Λ Ο Ο Κ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Παράδειγμα : Μερικώς διαχρονικό δυαδικό δένδρο αναζήτησης Ακολουθία τροποποιήσεων : ins(0,ε), ins(1,γ), ins(,μ), ins(3,α), ins(4,π), ins(5,ι), ins(6,η), ins(7,λ), ins(8,κ), ins(9,ο), del(10,m), del(11,α), del(1,e) 1-3-10 11-1 13 Γ Ε Γ 1 Ε Μ Ε 5 6 Μ 4 8 Α 7 Ι Ι 10 Π Π Η Η 9 Λ Ο Ο Κ

Μερική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Θα δείξουμε ότι το αντισταθμιστικό κόστος, σε χώρο και χρόνο, ανά βήμα τροποποίησης είναι. Χρησιμοποιούμε την ενεργειακή μέθοδο. Επιλέγουμε σταθερό. Δυναμικό δομής : πλήθος ενεργών κόμβων πλήθος επιπλέον δεικτών που δε χρησιμοποιούνται στους ενεργούς κόμβους Αρχικά, για κενή δομή : Μετά από κάθε τροποποίηση :

Μερική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Θα δείξουμε ότι το αντισταθμιστικό κόστος, σε χώρο και χρόνο, ανά βήμα τροποποίησης είναι. Χρησιμοποιούμε την ενεργειακή μέθοδο. Επιλέγουμε σταθερό. Δυναμικό δομής : πλήθος ενεργών κόμβων πλήθος επιπλέον δεικτών που δε χρησιμοποιούνται στους ενεργούς κόμβους Δυναμικό ενεργού κόμβου με αχρησιμοποίητους επιπλέον δείκτες Δυναμικό ανενεργού κόμβου

Μερική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Έστω ότι μια λειτουργία εκτελεί βήματα τροποποίησης. Κάθε βήμα δημιουργεί το πολύ ένα νέο διαχρονικό κόμβο, οπότε και τοποθετεί ένα κόμβο στο. Επομένως αρκεί να αναλύσουμε την επίδραση της επεξεργασίας του επικύρωση των δεικτών προκατόχων. για την Έστω ο αριθμός των κόμβων του στην αρχή της επεξεργασίας. Έστω ο αριθμός των κόμβων που προστέθηκαν στο κατά τη διάρκεια της επεξεργασίας. Κάθε φορά που αντιγράφεται ένας κόμβος έχει δυναμικό το οποίο γίνεται αφού ο κόμβος παύει να είναι ενεργός. Δημιουργείται ένας νέος ενεργός κόμβος με δυναμικό. Στη συνέχεια το δυναμικό του νέου κόμβου αυξάνει κατά για κάθε δείκτη που αποθηκεύεται σε πεδίο επιπλέον δεικτών.

Μερική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Κάθε κόμβος του έχει το πολύ δείκτες σε προκατόχους, άρα ο αριθμός των δεικτών που πρέπει να αποθηκευτούν είναι. Τουλάχιστον από αυτούς θα αποθηκευτούν σε πεδία δεικτών προκατόχων και όχι σε πεδία επιπλέον δεικτών. H συνολική αύξηση του δυναμικού από τους επιπλέον δείκτες είναι H συνολική μείωση του δυναμικού από τους ενεργούς κόμβους που γίνονται ανενεργοί είναι Άρα η συνολική μεταβολή του δυναμικού είναι

Μερική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Το συνολικό αντισταθμιστικό κόστος χώρου για όλα τα βήματα τροποποίησης είναι Αφού η λειτουργία πραγματοποίησε ανά βήμα είναι. βήματα, το αντισταθμιστικό κόστος χώρου Συνεπώς, κάθε βήμα τροποποίησης δημιουργεί νέους κόμβους, κατά την αντισταθμιστική έννοια. Άρα το αντισταθμιστικό κόστος χρόνου ανά βήμα είναι επίσης.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Ιδέα : Αν δεν υπάρχει διαθέσιμος χώρος σε ένα κόμβο x δημιουργούμε νέο αντίγραφο x του κόμβου x, στο οποίο μεταφέρουμε τους μισούς περίπου επιπλέον δείκτες του x. Έτσι μένει χώρος για μελλοντικές τροποποιήσεις και στους δύο κόμβους. Τεχνικά ζητήματα : Η διαχείριση των αντίστροφων δεικτών απαιτεί μεγαλύτερη προσοχή. Οι δείκτες πρόσβασης μπορεί να πρέπει να αλλάξουν κατά τη διάρκεια κάποιων τροποποιήσεων. Άρα χρειάζεται να διατηρούμε αντίστροφους δείκτες και για τους δείκτες πρόσβασης. Για κάθε τέτοιο αντίστροφο δείκτη πρόσβασης, αρκεί να αποθηκεύουμε στον κόμβο το όνομα του αντίστοιχου δείκτη πρόσβασης.

Εφήμερη δομή με αντίστροφους δείκτες Υποθέτουμε ότι κάθε εφήμερος κόμβος έχει : πεδία δεικτών προκατόχους, όπου Στον αριθμό των προκατόχων συμπεριλαμβάνουμε και τους δείκτες πρόσβασης. Επεκτείνουμε την εφήμερη δομή έτσι ώστε ο κάθε εφήμερος κόμβος να έχει αντίστροφους δείκτες. (Άρα έχει συνολικά πεδία δεικτών.) Έστω ότι μια λειτουργία τροποποίησης αλλάζει το πεδίο δείκτη f ενός κόμβου χ στο να δείχνει τον κόμβο ψ. Έστω ότι πριν την τροποποίηση το πεδίο δείκτη f του χ έδειχνε στον κόμβο φ (που μπορεί να είναι ο κενός κόμβος). Εκτελούμε τα παρακάτω βήματα : Βρίσκουμε τον αντίστροφο δείκτη του φ που δείχνει στον χ και τον κάνουμε κενό. Βρίσκουμε ένα πεδίο αντίστροφου δείκτη στον ψ και τον κάνουμε να δείχνει στον χ.

Εφήμερη δομή με αντίστροφους δείκτες Έστω τώρα ότι μια λειτουργία τροποποίησης θέτει το δείκτη πρόσβασης π να δείχνει στον κόμβο χ. Έστω ότι πριν την τροποποίηση ο δείκτης π έδειχνε στον κόμβο ψ (που μπορεί να είναι ο κενός κόμβος). Εκτελούμε τα παρακάτω βήματα : Βρίσκουμε τον αντίστροφο δείκτη του ψ με όνομα π και τον κάνουμε κενό. Βρίσκουμε ένα πεδίο αντίστροφου δείκτη στον χ και του δίνουμε το όνομα π. Στο τέλος της λειτουργίας τροποποίησης εκτελούμε την ακόλουθη διαδικασία επανεγγραφής των δεικτών πρόσβασης : Για το δείκτη πρόσβασης π βρίσκουμε τον κόμβο χ που δείχνει ο π και αποθηκεύουμε ξανά το όνομα π σε πεδίο αντίστροφου δείκτη του χ. Η διαδικασία αυτή είναι χρήσιμη στην μετατροπή της εφήμερης δομής με αντίστροφους δείκτες σε διαχρονική.

Εφήμερη δομή με αντίστροφους δείκτες Ιδιότητες συμμετρίας Αν ο κόμβος χ έχει δείκτη προς τον κόμβο ψ τότε και ο ψ έχει δείκτη προς τον χ. Ο δείκτης πρόσβασης π δείχνει στον κόμβο χ αν και μόνο αν ο χ έχει αποθηκευμένο το όνομα π σε κάποιο πεδίο αντίστροφου δείκτη.

Εφήμερη δομή με αντίστροφους δείκτες Μετατροπή σε διαχρονική δομή με «μακρείς κόμβους» Έστω η προδιάταξη όλων των εκδοχών της δομής. Μια τιμή v του πεδίου f με ετικέτα έχει διάστημα εκδοχών, όπου είναι η αμέσως επόμενη ετικέτα τιμής του πεδίου f που είναι αποθηκευμένη στον κόμβο x. (Αν δεν υπάρχει η, τότε.) διαχρονικός κόμβος εκδοχή 0 4 6 10 6 7 0 1 5 3 Προδιάταξη εκδοχών: 0, 1, 6, 10, 7, 9,, 5, 3, 4, 8 9 4 8

Εφήμερη δομή με αντίστροφους δείκτες Μετατροπή σε διαχρονική δομή με «μακρείς κόμβους» Έστω η προδιάταξη όλων των εκδοχών της δομής. Μια τιμή v του πεδίου f με ετικέτα έχει διάστημα εκδοχών, όπου είναι η αμέσως επόμενη ετικέτα τιμής του πεδίου f που είναι αποθηκευμένη στον κόμβο x. (Αν δεν υπάρχει η, τότε.) Από τις ιδιότητες συμμετρίας της εφήμερης δομής έχουμε : Αν ο κόμβος x έχει δείκτη προς τον κόμβο y τέτοιον ώστε το διάστημα εκδοχών του δείκτη περιλαμβάνει την εκδοχή i, τότε ο y έχει δείκτη προς τον x τέτοιον ώστε το διάστημα εκδοχών του περιλαμβάνει την εκδοχή i. Ο δείκτης πρόσβασης π της εκδοχής i δείχνει σε κόμβο x αν και μόνο αν ο x έχει αποθηκευμένο το όνομα π με ετικέτα i. (Συνεπάγεται από τη διαδικασία επανεγγραφής των δεικτών πρόσβασης.)

Εφήμερη δομή με αντίστροφους δείκτες Μετατροπή σε διαχρονική δομή με «μακρείς κόμβους» Παράδειγμα : Ολικά διαχρονικό δυαδικό δένδρο αναζήτησης με αντίστροφους δείκτες. Όταν διαγράφεται ένας κόμβος θέτουμε όλους τους δείκτες του να δείχνουν τον κενό κόμβο. 0 1 ins(0,e) 6 ins(1,a) ins(1,γ) 7 ins(6,h) 8 ins(,α) ins(,μ) 3 10 ins(7,k) 9 ins(8,μ) ins(3,i) 4 11 del(10,e) del(4,m) 5 ins(5,o) 1 A 1-10 1 11 11 5 Ε 11 11 6 3 7 9 5 3 Γ Η Μ Μ 3 5 8 4 10 3 Α Κ Ι 1 11 Ο

Εφήμερη δομή με αντίστροφους δείκτες Μετατροπή σε διαχρονική δομή με «μακρείς κόμβους» Παρατήρηση : Έστω ένας μακρύς κόμβος που περιέχει την τιμή με ετικέτα και διάστημα εκδοχών ενός πεδίου. Έστω ότι αποθηκεύουμε στον ένα (πλεονάζον) αντίγραφο της τιμής με ετικέτα. Η ύπαρξη αυτού του αντίγραφου δεν επηρεάζει ούτε την πλοήγηση στη διαχρονική δομή ούτε τις ιδιότητες συμμετρίας.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Ιδέα : Διασπούμε τους μακρείς κόμβους σε κόμβους σταθερού μεγέθους. Για τη διάσπαση μπορεί να χρειαστεί να εισαχθούν πλεονάζουσες τιμές σε κάποια πεδία. Υποθέτουμε ότι κάθε εφήμερος κόμβος έχει : πεδία δεικτών προκατόχους, όπου Στον αριθμό των προκατόχων συμπεριλαμβάνουμε και τους δείκτες πρόσβασης. Επεκτείνουμε την εφήμερη δομή έτσι ώστε ο κάθε εφήμερος κόμβος να έχει αντίστροφους δείκτες. Άρα ένας εφήμερος κόμβος της επεκταμένης δομής έχει πεδία δεικτών.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Ένας διαχρονικός κόμβος έχει χώρο για δείκτες : δείκτες αντιστοιχούν στα πεδία δεικτών του εφήμερου κόμβου της επεκταμένης δομής (πρωτότυποι δείκτες) επιπλέον δείκτες, όπου δείκτης σε κάποιο αντίγραφο του διαχρονικού κόμβου Κάθε επιπλέον δείκτης φέρει το όνομα του πεδίου που του αντιστοιχεί, καθώς και μια «ετικέτα εκδοχής». Ο διαχρονικός κόμβος φέρει τη δική του ετικέτα εκδοχής, η οποία υποδεικνύει την εκδοχή στην οποία δημιουργήθηκε ο κόμβος. Οι πρωτότυποι δείκτες έχουν την ίδια ετικέτα εκδοχής με τον διαχρονικό κόμβο.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Ένας μακρύς κόμβος (δηλαδή όλες οι εκδοχές ενός εφήμερου κόμβου της επεκταμένης δομής) αντιστοιχεί σε μια «οικογένεια» διαχρονικών κόμβων. Οι διαχρονικοί κόμβοι σχηματίζουν μια συνδεδεμένη λίστα, χρησιμοποιώντας τους δείκτες αντιγράφου, σε αύξουσα σειρά εκδοχής. x [] x [5] x [6] x [9] δείκτης αντιγράφου επόμενος κόμβος μετά τον στη συνδεδεμένη λίστα. (Ο δείκτης αντιγράφου του δείχνει τον.) Διάστημα έγκυρων εκδοχών του : Περιλαμβάνει τις εκδοχές από την ετικέτα του έως και την εκδοχή αμέσως πριν την ετικέτα του στην προδιατεταγμένη λίστα εκδοχών ή μέχρι και την τελευταία εκδοχή της λίστας εκδοχών αν ο δεν υπάρχει.

Ολική διαχρονικότητα με «διάσπαση κόμβων» επόμενος κόμβος μετά τον στη συνδεδεμένη λίστα. (Ο δείκτης αντιγράφου του δείχνει τον.) Διάστημα έγκυρων εκδοχών του κόμβου : Περιλαμβάνει τις εκδοχές από την ετικέτα του έως και την εκδοχή αμέσως πριν την ετικέτα του στην προδιατεταγμένη λίστα εκδοχών ή μέχρι και την τελευταία εκδοχή της λίστας εκδοχών αν ο δεν υπάρχει. Διάστημα έγκυρων εκδοχών μιας τιμής του πεδίου του κόμβου : Περιλαμβάνει τις εκδοχές από την ετικέτα του έως και την εκδοχή αμέσως πριν την επόμενη ετικέτα του ίδιου πεδίου στην οικογένεια κόμβων του ή μέχρι και την τελευταία εκδοχή της λίστας εκδοχών αν δεν υπάρχει τέτοια επόμενη ετικέτα. Τα διαστήματα έγκυρων εκδοχών των κόμβων μιας οικογένειας διαμερίζουν το διάστημα έγκυρων εκδοχών του αντίστοιχου μακρύ κόμβου. Ομοίως τα διαστήματα έγκυρων εκδοχών των τιμών ενός πεδίου σε ένα κόμβο διαμερίζουν το διάστημα έγκυρων εκδοχών του κόμβου.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Ιδιότητες συμμετρίας της διαχρονικής δομής : Αν ο κόμβος x έχει δείκτη προς τον κόμβο y τέτοιον ώστε το διάστημα έγκυρων εκδοχών του δείκτη περιλαμβάνει την εκδοχή i, τότε κάποιος κόμβος της οικογένειας του y έχει δείκτη προς κάποιο κόμβο της οικογένειας του x τέτοιον ώστε το διάστημα έγκυρων εκδοχών του δείκτη περιλαμβάνει την εκδοχή i. Ο δείκτης πρόσβασης π της εκδοχής i δείχνει σε κόμβο x αν και μόνο αν κάποιος κόμβος στην οικογένεια του x έχει αποθηκευμένο το όνομα π με ετικέτα i.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Έστω ένας δείκτης με ετικέτα i που δείχνει στο διαχρονικό κόμβο x. Αν το διάστημα έγκυρων εκδοχών του x περιλαμβάνει την εκδοχή i, τότε o δείκτης είναι κατάλληλος. Αν το διάστημα έγκυρων εκδοχών του δείκτη δεν περιλαμβάνεται στο διάστημα έγκυρων εκδοχών του x, τότε o δείκτης είναι επικαλυπτόμενος. Ομοίως, ένας δείκτης πρόσβασης με ετικέτα i που δείχνει στο διαχρονικό κόμβο x είναι κατάλληλος αν το διάστημα έγκυρων εκδοχών του x περιλαμβάνει την εκδοχή i, διαφορετικά ο δείκτης είναι επικαλυπτόμενος. Η διαχρονική δομή μπορεί να περιλαμβάνει μη κατάλληλους ή επικαλυπτόμενους δείκτες μόνο κατά τη διάρκεια κάποιας λειτουργίας τροποποίησης. Πριν και μετά την τροποποίηση όλοι οι δείκτες είναι κατάλληλοι και μη επικαλυπτόμενοι Αναλλοίωτη συνθήκη δεικτών.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Ιδιότητες συμμετρίας της διαχρονικής δομής : Αν ο κόμβος x έχει δείκτη προς τον κόμβο y τέτοιον ώστε το διάστημα έγκυρων εκδοχών του δείκτη περιλαμβάνει την εκδοχή i, τότε κάποιος κόμβος της οικογένειας του y έχει δείκτη προς κάποιο κόμβο της οικογένειας του x τέτοιον ώστε το διάστημα έγκυρων εκδοχών του δείκτη περιλαμβάνει την εκδοχή i. Ο δείκτης πρόσβασης π της εκδοχής i δείχνει σε κόμβο x αν και μόνο αν κάποιος κόμβος στην οικογένεια του x έχει αποθηκευμένο το όνομα π με ετικέτα i. Αν οι όλοι δείκτες είναι κατάλληλοι και μη επικαλυπτόμενοι τότε οι ιδιότητες συμμετρίας είναι όπως στην περίπτωση της δομής με «μακρείς κόμβους» : Αν ο κόμβος x έχει δείκτη προς τον κόμβο y τέτοιον ώστε το διάστημα έγκυρων εκδοχών του δείκτη περιλαμβάνει την εκδοχή i, τότε ο y έχει δείκτη προς τον x τέτοιον ώστε το διάστημα έγκυρων εκδοχών του περιλαμβάνει την εκδοχή i. Ο δείκτης πρόσβασης π της εκδοχής i δείχνει σε κόμβο x αν και μόνο αν ο x έχει αποθηκευμένο το όνομα π με ετικέτα i. Επιπλέον η πλοήγηση μπορεί να γίνει ακριβώς όπως και στη δομή με «μακρείς κόμβους», αλλά με O(1) επιβάρυνση σε χρόνο ανά βήμα.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Μια λειτουργία τροποποίησης της δομής εκτελείται σε δύο φάσεις : Πρώτη φάση : Προσομοιώνει τα βήματα τροποποίησης της αντίστοιχης επεκταμένης εφήμερης δομής. Οι νέες τιμές αποθηκεύονται σε νέα αντίγραφα διαχρονικών κόμβων, οπότε μπορεί να προκληθεί παραβίαση της αναλλοίωτης συνθήκης δεικτών. Δεύτερη φάση : Αποκαθιστά την αναλλοίωτη συνθήκη δεικτών. Η αποκατάσταση γίνεται με προσεκτική αντιγραφή δεικτών. Η αντιγραφή μπορεί να προκαλέσει νέες διασπάσεις κόμβων, επομένως η διαδικασία αποκατάστασης εναλλάσσει βήματα διάσπασης κόμβων και βήματα αντιγραφής δεικτών μέχρι να γίνουν όλοι οι δείκτες κατάλληλοι και μη επικαλυπτόμενοι.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Πρώτη φάση Θεωρούμε τα βήματα τροποποίησης που δημιουργούν την εκδοχή. Έστω εκδοχών. η αμέσως επόμενη εκδοχή (αν υπάρχει) στην προδιατεταγμένη λίστα Αν η τροποποίηση της εφήμερης δομής δημιουργεί ένα νέο κόμβο, τότε η διαχρονική δομή δημιουργεί ένα νέο διαχρονικό κόμβο με ετικέτα εκδοχής. Αρχικοποιούμε με κατάλληλες τιμές όλα τα πεδία πληροφορίας και τους πρωτότυπους δείκτες του. Αν κάποιο πεδίο δείκτη λάβει μη κενή τιμή τότε προσθέτουμε στον ένα νέο κενό δείκτη με όνομα πεδίου και ετικέτα. (Αυτό γίνεται για να διατηρήσουμε τις συνθήκες συμμετρίας.)

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Πρώτη φάση Έστω τώρα ότι ένα βήμα τροποποίησης της εφήμερης δομής αλλάζει το πεδίο ενός κόμβου που δημιουργήθηκε σε εκδοχή διαφορετική από την. Για την προσομοίωση αυτού του βήματος από τη διαχρονική δομή, βρίσκουμε τον διαχρονικό κόμβο που αντιστοιχεί στον. Αν η ετικέτα του είναι τότε απλά αλλάζουμε την τιμή του πρωτότυπου πεδίου όπως στην εφήμερη δομή.

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

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Πρώτη φάση Έστω τώρα ότι η ετικέτα του είναι. Αν υπάρχει η εκδοχή και είτε δεν υπάρχει ο επόμενος κόμβος της οικογένειας του είτε υπάρχει αλλά έχει ετικέτα που βρίσκεται μετά το στην προδιατεταγμένη λίστα εκδοχών, τότε εκτελούμε τα παρακάτω βήματα : 5. Διαγράφουμε από τον όλους τους επιπλέον δείκτες με ετικέτα και μεταφέρουμε στα πεδία επιπλέον δεικτών του τους επιπλέον δείκτες του με ετικέτες στα δεξιά του. 6. Οι αλλαγές που γίνονται στα πεδία του κατά τη διάρκεια της τροποποίησης καταγράφονται στον, ο οποίος αντιστοιχεί στην εκδοχή του.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Πρώτη φάση Έστω τώρα ότι η ετικέτα του είναι. Αν δεν υπάρχει η εκδοχή ή ο έχει ετικέτα, τότε εκτελούμε τα παρακάτω βήματα : 1. Δημιουργούμε ένα νέο κόμβο με ετικέτα.. Κάνουμε τον δείκτη αντιγράφου του να δείχνει τον και τον δείκτη αντιγράφου του να δείχνει τον. 3. Τα πεδία πληροφορίας και πρωτότυπων δεικτών του αρχικοποιούνται όπως και πριν. 4. Οι αλλαγές που γίνονται στα πεδία του κατά τη διάρκεια της τροποποίησης καταγράφονται στον, ο οποίος αντιστοιχεί στην εκδοχή του.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Πρώτη φάση Κατά τη διάρκεια εκτέλεσης της πρώτης φάσης δημιουργούμε μια λίστα που περιλαμβάνει τους νέους κόμβους που δημιουργήθηκαν, καθώς και τους κόμβους για τους οποίους άλλαξε ο διάδοχος τους στη λίστα της οικογένειας. Πριν το τέλος της πρώτης φάσης επεξεργαζόμαστε κάθε κόμβο της παραπάνω λίστας και εξετάζουμε τους δείκτες του. Ένας μη κατάλληλος δείκτης στον γίνεται κατάλληλος με το να τον κάνουμε να δείχνει στον ή στον. Αφού ολοκληρωθεί η παραπάνω διαδικασία όλοι οι δείκτες είναι κατάλληλοι αλλά κάποιοι από τους δείκτες που εξετάσαμε μπορεί να είναι επικαλυπτόμενοι. Δημιουργούμε ένα σύνολο που περιλαμβάνει τους κόμβους που έχουν κάποιο επικαλυπτόμενο δείκτη. Επεξεργαζόμαστε το σύνολο αυτό στη δεύτερη φάση, οπότε και όλοι οι δείκτες γίνονται μη επικαλυπτόμενοι.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Δεύτερη φάση Κατά τη διάρκεια εκτέλεσης της δεύτερης φάσης αφαιρούμε ένα κόμβο από το σύνολο και τον επεξεργαζόμαστε, εκτελώντας τα παρακάτω βήματα. Η δεύτερη φάση τερματίζεται όταν το μείνει κενό. Βήμα 1 (προσθήκη νέων δεικτών) : Κατασκευάζουμε μια λίστα που περιέχει τους πρωτότυπους και τους επιπλέον δείκτες του σε διάταξη(από αριστερά προς τα δεξιά) ως προς την προδιατεταγμένη λίστα εκδοχών. Επεξεργαζόμαστε τους δείκτες με αυτή τη σειρά. Έστω ότι επεξεργαζόμαστε ένα επικαλυπτόμενο δείκτη του πεδίου. (Προσπερνάμε τους μη επικαλυπτόμενους δείκτες της.) Έστω ο κόμβος που δείχνει ο και έστω η ετικέτα του. Εισάγουμε στην ένα δείκτη προς τον με όνομα και ετικέτα. (Ο παλαιός δείκτης προς τον είναι τώρα μη επικαλυπτόμενος, αλλά όχι απαραίτητα και ο νέος δείκτης προς τον.) Συνεχίζουμε με τον επόμενο δείκτη της. Μετά το βήμα 1, όλοι οι δείκτες της είναι κατάλληλοι και μη επικαλυπτόμενοι.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Δεύτερη φάση Βήμα (διάσπαση του ) : Έστω η ετικέτα του. Αν όλοι οι δείκτες της μπορούν να τοποθετηθούν στον (δηλαδή υπάρχουν το πολύ δείκτες με ετικέτα στα δεξιά του στην προδιατεταγμένη λίστα εκδοχών) τότε τους τοποθετούμε στον και ο δεν διασπάται. Η επεξεργασία του τερματίζεται χωρίς να εκτελέσουμε το βήμα 3. Διαφορετικά χωρίζουμε τους δείκτες σε ομάδες, ξεκινώντας από το τέλος της. Κάθε ομάδα εκτός αυτής που περιλαμβάνει τους δείκτες στην αρχή της, τοποθετείται σε ένα νέο κόμβο στον οποίο πρέπει να υπάρχουν πεδία επιπλέον δεικτών κενά. Η ομάδα στην αρχή της τοποθετείται στον χωρίς απαραίτητα να μένει κάποιο πεδίο επιπλέον δείκτη κενό. Ένας νέος κόμβος έχει ετικέτα ίση με την μικρότερη ετικέτα των δεικτών που αποθηκεύει. Όλοι οι δείκτες του με ετικέτα τοποθετούνται στα πεδία πρωτότυπων δεικτών, και οι δείκτες με ετικέτες στα δεξιά του τοποθετούνται στα πεδία επιπλέον δεικτών. Οι κόμβοι συνδέονται, με τους δείκτες αντιγράφου, σε αύξουσα σειρά ως προς τις ετικέτες τους.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Λειτουργίες τροποποίησης Δεύτερη φάση Μετά το βήμα 3 κάποιοι δείκτες μπορεί να γίνουν μη κατάλληλοι, επομένως χρειαζόμαστε ένα ακόμα βήμα. Βήμα 3 (μετατροπή όλων των δεικτών σε κατάλληλους) : Εξετάζουμε τον και τους νέους κόμβους που δημιουργήθηκαν από αυτόν στο βήμα. Έστω το σύνολο αυτών των κόμβων που εξετάζουμε. Κάθε δείκτη που περιέχεται σε κάποιον κόμβο και δείχνει στον τον κάνουμε να δείχνει στον. Επιπλέον, εξετάζοντας τους κόμβους του, μπορούμε να βρούμε όλους τους υπόλοιπους δείκτες που δείχνουν στον. Για κάθε τέτοιο δείκτη με ετικέτα τον κάνουμε να δείχνει στον πιο πρόσφατο κόμβο του με ετικέτα που δεν είναι στα δεξιά του στην προδιατεταγμένη λίστα εκδοχών. Αν κάποιος δείκτης γίνει επικαλυπτόμενος τότε τοποθετούμε στο τον κόμβο που τον περιέχει (αν δεν βρίσκεται εκεί ήδη).

Ολική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Θα δείξουμε ότι το αντισταθμιστικό κόστος, σε χώρο και χρόνο, ανά βήμα τροποποίησης είναι. Πρώτα παρατηρούμε τα εξής : α) Στο βήμα 1 τοποθετούνται δείκτες στη λίστα. β) Στο βήμα 3 οι δείκτες που δεν είναι αποθηκευμένοι στους κόμβους του βρίσκονται το πολύ σε κόμβους. Άρα επεξεργαζόμαστε το πολύ δείκτες και το πολύ κόμβοι εισάγονται στο. Ο χρόνος που απαιτείται για να μετατραπεί ένας δείκτης σε κατάλληλο είναι ανάλογος του. Άρα ο συνολικός χρόνος για την λειτουργία τροποποίησης είναι ανά βήμα τροποποίησης συν ανά νέο κόμβο που δημιουργείται από διάσπαση. Αρκεί λοιπόν να δείξουμε ότι το κάθε βήμα τροποποίησης δημιουργεί, κατά την αντισταθμιστική έννοια, το πολύ ένα σταθερό αριθμό νέων κόμβων.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Απομένει να δείξουμε ότι το κάθε βήμα τροποποίησης δημιουργεί, κατά την αντισταθμιστική έννοια, νέους κόμβους. Χρησιμοποιούμε την ενεργειακή μέθοδο. Δυναμικό κόμβου με αχρησιμοποίητους επιπλέον δείκτες : όπου Δυναμικό διαχρονικής δομής με κόμβους : όπου Αρχικά, για κενή δομή : Μετά από κάθε τροποποίηση :

Ολική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Έστω ότι μια λειτουργία εκτελεί Η πρώτη φάση δημιουργεί το πολύ βήματα τροποποίησης. νέους κόμβους. Έστω ο αριθμός των νέων κόμβων που δημιουργήθηκαν κατά τη διάρκεια της δεύτερης φάσης. Κάθε νέος κόμβος που δημιουργείται στην πρώτη ή στη δεύτερη φάση μπορεί να οδηγήσει στη δημιουργία το πολύ νέων δεικτών : το πολύ ένας νέος εισερχόμενος δείκτης που αντιστοιχεί σε έναν πρωτότυπο δείκτη. Κάθε νέος κόμβος που δημιουργείται στη δεύτερη φάση έχει δυναμικό. Κάθε νέος δείκτης αυξάνει το δυναμικό το πολύ κατά. Όμως κάθε νέος κόμβος που δημιουργείται στη δεύτερη φάση έχει τουλάχιστον δείκτες που δε συνεισφέρουν στο δυναμικό : επιπλέον δείκτες και ένα πρωτότυπο δείκτη.

Ολική διαχρονικότητα με «διάσπαση κόμβων» Αντισταθμιστική Ανάλυση Άρα η συνολική μεταβολή του δυναμικού στη δεύτερη φάση είναι Το συνολικό αντισταθμιστικό κόστος χώρου για τη δεύτερη φάση είναι Αφού η λειτουργία πραγματοποίησε ανά βήμα είναι. βήματα, το αντισταθμιστικό κόστος χώρου