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

Σχετικά έγγραφα
Στοίβες. ΟΑΤ της Στοίβας. Περιγραφή και Υλικό Ανάγνωσης. Αφηρηµένοι Τύποι εδοµένων (AΤ )

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

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

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

Διοικητική Λογιστική

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

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Εισαγωγή στους Αλγορίθμους

Προγραμματισμός Η/Υ. 4 η ενότητα: Δομές Δεδομένων. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Εισαγωγή στους Αλγορίθμους

Δομές Δεδομένων (Data Structures)

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

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

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

Εισαγωγή στους Αλγορίθμους

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

Οντοκεντρικός Προγραμματισμός

Δομές Δεδομένων Ενότητα 3

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

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

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

Ψηφιακή Επεξεργασία Εικόνων

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

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

Δομές Δεδομένων Ενότητα 4

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

Οντοκεντρικός Προγραμματισμός

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

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

Τεχνικό Σχέδιο - CAD

Διοικητική Λογιστική

Αλγόριθμοι και πολυπλοκότητα Bucket-Sort και Radix-Sort

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

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Βάσεις Περιβαλλοντικών Δεδομένων

Οντοκεντρικός Προγραμματισμός

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

Μάρκετινγκ Αγροτικών Προϊόντων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Αρχές Γλωσσών Προγραμματισμού και Μεταφραστών

Πληροφορική ΙΙ Θεματική Ενότητα 5

Εισαγωγή στους Υπολογιστές

Οντοκεντρικός Προγραμματισμός

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων περίπτωσης χρήσης (1ο Μέρος)

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Δομές Δεδομένων Ενότητα 1

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Αλγόριθμοι και πολυπλοκότητα Περιήγηση Πανεπιστημίων

Τεχνικό Σχέδιο - CAD

Βάσεις Περιβαλλοντικών Δεδομένων

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 2: Κλάσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Kruskal

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

Δομημένος Προγραμματισμός

Διδακτική Πληροφορικής

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

Κβαντική Επεξεργασία Πληροφορίας

Δομημένος Προγραμματισμός

Προγραμματισμός H/Y Ενότητα 2: Εντολές ελέγχου ροής. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 11: Vectors (διανύσματα)

Μάρκετινγκ Αγροτικών Προϊόντων

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

Διοικητική Λογιστική

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Άσκηση - Αλγόριθμος Prim

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Oι βασικές πράξεις (λειτουργίες) που ορίζονται για τον τύπο στοίβα αναφέρονται παρακάτω:

Προγραμματισμός H/Y Ενότητα 5: Συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

Τεχνικό Σχέδιο - CAD. Τόξο Κύκλου. Τόξο Κύκλου - Έλλειψη. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 5

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 1

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Εννοιες και Παράγοντες της Ψηφιακής Επεξεργασίας Εικόνας

Προγραμματισμός Η/Υ. 7 η ενότητα: Αρχεία. Τμήμα. Τεχνολόγων Περιβάλλοντος. ΤΕΙ Ιονίων Νήσων. Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Ιονίων Νήσων

Στατιστική. 6 ο Μάθημα: Διαστήματα Εμπιστοσύνης και Έλεγχοι Υποθέσεων. Γεώργιος Μενεξές Τμήμα Γεωπονίας ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Μάρκετινγκ Αγροτικών Προϊόντων

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Αλγόριθμοι και πολυπλοκότητα Δυναμικός Προγραμματισμός

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

Προσχολική Παιδαγωγική Ενότητα 2: Οργάνωση χρόνου και χώρου στα νηπιαγωγεία

Αντικειμενοστρεφής Προγραμματισμός Ενότητα 6: Φιλικές συναρτήσεις. Επικ. Καθηγητής Συνδουκάς Δημήτριος Τμήμα Διοίκησης Επιχειρήσεων (Γρεβενά)

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

Μηχανολογικό Σχέδιο Ι

Διοικητική Λογιστική

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

Δομημένος Προγραμματισμός

Δομές δεδομένων. Ενότητα 8: Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find) Παναγιώτα Φατούρου Τμήμα Επιστήμης Υπολογιστών

