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

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

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

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

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

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

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

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

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

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

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ. Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής

Ανάλυση Αλγορίθµων 4. Πειραµατικές Μελέτες. Χρόνος Εκτέλεσης. Περιγραφή και Υλικό Ανάγνωσης

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

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

public class ArrayStack implements Stack {

Συλλογές, Στοίβες και Ουρές

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ Κεφάλαιο 3 ο

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Αλγόριθμοι και Πολυπλοκότητα Φώτης Ε. Ψωμόπουλος, Περικλής Α. Μήτκας

Διάλεξη 05: Αφηρημένοι Τύποι Δεδομένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5. Αφηρημένοι Τύποι Δεδομένων / Στοίβες και Ουρές

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Περιεχόµενα. 1 Εισαγωγή στις οµές εδοµένων 3. 2 Στοίβα (Stack) 5

Κλάσεις στη Java. Στοίβα - Stack. Δήλωση της κλάσης. ΗκλάσηVector της Java. Ηκλάση Stack

Κλάσεις στη Java. Παύλος Εφραιμίδης. Java Κλάσεις στη Java 1

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Constructors, equals, tostring

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

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

Διάλεξη 06: Συνδεδεμένες Λίστες & Εφαρμογές Στοιβών και Ουρών

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Υλοποίηση Δυαδικού Σωρού σε γλώσσα Java. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Βασικές οµές εδοµένων

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

Βασικές Έννοιες Δοµών Δεδοµένων

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

Δομές Δεδομένων. Ενότητα 2: Στοίβες Εισαγωγή-Υλοποίηση ΑΤΔ Στοίβα με Πίνακα-Εφαρμογή Στοίβας: Αντίστροφη Πολωνική Γραφή. Καθηγήτρια Μαρία Σατρατζέμη

Αλγόριθμοι και Δομές Δεδομένων (IΙ) (γράφοι και δένδρα)

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

Σύνοψη Προηγούμενου (1/2) Στοίβες, Ουρές, Ουρές Προτεραιότητας. Σύνοψη Προηγούμενου (2/2) Σημερινό Μάθημα. Πίνακες. Εισαγωγή, σε χρόνο O(1).

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

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

Βασικές Δομές Δεδομένων

Στοίβες με Δυναμική Δέσμευση Μνήμης

Κεφάλαιο 3 : εδοµένα. Πίνακες Στοίβα Ουρά Αναζήτηση Ταξινόµηση. Προγράµµατα

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

Συναρτήσεις-Διαδικασίες

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

Αντικειµενοστρεφής Προγραµµατισµός

Οι δομές δεδομένων στοίβα και ουρά

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής T.E.I. ΘΕΣΣΑΛΟΝΙΚΗΣ

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

Δοµές Δεδοµένων. 7η Διάλεξη Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

POINTERS, AGGREGATION, COMPOSITION

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Αντικείμενα ως ορίσματα

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

Λογισµικό (Software SW) Γλώσσες

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

Φροντιστήριο. Παραγωγή τελικού κώδικα. Παραγωγή τελικού κώδικα

Κεφάλαιο 1 Εισαγωγή. Περιεχόμενα. 1.1 Αλγόριθμοι και Δομές Δεδομένων

public class ArrayQueue implements Queue {

Ιδιότητες αντικειμένων, συγγραφή κώδικα, συντακτικά λάθη

Διαδικασίες Ι. ΗΥ 134 Εισαγωγή στην Οργάνωση και στον Σχεδιασμό Υπολογιστών Ι. Διάλεξη 4

1 ΕΙΣΑΓΩΓΗ. Πρωταρχικοί Τύποι

Επιµέλεια Θοδωρής Πιερράτος

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός Αναφορές-Παράμετροι

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

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

Εισαγωγή στον Προγραµµατισµό, Αντώνιος Συµβώνης, ΣΕΜΦΕ, ΕΜΠ,, Slide 6

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων

2.2.5 ΑΝΑΠΑΡΑΣΤΑΣΗ ΑΛΓΟΡΙΘΜΟΥ

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

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

Ουρά Προτεραιότητας: Heap

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα μέσα σε αντικείμενα Αντικείμενα ως επιστρεφόμενες τιμές Αντικείμενα με πίνακες

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

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

Τµήµα Πληροφορικής. Δοµές Δεδοµένων - Εργασία 1. Φθινοπωρινό Εξάµηνο Διδάσκων: E. Μαρκάκης. Στοίβες και Ουρές. Οικονοµικό Πανεπιστήµιο Αθηνών

Ουρά Προτεραιότητας: Heap

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

Σύνοψη Προηγούµενου. Γλώσσες χωρίς Συµφραζόµενα (2): Αυτόµατα Στοίβας. Παραδείγµατα Σχεδιασµού CFG. Παράδειγµα 1.

Διαδικασιακός Προγραμματισμός

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

Διορθώσεις σελ

Δομές Δεδομένων - Εργαστήριο 5. Ουρές Προτεραιότητας

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

υναµικές οµές εδοµένων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αναφορές Στοίβα και Σωρός μνήμης Αντικείμενα παράμετροι String Interning

Αφηρημένες Δομές Δεδομένων. Στοίβα (Stack) Υλοποίηση στοίβας

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

Σύνοψη Προηγούμενου. Λίστες (Lists) Συνδεδεμένες Λίστες: Εισαγωγή (1/2) Συνδεδεμένες Λίστες. Ορέστης Τελέλης

Transcript:

Περιγραφή και Υλικό Ανάγνωσης Στοίβες ΟΑφηρηµένος Τύπος εδοµένων της Στοίβας (tack Abstract Data Type (ADT)) (..) Εφαρµογές για Στοίβες (..) Υλοποίηση µε βάση πίνακες (..) Στοίβα βασισµένη σε πίνακα η οποία µπορεί να µεγαλώσει (.) Στοίβες Αφηρηµένοι Τύποι εδοµένων (AΤ ) Ένας αφηρηµένος τύπος δεδοµένων είναι η αφηρηµένη έννοια για µια δοµής δεδοµένων Ένας AΤ καθορίζει: Τα δεδοµένα που αποθηκεύονται Τις πράξεις επάνω στα δεδοµένα Τις συνθήκες σφάλµατος που σχετίζονται µε πράξεις Παράδειγµα: Ένας ΑΤ που µοντελοποιεί ένα απλό σύστηµα συναλλαγών µετοχών Τα δεδοµένα που αποθηκεύονται είναι εντολές αγοράς/πώλησης Οι πράξεις που υποστηρίζονται είναι order buy(stock, shares, price) order sell(stock, shares, price) void cacel(order) Συνθήκες σφάλµατος: Αγορά/πώληση µιας ανύπαρκτης µετοχής Ακύρωση µιας ανύπαρκτης εντολής Στοίβες ΟΑΤ της Στοίβας ΟΑΤ της Στοίβας αποθηκεύει αυθαίρετα αντικείµενα Εισαγωγές και διαγραφές γίνονται µε LIFO (last-i first-out) Σκεφτείτε ένα δοχείο µε πιάτα µε ελατήριο στον πάτο Κύριες πράξεις στοίβας: push(object): εισάγει ένα αντικείµενο object pop(): διαγράφει και επιστρέφει το αντικείµενο που εισήχθη τελευταίο Βοηθητικές πράξεις στοίβας: object top(): επιστρέφει το πιο πρόσφατα εισαχθέν αντικείµενο χωρίς να το διαγράψει iteger size(): επιστρέφει τον αριθµό των αντικειµένων που βρίσκονται στη στοίβα boolea isempty(): δηλώνει εάν υπάρχουν αντικείµενα στη στοίβα Στοίβες

Exceptios Κατά την προσπάθεια εκτέλεσης µιας πράξης ενός ΑΤ µπορεί κάποιες φορές να προκληθεί µια κατάσταση σφάλµατος που ονοµάζεται exceptio Τα exceptios λέγεται ότι πετάγονται από µια πράξη που δεν µπορεί να εκτελεστεί Στον ΑΤ της Στοίβας οι πράξεις pop και top δεν µπορούν να εκτελεστούν αν η στοίβα είναι άδεια Η εκτέλεση της πράξης pop ή top σε µια άδεια στοίβα πετάει ένα EmptytackExceptio Εφαρµογές για Στοίβες Άµεσες εφαρµογές Το ιστορικό των σελίδων που επισκεφθήκαµε σε έναν Web browser Η σειρά των πράξεων Udo σε έναν επεξεργαστή κειµένου Η αλυσίδα των κλήσεων µεθόδων στην Java Virtual Machie Έµµεσες εφαρµογές Βοηθητικές δοµές δεδοµένων σε αλγόριθµους Συστατικό σε άλλες δοµές δεδοµένων Στοίβες Στοίβες ΗΣτοίβα Μεθόδων στη JVM Η Java Virtual Machie (JVM) παρακολουθεί την αλυσίδα των ενεργών µεθόδων µε µια στοίβα Όταν κληθεί µια µέθοδος, η JVM κάνει push ένα πλαίσιο το οποίο περιέχει Τοπικές µεταβλητές και τιµή επιστροφής Τον program couter, ο οποίος παρακολουθεί την εντολή η οποία εκτελείται Όταν τελειώνει µια µέθοδος, το πλαίσιο εξάγεται από την στοίβα (γίνεται pop) και ο έλεγχος περνά στην µέθοδο που βρίσκεται πλέον στην κορυφή της στοίβας mai() { it i = ; foo(i); foo(it j) { it k; k = j+; bar(k); bar(it m) { bar PC = m = foo PC = j = k = mai PC = i = Στοίβες 7 Στοίβα βασισµένη σε πίνακα Ένας απλός τρόπος υλοποίησης του ΑΤ της Στοίβας γίνεται µε πίνακα Προσθέτουµε στοιχεία από αριστερά προς τα δεξιά Μια µεταβλητή παρακολουθεί τον δείκτη του πάνω στοιχείου της στοίβας Algorithm size() retur t + Algorithm pop() if isempty() the throw EmptytackExceptio t t retur [t +] 0 t Στοίβες 8

Στοίβα βασισµένη σε πίνακα (συνέχεια) Ο πίνακας που περιέχει τα στοιχεία της στοίβας µπορεί να γεµίσει Μια πράξη push θα πετάξει τότε ένα FulltackExceptio Περιορισµός της υλοποίησης µε βάση πίνακες εν είναι εγγενής στον ΑΤ της Στοίβας Algorithm push(o) if t =.legth the throw FulltackExceptio t t + [t] o 0 t Στοίβες 9 Απόδοση και Περιορισµοί Απόδοση Έστω ότι η στοίβα περιέχει στοιχεία Ο χώρος που καταλαµβάνεται είναι O() Κάθε πράξη τρέχει σε χρόνο O() Περιορισµοί Το µέγεθος της στοίβας πρέπει να ορισθεί εξ αρχής και δεν µπορεί να αλλάξει Το να γίνει push ένα νέο στοιχείο σε µια γεµάτη στοίβα προκαλεί µια exceptio που εξαρτάται από την υλοποίηση Στοίβες 0 Υπολογίζοντας pas Θα δείξουµε πως µπορεί να χρησιµοποιηθεί η στοίβα σαν µια βοηθητική δοµή δεδοµένων σε έναν αλγόριθµο εδοµένου ενός πίνακα X, το spa [i] του X[i] είναι ο µέγιστος αριθµός συνεχών στοιχείων X[j] που βρίσκονται αµέσως πριν το X[i] έτσι ώστε X[j] X[i] Τα spas βρίσκουν εφαρµογή στην οικονοµική ανάλυση Π.χ., µετοχές σε µέγιστα εβδοµάδων 7 0 X 0 Στοίβες Ο Αλγόριθµος σε Τετραγωνικό xρόνο Algorithm spas(x, ) Iput array X of itegers Output array of spas of X # ew array of itegers for i 0 to do s while s i X[i s] X[i] + + + ( ) s s + + + + ( ) [i] s retur Ο Αλγόριθµος spas τρέχει σε χρόνο O( ) Στοίβες

Υπολογίζοντας pas χρησιµοποιώντας µια Στοίβα Κρατάµε σε µια στοίβα τους δείκτες των στοιχείων που είναι ορατά αν κοιτάξουµε πίσω Σαρώνουµε τον πίνακα από τα αριστερά προς τα δεξιά Έστω ότι i είναι ο τρέχον δείκτης Κάνουµε pop τους δείκτες από την στοίβα µέχρι να βρούµε ένα δείκτη j τέτοιο ώστε X[i] < X[j] Θέτουµε [i] i j Κάνουµε push το x στη στοίβα 7 0 0 7 Στοίβες Ο Αλγόριθµος σε Γραµµικό xρόνο Κάθε δείκτης του πίνακα Εισάγεται (µε push) στη στοίβα ακριβώς µια φορά Εξάγεται (µε pop) από την στοίβα το πολύ µια φορά Οι εντολές στον while βρόχο εκτελούνται το πολύ φορές Ο Αλγόριθµος spas τρέχει σε χρόνο O() Algorithm spas(x, ) # ew array of itegers A ew empty stack for i 0 to do while ( A.isEmpty() X[top()] X[i] ) do j A.pop() if A.isEmpty() the [i] i + [i] i j A.push(i) retur Στοίβες Στοίβα βασισµένη σε πίνακα η οποία µπορεί να µεγαλώσει Σε µια πράξη push, όταν ο πίνακας είναι γεµάτος, αντί να πετάξουµε ένα exceptio, µπορούµε να αντικαταστήσουµε τον πίνακα µε έναν µεγαλύτερο Πόσο µεγάλος πρέπει να είναι ο νέος πίνακας; αυξητική στρατηγική: αύξησε το µέγεθος κατά c (σταθερά) στρατηγική διπλασιασµού: διπλασίασε το µέγεθος Algorithm push(o) if t =.legth the A ew array of size for i 0 to t do A[i] [i] A t t + [t] o Στοίβες Σύγκριση των Στρατηγικών Θα συγκρίνουµε την αυξητική στρατηγική µε την στρατηγική διπλασιασµού µε το να αναλύσουµε τον συνολικό χρόνο που απαιτείται για να εκτελεστεί µια σειρά από πράξεις push Υποθέτουµε ότι ξεκινάµε µε µια άδεια στοίβα η οποία αντιπροσωπεύεται από έναν πίνακα µεγέθους Θα ονοµάσουµε αποσβησµένο χρόνο µιας πράξης push τον µέσο χρόνο που χρειάζεται η push για όλη τη σειρά των πράξεων, δηλαδή, T()/ Στοίβες

Ανάλυση Αυξητικής Στρατηγικής Αντικαθιστούµε τον πίνακα k = /c φορές Ο συνολικός χρόνος T() µιας σειράς από πράξεις push είναι ανάλογος µε + c + c + c + c + + kc = + c( + + + + k) = + ck(k + )/ Αφού ο c είναι µια σταθερά, ο χρόνος T() είναι O( + k ), δηλαδή, O( ) Ο αποσβησµένος χρόνος µιας πράξης push είναι O() Ανάλυση Στρατηγικής ιπλασιασµού Αντικαθιστούµε τον πίνακα k = log φορές Ο συνολικός χρόνος T() µιας σειράς από πράξεις push είναι ανάλογος µε + + + + 8 + + k = + k + = Ο χρόνος T() είναι O() Ο αποσβησµένος χρόνος µιας πράξης push είναι O() geometric series 8 Στοίβες 7 Στοίβες 8 Το Iterface της Στοίβας στη Java Στοίβα βασισµένη σε πίνακα στη Java Το Java iterface που αντιστοιχεί στον δικό µας ΑΤ της Στοίβας Απαιτεί τον ορισµό της κλάσης EmptytackExceptio ιαφέρει από την ενσωµατωµένη στην Java κλάση java.util.tack public iterface tack { public it size(); public boolea isempty(); public Object top() throws EmptytackExceptio; public void push(object o); public Object pop() throws EmptytackExceptio; public class Arraytack implemets tack { // holds the stack elemets private Object [ ]; // idex to top elemet private it top = -; // costructor public Arraytack(it capacity) { = ew Object[capacity]); public Object pop() throws EmptytackExceptio { if isempty() throw ew EmptytackExceptio ( Empty stack: caot pop ); Object temp = [top]; // facilitates garbage collectio [top] = ull; top = top ; retur temp; Στοίβες 9 Στοίβες 0