Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Παράδειγμα: Θυμηθείτε το πρόβλημα της εύρεσης-ένωσης Είχαμε δει τη δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» 1 4 4 2 3 6 5 7 ένωση(3,6) 1 6 5 7 8 2 3 8 4 4 1 6 5 7 εύρεση(2) 2 1 6 5 7 2 3 8 3 8
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Παράδειγμα: Θυμηθείτε το πρόβλημα της εύρεσης-ένωσης Είχαμε δει τη δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» Χρόνος χειρότερης περίπτωσης για μία πράξη εύρεσης ή ένωσης = 1 2 3 5 9 ύψος 4 6 7 10 11 13 8 12 14 15 16
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Παράδειγμα: Θυμηθείτε το πρόβλημα της εύρεσης-ένωσης Είχαμε δει τη δομή «σταθμισμένης ένωσης με συμπίεση διαδρομής» Χρόνος χειρότερης περίπτωσης για μία πράξη εύρεσης ή ένωσης = Αλλά : Συνολικός χρόνος εκτέλεσης m πράξεων εύρεσης-ένωσης = Μέσος χρόνος εκτέλεσης για μία πράξη εύρεσης ή ένωσης =
Συνάρτηση Ackerman Η συνάρτηση Ackerman ορίζεται ως εξής Η συνάρτηση είναι αντίστροφη της αυξάνει με πάρα πολύ αργό ρυθμό! Π.χ. για
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Έστω το κόστος μίας πράξης στη χειρότερη περίπτωση Τότε ο συνολικός χρόνος για πράξεις είναι
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Έστω το κόστος μίας πράξης στη χειρότερη περίπτωση Τότε ο συνολικός χρόνος για πράξεις είναι Ωστόσο σε κάποιες περιπτώσεις: Κάθε πράξη μπορεί να έχει διαφορετικό κόστος ανάλογα με την στιγμή που εκτελείται. Το κόστος μίας πράξης στη χειρότερη περίπτωση μπορεί να είναι πολύ μεγάλο. Αλλά το μέσο κόστος ανά πράξη σε οποιαδήποτε ακολουθία πράξεων μπορεί να είναι αρκετά μικρότερο.
Αντισταθμιστική ανάλυση Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή δεδομένων Δ : Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Έστω το κόστος μίας πράξης στη χειρότερη περίπτωση Τότε ο συνολικός χρόνος για πράξεις είναι Ωστόσο σε κάποιες περιπτώσεις: Κάθε πράξη μπορεί να έχει διαφορετικό κόστος ανάλογα με την στιγμή που εκτελείται. Το κόστος μίας πράξης στη χειρότερη περίπτωση μπορεί να είναι πολύ μεγάλο. Αλλά το μέσο κόστος ανά πράξη σε οποιαδήποτε ακολουθία πράξεων μπορεί να είναι αρκετά μικρότερο. Αντισταθμιστική ανάλυση: λαμβάνουμε το μέσο κόστος εκτέλεσης μίας πράξης όταν εκτελούμε μία ακολουθία πράξεων χειρότερης περίπτωσης
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Διαχείριση στοίβας x push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Διαχείριση στοίβας push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Διαχείριση στοίβας push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της k=2
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Διαχείριση στοίβας χρόνος push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Διαχείριση στοίβας χρόνος push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της Ποιος είναι ο συνολικός χρόνος για μία ακολουθία από Ν πράξεις; ;
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Διαχείριση στοίβας χρόνος push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της Ποιος είναι ο συνολικός χρόνος για μία ακολουθία από Ν πράξεις; ; Πιο προσεκτική ανάλυση : Συνολικός χρόνος ανά πράξη
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Κόστος επαύξησης = αριθμός των bits που αλλάζουν
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Κόστος επαύξησης = αριθμός των bits που αλλάζουν επαύξηση κόστος = 1 1
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Κόστος επαύξησης = αριθμός των bits που αλλάζουν 1 1 1 1 1 επαύξηση κόστος = 5 1 1
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Κόστος επαύξησης = αριθμός των bits που αλλάζουν 1 1 1 1 1 1 1 1 επαύξηση κόστος = 8 χειρότερη περίπτωση!
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Κόστος επαύξησης = αριθμός των bits που αλλάζουν = στη χειρότερη περίπτωση Συνολικό κόστος για N επαυξήσεις =
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Κόστος επαύξησης = αριθμός των bits που αλλάζουν = στη χειρότερη περίπτωση Συνολικό κόστος για N επαυξήσεις = Βελτιωμένη ανάλυση : συνολικό κόστος = Δηλαδή αντισταθμιστικό κόστος ανά πράξη = (κατά μέσο όρο σταθερό κόστος ανά επαύξηση)
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Κόστος επαύξησης = αριθμός των bits που αλλάζουν = στη χειρότερη περίπτωση Συνολικό κόστος για N επαυξήσεις = Βελτιωμένη ανάλυση : συνολικό κόστος = Δηλαδή αντισταθμιστικό κόστος ανά πράξη = (κατά μέσο όρο σταθερό κόστος ανά επαύξηση) Ξεκινώντας με μηδενισμένο μετρητή
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 1 1 1 1 1ο ψηφίο από το τέλος: 1 1 1 αλλάζει με κάθε επαύξηση 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 1 1 1 1 2ο ψηφίο από το τέλος: 1 1 1 αλλάζει με κάθε δεύτερη επαύξηση 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 1 1 1 1 3ο ψηφίο από το τέλος: 1 1 1 αλλάζει με κάθε τέταρτη επαύξηση 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει 1 1 1 1 4ο ψηφίο από το τέλος: 1 1 1 αλλάζει με κάθε όγδοη επαύξηση 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις. Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει συνολικά φορές Σύνολο αλλαγών για όλα τα ψηφία =
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις. Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει συνολικά φορές Σύνολο αλλαγών για όλα τα ψηφία =
Αντισταθμιστική ανάλυση Απλά παραδείγματα: Επαύξηση δυαδικού μετρητή Έστω ένας μετρητής C με k bits : μια πράξη επαύξησης θέτει Γενικά το i-οστό ψηφίο από το τέλος αλλάζει μετά από επαυξήσεις. Σε ακολουθία N πράξεων το i-οστό ψηφίο από το τέλος αλλάζει συνολικά φορές Σύνολο αλλαγών για όλα τα ψηφία = Αντισταθμιστικό κόστος ανά πράξη =
Αντισταθμιστική ανάλυση Μέθοδοι Αντισταθμιστικής Ανάλυσης Αθροιστική μέθοδος Χρεωπιστωτική μέθοδος Ενεργειακή μέθοδος
Αντισταθμιστική ανάλυση Μέθοδοι Αντισταθμιστικής Ανάλυσης Αθροιστική μέθοδος Χρεωπιστωτική μέθοδος Ενεργειακή μέθοδος Σε αντίθεση με την αθροιστική μέθοδο η χρεωπιστωτική και η ενεργειακή μέθοδος μπορούν να αποδώσουν διαφορετικό αντισταθμιστικό κόστος σε διαφορετικούς τύπους πράξεων.
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Αποδίδουμε σε κάθε πράξη ένα αριθμό από πιστώσεις. Οι πιστώσεις χρησιμοποιούνται για να αποπληρωθούν οι πράξεις: - Όταν μια πράξη κοστίζει λιγότερο από την αντίστοιχη πίστωση τότε το υπόλοιπο αποθηκεύεται σε κάποια αντικείμενα της δομής. - Όταν μια πράξη κοστίζει περισσότερο από την αντίστοιχη πίστωση τότε η υπολειπόμενη χρέωση καλύπτεται από αποθηκευμένες πιστώσεις. Αν οι πιστώσεις που αποδώσαμε στις πράξεις αρκούν για να αποπληρώσουν οποιαδήποτε ακολουθία πράξεων τότε το αντισταθμιστικό κόστος μιας πράξης είναι ίσο με τον αριθμό των πιστώσεων που της αποδώσαμε.
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Διαχείριση στοίβας κόστος push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Διαχείριση στοίβας κόστος πίστωση push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της Πρέπει να δείξουμε ότι οι πιστώσεις αρκούν για να αποπληρώσουν οποιαδήποτε ακολουθία πράξεων.
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Διαχείριση στοίβας κόστος πίστωση push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της 1 x Από τις δύο πιστώσεις η μία πληρώνει την τοποθέτηση push(S,x) 1 και η άλλη αποθηκεύεται στο x
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Διαχείριση στοίβας κόστος πίστωση push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της multipop(S,k) : αφαιρεί από τη στοίβα S τα k πρώτα στοιχεία στην κορυφή της 1 Κάθε αντικείμενο στην S κρατά μία μονάδα πίστωσης. pop/multipop Έτσι αποπληρώνεται η απομάκρυνση του αντικειμένου.
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Επαύξηση δυαδικού μετρητή κόστος πίστωση αλλαγή bit από 0 σε 1 αλλαγή bit από 1 σε 0
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Επαύξηση δυαδικού μετρητή κόστος πίστωση αλλαγή bit από 0 σε 1 αλλαγή bit από 1 σε 0 1 επαύξηση 1 1 Κάθε bit με τιμή 1 έχει μία μονάδα πίστωσης
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Επαύξηση δυαδικού μετρητή κόστος πίστωση αλλαγή bit από 0 σε 1 αλλαγή bit από 1 σε 0 1 1 1 1 1 Κάθε bit με τιμή 1 έχει μία μονάδα πίστωσης
Αντισταθμιστική ανάλυση Χρεωπιστωτική μέθοδος (Η μέθοδος του τραπεζίτη) Παράδειγμα: Επαύξηση δυαδικού μετρητή κόστος πίστωση αλλαγή bit από 0 σε 1 αλλαγή bit από 1 σε 0 1 1 1 1 1 1 1 1 1 1 1 επαύξηση 1 1 1 1 1 1 1 Κάθε bit με τιμή 1 έχει μία μονάδα πίστωσης
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Αποδίδουμε στη δομή δεδομένων ένα δυναμικό («δυναμική ενέργεια»). δυναμικό δομής δεδομένων D όπου Έστω η αρχική δομή δεδομένων και η δομή μετά την i-οστη πράξη. Επίσης, έστω το κόστος της i-οστής πράξης. Αντισταθμιστικό κόστος i-οστής πράξης : Συνολικό αντισταθμιστικό κόστος για N πράξεις : Θέλουμε έτσι ώστε
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Αντισταθμιστικό κόστος i-οστής πράξης : Ερμηνεία : αν η δομή συγκεντρώνει δυναμικό και αν τότε η δομή χάνει δυναμικό και Δηλαδή το κόστος μιας ακριβής πράξης αποπληρώνεται από τη διαφορά δυναμικού
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Συνολικό αντισταθμιστικό κόστος για N πράξεις : Θέλουμε έτσι ώστε Προσοχή: Επειδή μπορεί να μη γνωρίζουμε το πλήθος των πράξεων Ν απαιτούμε να ισχύει για κάθε i=1,2,…,N
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Παράδειγμα: Διαχείριση στοίβας Επιλέγουμε αριθμός αντικειμένων στη στοίβα S Για αρχικά κενή στοίβα έχουμε για κάθε i=1,2,…,N για κάθε i=1,2,…,N Επομένως το συνολικό αντισταθμιστικό κόστος αποτελεί άνω φράγμα του συνολικού πραγματικού κόστους.
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Παράδειγμα: Διαχείριση στοίβας Επιλέγουμε αριθμός αντικειμένων στη στοίβα S Μένει να υπολογίσουμε το αντισταθμιστικό κόστος για κάθε τύπο πράξης Έστω ότι η i-οστή πράξη είναι τύπου push : push(S,x) : τοποθετεί το x στην κορυφή της στοίβας S Έχουμε και , επομένως
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Παράδειγμα: Διαχείριση στοίβας Επιλέγουμε αριθμός αντικειμένων στη στοίβα S Μένει να υπολογίσουμε το αντισταθμιστικό κόστος για κάθε τύπο πράξης Έστω ότι η i-οστή πράξη είναι τύπου pop : pop(S) : αφαιρεί από τη στοίβα S το στοιχείο στην κορυφή της Έχουμε και , επομένως
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Παράδειγμα: Διαχείριση στοίβας Επιλέγουμε αριθμός αντικειμένων στη στοίβα S Μένει να υπολογίσουμε το αντισταθμιστικό κόστος για κάθε τύπο πράξης Έστω ότι η i-οστή πράξη είναι τύπου multipop : multipop(S,k) : αφαιρεί από τη στοίβα S τα πρώτα k στοιχεία στην κορυφή της Έχουμε και , , επομένως
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Παράδειγμα: Επαύξηση δυαδικού μετρητή Επιλέγουμε αριθμός bit με τιμή 1 Για αρχικά μηδενισμένο μετρητή έχουμε για κάθε i=1,2,…,N για κάθε i=1,2,…,N Επομένως το συνολικό αντισταθμιστικό κόστος αποτελεί άνω φράγμα του συνολικού πραγματικού κόστους.
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Παράδειγμα: Επαύξηση δυαδικού μετρητή Επιλέγουμε αριθμός bit με τιμή 1 Μένει να υπολογίσουμε το αντισταθμιστικό κόστος Έστω και Επίσης, έστω ότι η i-οστή πράξη μηδενίζει bit. Έχουμε και , επομένως
Αντισταθμιστική ανάλυση Ενεργειακή μέθοδος (Η μέθοδος του φυσικού) Παράδειγμα: Επαύξηση δυαδικού μετρητή Επιλέγουμε αριθμός bit με τιμή 1 Aν έχουμε και Επομένως αν πραγματοποιήσουμε επαυξήσεις τότε το συνολικό πραγματικό κόστος είναι ανεξάρτητα από την αρχική τιμή
Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων π.χ. Στοίβες κάτω όριο άνω όριο α β γ δ τρέχουσα κορυφή tail head % N Ουρές Ν-1 … 1 5 2 4 3
Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων π.χ. Ουρές Προτεραιότητας Αναπαράσταση ως πλήρες δυαδικό δένδρο: κάθε κόμβος έχει κλειδί μικρότερο ή ίσο με το κλειδί του γονέα του. [1] 20 η ρίζα έχει το μέγιστο κλειδί. [2] [3] ύψος lgN 18 12 Υλοποίηση με πίνακα: το στοιχείο στη θέση i είναι ο γονέας των στοιχείων στις θέσεις 2i και 2i+1. [4] [5] [6] [7] 11 15 9 5 [8] [9] [10] [11] [12] 4 2 7 13 6 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 20 18 12 11 15 9 5 4 2 7 13 6
Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων π.χ. Πίνακες Διασποράς (Πίνακες Κατακερματισμού) T U k2 K k1 k3 m-1
Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων Πίνακες στη C Δυναμική κατανομή μνήμης void initialize(int *a, int N) { *a = malloc(N*sizeof(int)); for (i=0; i<N; i++) a[i]=0; } void main() int *a; initialize(a,Ν);
Δυναμικοί πίνακες Πολλές δομές δεδομένων υλοποιούνται με χρήση πινάκων Πίνακες στη C Δυναμική κατανομή μνήμης void initialize(int *a, int N) { *a = malloc(N*sizeof(int)); for (i=0; i<N; i++) a[i]=0; } void main() int *a; initialize(a,Ν); Τι γίνεται αν δε γνωρίζουμε εκ των προτέρων τη τιμή του N;
Δυναμικοί πίνακες T k4 k7 k6 k2 k1 k3 7 k5
Δυναμικοί πίνακες T k4 k7 ο πίνακας είναι γεμάτος k6 k2 k8 k1 k3 7 k5
Δυναμικοί πίνακες T ο πίνακας είναι γεμάτος k4 k7 k6 k2 k9 k8 k1 k3 k5 k7 ο πίνακας είναι γεμάτος k6 k2 k9 k8 k1 k3 7 k5
Δυναμικοί πίνακες T ο πίνακας είναι γεμάτος k4 k7 ο πίνακας είναι γεμάτος k6 k2 k9 k8 k1 k3 7 k5 Λύση : Δημιουργούμε ένα μεγαλύτερο πίνακα Τ΄ και αντιγράφουμε τα στοιχεία του Τ. Τι μέγεθος πρέπει να έχει ο T’;
Δυναμικοί πίνακες Ακραία λύση 1: T T’ 7 7 8 νέο στοιχείο
Δυναμικοί πίνακες Ακραία λύση 1: T T’ αξιοποιούμε όλο το χώρο του Τ’ κάθε νέα εισαγωγή παίρνει Ο(n) χρόνο 7 7 8 νέο στοιχείο
Δυναμικοί πίνακες Ακραία λύση 2: T T’ εισαγωγή νέου στοιχείου σε Ο(1) χρόνο αξιοποιούμε ελάχιστο από το χώρο του Τ’ 7 7 8 νέο στοιχείο
Δυναμικοί πίνακες Ενδιάμεση λύση : T T’ εισαγωγή νέου στοιχείου σε αντισταθμιστικό Ο(1) χρόνο αξιοποιούμε πάνω από το μισό χώρο του Τ’ 7 7 8 νέο στοιχείο 15
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την αθροιστική μέθοδο όταν το i-1 είναι δύναμη του 2 Το κόστος της i-οστής εισαγωγής είναι: διαφορετικά
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την αθροιστική μέθοδο όταν το i-1 είναι δύναμη του 2 Το κόστος της i-οστής εισαγωγής είναι: διαφορετικά Επομένως για ακολουθία n εισαγωγών έχουμε συνολικό κόστος
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την χρεωπιστωτική μέθοδο Σε κάθε πράξη εισαγωγής αποδίδουμε 3 μονάδες πίστωσης T 1 1 1 νέο στοιχείο 7
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την χρεωπιστωτική μέθοδο Σε κάθε πράξη εισαγωγής αποδίδουμε 3 μονάδες πίστωσης T 1 1 1 νέο στοιχείο 7
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την χρεωπιστωτική μέθοδο Σε κάθε πράξη εισαγωγής αποδίδουμε 3 μονάδες πίστωσης T 1 νέο στοιχείο 1 1 7
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την χρεωπιστωτική μέθοδο Σε κάθε πράξη εισαγωγής αποδίδουμε 3 μονάδες πίστωσης T T’ 1 1 πριν το διπλασιασμό του πίνακα κάθε θέση έχει 1 μονάδα πίστωσης 1 1 1 1 1 1 7 7 8 15
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την χρεωπιστωτική μέθοδο Σε κάθε πράξη εισαγωγής αποδίδουμε 3 μονάδες πίστωσης T T’ 1 1 πριν το διπλασιασμό του πίνακα κάθε θέση έχει 1 μονάδα πίστωσης στον Τ’ δεν υπάρχει καμία πίστωση 1 1 1 1 1 αποπληρώνει τη μετακίνηση του στοιχείου 1 7 7 8 15
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την χρεωπιστωτική μέθοδο Σε κάθε πράξη εισαγωγής αποδίδουμε 3 μονάδες πίστωσης T T’ 7 7 8 1 νέο στοιχείο 1 1 15
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την χρεωπιστωτική μέθοδο Σε κάθε πράξη εισαγωγής αποδίδουμε 3 μονάδες πίστωσης T T’ 1 μέχρι τον επόμενο διπλασιασμό κάθε θέση του Τ’ θα έχει 1 μονάδα πίστωσης 7 7 1 8 1 νέο στοιχείο 15
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε όπου πλήθος αποθηκευμένων στοιχείων στον Τ μέγεθος του Τ Αρχικά, πριν την πρώτη εισαγωγή
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε όπου πλήθος αποθηκευμένων στοιχείων στον Τ μέγεθος του Τ Έστω ότι η i-οστή εισαγωγή δεν προκαλεί διπλασιασμό του πίνακα τότε και επομένως έχουμε αντισταθμιστικό κόστος
Δυναμικοί πίνακες Ενδιάμεση λύση : Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε όπου πλήθος αποθηκευμένων στοιχείων στον Τ μέγεθος του Τ Έστω ότι η i-οστή εισαγωγή προκαλεί διπλασιασμό του πίνακα Τότε και επομένως έχουμε αντισταθμιστικό κόστος
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Συντελεστής πληρότητας πίνακα Τ : όπου πλήθος αποθηκευμένων στοιχείων στον Τ μέγεθος του Τ Επιθυμητές ιδιότητες : α) περιορισμένη σπατάλη χώρου : σταθερά β) μικρό αντισταθμιστικό κόστος ανά πράξη
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Συντελεστής πληρότητας πίνακα Τ : όπου πλήθος αποθηκευμένων στοιχείων στον Τ μέγεθος του Τ Επιθυμητές ιδιότητες : α) περιορισμένη σπατάλη χώρου : σταθερά β) μικρό αντισταθμιστικό κόστος ανά πράξη Για να πετύχουμε την ιδιότητα (α) πρέπει να αντιγράφουμε τα στοιχεία σε μικρότερο πίνακα μετά από αρκετές διαγραφές
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Δοκιμάζουμε να επεκτείνουμε την προηγούμενη λύση διπλασιασμός υποδιπλασιασμός εισαγωγή με διαγραφή με 7 7 7 8 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Δοκιμάζουμε να επεκτείνουμε την προηγούμενη λύση διπλασιασμός υποδιπλασιασμός εισαγωγή με διαγραφή με 7 7 7 8 επιτυγχάνει 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Δοκιμάζουμε να επεκτείνουμε την προηγούμενη λύση διπλασιασμός υποδιπλασιασμός εισαγωγή με διαγραφή με 7 7 7 8 επιτυγχάνει Ο(n) αντισταθμιστικό κόστος ανά πράξη 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ο(n) αντισταθμιστικό κόστος ανά πράξη Π.χ. εισαγωγή 7 7 8 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ο(n) αντισταθμιστικό κόστος ανά πράξη Π.χ. εισαγωγή διαγραφή 7 7 7 8 8 15 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ο(n) αντισταθμιστικό κόστος ανά πράξη Π.χ. εισαγωγή διαγραφή διαγραφή 7 7 7 7 8 8 15 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ο(n) αντισταθμιστικό κόστος ανά πράξη Π.χ. γωγή εισαγωγή διαγραφή διαγραφή εισα 7 7 7 7 8 8 Μπορούμε να επαναλάβουμε την ίδια διαδικασία πολλές φορές 15 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Βελτιωμένη λύση διπλασιασμός υποδιπλασιασμός εισαγωγή με διαγραφή με 7 7 7 8 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Βελτιωμένη λύση διπλασιασμός υποδιπλασιασμός εισαγωγή με διαγραφή με 7 7 7 8 επιτυγχάνει Ο(1) αντισταθμιστικό κόστος ανά πράξη 15
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Ιδιότητες
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Ιδιότητες Το δυναμικό αρκεί για να καλύψει την αντιγραφή των αντικειμένων
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Αρχικά, πριν την πρώτη εισαγωγή και μετά από κάθε πράξη ισχύει Επομένως το συνολικό αντισταθμιστικό κόστος είναι
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Πρέπει να δείξουμε ότι η i-οστή πράξη (εισαγωγή ή διαγραφή) έχει αντισταθμιστικό κόστος Πρέπει να αναλύσουμε διάφορες περιπτώσεις ανάλογα με το είδος της πράξης και αν προκαλείται διπλασιασμός ή υποδιπλασιασμός του πίνακα
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Έστω ότι η i-οστή πράξη είναι εισαγωγή. Εάν και έχουμε
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Έστω ότι η i-οστή πράξη είναι εισαγωγή. Εάν και έχουμε
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Έστω ότι η i-οστή πράξη είναι διαγραφή. Εάν και δεν προκαλείται υποδιπλασιασμός έχουμε
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Έστω ότι η i-οστή πράξη είναι διαγραφή. Εάν και προκαλείται υποδιπλασιασμός έχουμε και οπότε
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Έστω ότι η i-οστή πράξη είναι διαγραφή. Εάν και προκαλείται υποδιπλασιασμός έχουμε και , άρα
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Ανάλυση με την ενεργειακή μέθοδο Επιλέγουμε , Με όμοιο τρόπο αναλύονται και οι υπόλοιπες περιπτώσεις. Έτσι λαμβάνουμε σταθερό αντισταθμιστικό κόστος για κάθε πράξη.
Δυναμικοί πίνακες Δυναμικοί πίνακες με εισαγωγές και διαγραφές Εγχειρίδιο της C++ στη διεύθυνση http://www.cplusplus.com/ Vector Vectors are a kind of sequence containers. As such, their elements are ordered following a strict linear sequence. Vector containers are implemented as dynamic arrays; Just as regular arrays, vector containers have their elements stored in contiguous storage locations, which means that their elements can be accessed not only using iterators but also using offsets on regular pointers to elements. But unlike regular arrays, storage in vectors is handled automatically, allowing it to be expanded and contracted as needed. Vectors are good at: Accessing individual elements by their position index (constant time). Iterating over the elements in any order (linear time). Add and remove elements from its end (constant amortized time).