Transcript:

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

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Κρήτης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2

Σημείωμα αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση, Όχι Παράγωγο Έργο 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-nd/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.. 3

Στοίβες

Περιγραφή και Υλικό Ανάγνωσης Ο Αφηρημένος Τύπος Δεδομένων της Στοίβας (Stack Abstract Data Type (ADT)) ( 2.1.1) Εφαρμογές για Στοίβες ( 2.1.1) Υλοποίηση με βάση πίνακες ( 2.1.1) Στοίβα βασισμένη σε πίνακα η οποία μπορεί να μεγαλώσει ( 1.5) Στοίβες 5

Αφηρημένοι Τύποι Δεδομένων (AΤΔ) Ένας αφηρημένος τύπος δεδομένων είναι η αφηρημένη έννοια για μια δομής δεδομένων Ένας AΤΔ καθορίζει: Τα δεδομένα που αποθηκεύονται Τις πράξεις επάνω στα δεδομένα Τις συνθήκες σφάλματος που σχετίζονται με πράξεις Παράδειγμα: Ένας ΑΤΔ που μοντελοποιεί ένα απλό σύστημα συναλλαγών μετοχών Τα δεδομένα που αποθηκεύονται είναι εντολές αγοράς/πώλησης Οι πράξεις που υποστηρίζονται είναι order buy(stock, shares, price) order sell(stock, shares, price) void cancel(order) Συνθήκες σφάλματος: Αγορά/πώληση μιας ανύπαρκτης μετοχής Ακύρωση μιας ανύπαρκτης εντολής Στοίβες 6

Ο ΑΤΔ της Στοίβας Ο ΑΤΔ της Στοίβας αποθηκεύει αυθαίρετα αντικείμενα Εισαγωγές και διαγραφές γίνονται με LIFO (last-in firstout) Σκεφτείτε ένα δοχείο με πιάτα με ελατήριο στον πάτο Κύριες πράξεις στοίβας: push(object): εισάγει ένα αντικείμενο object pop(): διαγράφει και επιστρέφει το αντικείμενο που εισήχθη τελευταίο Βοηθητικές πράξεις στοίβας: object top(): επιστρέφει το πιο πρόσφατα εισαχθέν αντικείμενο χωρίς να το διαγράψει integer size(): επιστρέφει τον αριθμό των αντικειμένων που βρίσκονται στη στοίβα boolean isempty(): δηλώνει εάν υπάρχουν αντικείμενα στη στοίβα Στοίβες 7

Exceptions Κατά την προσπάθεια εκτέλεσης μιας πράξης ενός ΑΤΔ μπορεί κάποιες φορές να προκληθεί μια κατάσταση σφάλματος που ονομάζεται exception Τα exceptions λέγεται ότι πετάγονται από μια πράξη που δεν μπορεί να εκτελεστεί Στον ΑΤΔ της Στοίβας οι πράξεις pop και top δεν μπορούν να εκτελεστούν αν η στοίβα είναι άδεια Η εκτέλεση της πράξης pop ή top σε μια άδεια στοίβα πετάει ένα EmptyStackException Στοίβες 8

Εφαρμογές για Στοίβες Άμεσες εφαρμογές Το ιστορικό των σελίδων που επισκεφθήκαμε σε έναν Web browser Η σειρά των πράξεων Undo σε έναν επεξεργαστή κειμένου Η αλυσίδα των κλήσεων μεθόδων στην Java Virtual Machine Έμμεσες εφαρμογές Βοηθητικές δομές δεδομένων σε αλγόριθμους Συστατικό σε άλλες δομές δεδομένων Στοίβες 9

Η Στοίβα Μεθόδων στη JVM Η Java Virtual Machine (JVM) παρακολουθεί την αλυσίδα των ενεργών μεθόδων με μια στοίβα Όταν κληθεί μια μέθοδος, η JVM κάνει push ένα πλαίσιο το οποίο περιέχει Τοπικές μεταβλητές και τιμή επιστροφής Τον program counter, ο οποίος παρακολουθεί την εντολή η οποία εκτελείται Όταν τελειώνει μια μέθοδος, το πλαίσιο εξάγεται από την στοίβα (γίνεται pop) και ο έλεγχος περνά στην μέθοδο που βρίσκεται πλέον στην κορυφή της στοίβας main() { int i = 5; foo(i); } foo(int j) { int k; k = j+1; bar(k); } bar(int m) { } bar PC = 1 m = 6 foo PC = 3 j = 5 k = 6 main PC = 2 i = 5 Στοίβες 10

Στοίβα βασισμένη σε πίνακα Ένας απλός τρόπος υλοποίησης του ΑΤΔ της Στοίβας γίνεται με πίνακα Προσθέτουμε στοιχεία από αριστερά προς τα δεξιά Μια μεταβλητή παρακολουθεί τον δείκτη του πάνω στοιχείου της στοίβας Algorithm size() return t + 1 Algorithm pop() if isempty() then throw EmptyStackException else t t 1 return S[t + 1] S 0 1 2 t Στοίβες 11

Στοίβα βασισμένη σε πίνακα (συνέχεια) Ο πίνακας που περιέχει τα στοιχεία της στοίβας μπορεί να γεμίσει Μια πράξη push θα πετάξει τότε ένα FullStackException Περιορισμός της υλοποίησης με βάση πίνακες Δεν είναι εγγενής στον ΑΤΔ της Στοίβας Algorithm push(o) if t = S.length 1 then throw FullStackException else t t + 1 S[t] o S 0 1 2 t Στοίβες 12

Απόδοση και Περιορισμοί Απόδοση Έστω ότι η στοίβα περιέχει n στοιχεία Ο χώρος που καταλαμβάνεται είναι O(n) Κάθε πράξη τρέχει σε χρόνο O(1) Περιορισμοί Το μέγεθος της στοίβας πρέπει να ορισθεί εξ αρχής και δεν μπορεί να αλλάξει Το να γίνει push ένα νέο στοιχείο σε μια γεμάτη στοίβα προκαλεί μια exception που εξαρτάται από την υλοποίηση Στοίβες 13

Υπολογίζοντας Spans Θα δείξουμε πως μπορεί να χρησιμοποιηθεί η στοίβα σαν μια βοηθητική δομή δεδομένων σε έναν αλγόριθμο Δεδομένου ενός πίνακα X, το span S[i] του X[i] είναι ο μέγιστος αριθμός συνεχών στοιχείων X[j] που βρίσκονται αμέσως πριν το X[i] έτσι ώστε X[j] X[i] Τα spans βρίσκουν εφαρμογή στην οικονομική ανάλυση 6 3 4 5 2 X Π.χ., μετοχές σε μέγιστα 52 εβδομάδων S 1 1 2 3 1 Στοίβες 14 7 6 5 4 3 2 1 0 0 1 2 3 4

Ο Αλγόριθμος σε Τετραγωνικό xρόνο Algorithm spans1(x, n) Input array X of n integers Output array S of spans of X # S new array of n integers n for i 0 to n 1 do n s 1 n while s i X[i s] X[i] 1 + 2 + + (n 1) s s + 1 1 + 2 + + (n 1) S[i] s n return S 1 Ο Αλγόριθμος spans1 τρέχει σε χρόνο O(n 2 ) Στοίβες 15

Υπολογίζοντας Spans χρησιμοποιώντας μια Στοίβα Κρατάμε σε μια στοίβα τους δείκτες των στοιχείων που είναι ορατά αν κοιτάξουμε πίσω Σαρώνουμε τον πίνακα από τα αριστερά προς τα δεξιά Έστω ότι i είναι ο τρέχον δείκτης Κάνουμε pop τους δείκτες από την στοίβα μέχρι να βρούμε ένα δείκτη j τέτοιο ώστε X[i] X[j] Θέτουμε S[i] i j Κάνουμε push το x στη στοίβα Στοίβες 16 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7

Ο Αλγόριθμος σε Γραμμικό xρόνο Κάθε δείκτης του πίνακα Εισάγεται (με push) στη στοίβα ακριβώς μια φορά Εξάγεται (με pop) από την στοίβα το πολύ μια φορά Οι εντολές στον while βρόχο εκτελούνται το πολύ n φορές Ο Αλγόριθμος spans2 τρέχει σε χρόνο O(n) Algorithm spans2(x, n) # S new array of n integers n A new empty stack 1 for i 0 to n 1 do n while ( A.isEmpty() X[top()] X[i] ) do n j A.pop() n if A.isEmpty() then n S[i] i + 1 n else S[i] i j n A.push(i) n return S 1 Στοίβες 17

Στοίβα βασισμένη σε πίνακα η οποία μπορεί να μεγαλώσει Σε μια πράξη push, όταν ο πίνακας είναι γεμάτος, αντί να πετάξουμε ένα exception, μπορούμε να αντικαταστήσουμε τον πίνακα με έναν μεγαλύτερο Πόσο μεγάλος πρέπει να είναι ο νέος πίνακας; αυξητική στρατηγική: αύξησε το μέγεθος κατά c (σταθερά) στρατηγική διπλασιασμού: διπλασίασε το μέγεθος Algorithm push(o) if t = S.length 1 then A new array of size for i 0 to t do A[i] S[i] S A t t + 1 S[t] o Στοίβες 18

Σύγκριση των Στρατηγικών Θα συγκρίνουμε την αυξητική στρατηγική με την στρατηγική διπλασιασμού με το να αναλύσουμε τον συνολικό χρόνο που απαιτείται για να εκτελεστεί μια σειρά από n πράξεις push Υποθέτουμε ότι ξεκινάμε με μια άδεια στοίβα η οποία αντιπροσωπεύεται από έναν πίνακα μεγέθους 1 Θα ονομάσουμε αποσβησμένο χρόνο μιας πράξης push τον μέσο χρόνο που χρειάζεται η push για όλη τη σειρά των πράξεων, δηλαδή, T(n)/n Στοίβες 19

Ανάλυση Αυξητικής Στρατηγικής Αντικαθιστούμε τον πίνακα k = n/c φορές Ο συνολικός χρόνος T(n) μιας σειράς από n πράξεις push είναι ανάλογος με n + c + 2c + 3c + 4c + + kc = n + c(1 + 2 + 3 + + k) = n + ck(k + 1)/2 Αφού ο c είναι μια σταθερά, ο χρόνος T(n) είναι O(n + k 2 ), δηλαδή, O(n 2 ) Ο αποσβησμένος χρόνος μιας πράξης push είναι O(n) Στοίβες 20

Ανάλυση Στρατηγικής Διπλασιασμού Αντικαθιστούμε τον πίνακα k = log 2 n φορές Ο συνολικός χρόνος T(n) μιας σειράς από n πράξεις push είναι ανάλογος με n + 1 + 2 + 4 + 8 + + 2 k = n + 2 k + 1 1 = 2n 1 Ο χρόνος T(n) είναι O(n) Ο αποσβησμένος χρόνος μιας πράξης push είναι O(1) 1 geometric series Στοίβες 21 2 1 8 4

Το Interface της Στοίβας στη Java Το Java interface που αντιστοιχεί στον δικό μας ΑΤΔ της Στοίβας Απαιτεί τον ορισμό της κλάσης EmptyStackException Διαφέρει από την ενσωματωμένη στην Java κλάση java.util.stack public interface Stack { } public int size(); public boolean isempty(); public Object top() throws EmptyStackException; public void push(object o); public Object pop() throws EmptyStackException; Στοίβες 22

Στοίβα βασισμένη σε πίνακα στη Java public class ArrayStack implements Stack { // holds the stack elements private Object S[ ]; // index to top element private int top = -1; // constructor public ArrayStack(int capacity) { S = new Object[capacity]); } public Object pop() throws EmptyStackException { if isempty() throw new EmptyStackException ( Empty stack: cannot pop ); Object temp = S[top]; // facilitates garbage collection S[top] = null; top = top 1; return temp; } Στοίβες 23

Τέλος Ενότητας