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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ 231 Δομές Δεδομένων και Αλγόριθμοι 4-1

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

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

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

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

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

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

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

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

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

Διάλεξη 15: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

public class ArrayStack implements Stack {

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

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

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

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

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

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

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

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

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

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Standard Template Library (STL) C++ library

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

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

Μάθημα 21: Ουρές (Queues)

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

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

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

Δομές Δεδομένων Standard Template Library (STL) 23/3/2017 ΜΠΟΜΠΟΤΑΣ ΑΓΟΡΑΚΗΣ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Δομές Δεδομένων. Ενότητα 4: Ο ΑΤΔ Λίστα & Υλοποίηση Λίστας με σειριακή αποθήκευση- Ο ΑΤΔ Συνδεδεμένη Λίστα- Υλοποίηση ΑΤΔ Συνδεδεμένη Λίστα με πίνακα

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

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

Διάλεξη 6: Δείκτες και Πίνακες

ΛΙΣΤΕΣ. Ορισμός ΑΤΔ Λίστα ΑΤΔ Ακολουθιακή Λίστα Διαχείριση Δεικτών και Λιστών στη C ΑΤΔ Συνδεδεμένη Λίστα. Εφαρμογές και Χρήση Λιστών

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΣΤΟΙΒΕΣ (stacks) Σχήµα: Λειτουργία Στοίβας

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

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

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

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

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

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

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

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

Προγραμματισμός Υπολογιστών με C++

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

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

Transcript:

Στοίβες Πληροφορικής 1

Περίληψη Ο Αφηρημένος Τύπος Δεδομένων (ΑΔΤ) : στοίβα Εφαρμογές στοίβας Υλοποίηση βασισμένη σε πίνακα Αυξανόμενη Στοίβα βασισμένη σε πίνακα Infix to Postfix Πληροφορικής 2

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

Η στοίβα ΑΤΔ O ΑΤΔ στοίβα αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές ακολουθούν το last-in first-out μοντέλο Βασικές λειτουργίες της στοίβας: push(object o): εισάγει το στοιχείο o pop(): αφαιρεί και επιστρέφει το τελευταία εισηγμένο στοιχείο Βοηθητικές λειτουργίες της στοίβας: top(): επιστρέφει το τελευταία εισηγμένο στοιχείο χωρίς να το αφαιρεί size(): επιστρέφει τον αριθμό τον αποθηκευμένων στοιχείων isempty(): Boolean τιμή που δείχνει αν υπάρχουν αποθηκευμένα στοιχεία Πληροφορικής 4

Εξαιρέσεις (Exceptions) Η απόπειρα εκτέλεσης μιας λειτουργίας σε ADT μπορεί να προκαλέσει συνθήκες λαθών, που ονομάζονται exceptions Οι Exceptions λέγεται ότι γίνονται thrown από μια λειτουργία που δεν μπορεί να εκτελεστεί Στη στοίβα ΑΤΔ, οι λειτουργίες pop και top δεν μπορούν να εκτελεστούν αν η στοίβα είναι άδεια Η απόπειρα εκτέλεσης της pop ή top σε άδεια στοίβα προκαλεί την EmptyStackException Πληροφορικής 5

Εφαρμογές της Στοίβας Άμεσες εφαρμογές Ιστορικό σελίδων σε Web browser Ακολουθία undo σε επεξεργαστή κειμένου Έμμεσες εφαρμογές Βοηθητική δομή δεδομένων για αλγόριθμους Συστατικό άλλων δομών δεδομένων Πληροφορικής 6

C++ Run-time Στοίβα Το C++ run-time system καταγράφει την αλυσίδα των ενεργών συναρτήσεων στη στοίβα Όταν μια συνάρτηση καλείται, το runtime system σπρώχνει στη στοίβα ένα πλαίσιο που περιέχει Τοπικές μεταβλητές και τιμή επιστροφής Program counter, που καταγράφει την εντολή που εκτελείται Όταν μια συνάρτηση επιστρέφει, το πλαίσιό της αφαιρείται από τη στοίβα και ο έλεγχος περνάει στην μέθοδο στην κορυφή της στοίβας 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 Πληροφορικής 7

Στοίβα Βασισμένη σε Πίνακα Ένας απλός τρόπος για την υλοποίηση ADT στοίβας με χρήση πινάκων Προσθέτουμε στοιχεία από αριστερά προς τα δεξιά Μια μεταβλητή καταγράφει τον δείκτη του κορυφαίου στοιχείου 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 Πληροφορικής 8

Βασισμένη σε Πίνακα Στοίβα (συνέχεια) Ο πίνακας που περιέχει τα στοιχεία της στοίβας μπορεί να γεμίσει Μια 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 Πληροφορικής 9

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

Computing Spans Δείχνουμε πως χρησιμοποιείται μια στοίβα σαν βοηθητική δομή δεδομένων σε αλγόριθμο Δεδομένου πίνακα X, το span S[i] του X[i] είναι ο μέγιστος αριθμός συνεχών στοιχείων X[j] που προηγούνται άμεσα του X[i] και τέτοια ώστε X[j] X[i] Εφαρμογή σε οικονομική ανάλυση Π.χ., μετοχή σε 52-week high 7 6 5 4 3 2 1 0 X S 0 1 2 3 4 6 3 4 5 2 1 1 2 3 1 Πληροφορικής 11

Τετραγωνικός Αλγόριθμος (Quadratic) 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 ) Πληροφορικής 12

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

Γραμμικός Αλγόριθμος Κάθε δείκτης του πίνακα Προστίθεται στην στοίβα ακριβώς μια φορά Αφαιρείται από την στοίβα το πολύ μια φορά Οι δηλώσεις στο whileloop εκτελούνται το πολύ 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 Πληροφορικής 14

Επεκτεινόμενη Στοίβα Βασισμένη σε πίνακα Σε μια 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 Πληροφορικής 15

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

Ανάλυση της Στρατηγικής Διπλασιασμού Αντικαθιστούμε τον πίνακα 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) γεωμετρική σειρά 2 4 1 1 8 Πληροφορικής 17

Ανάλυση της Αυξητικής Στρατηγικής Αντικαθιστούμε τον πίνακα 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) Πληροφορικής 18

Λογιστική Ανάλυση της Στρατηγικής Διπλασιασμού Η λογιστική μέθοδος (accounting method) καθορίζει τον αποσβενούμενο τρέχοντα χρόνο με ένα σύστημα πιστώσεων και χρεώσεων Θεωρούμε τον υπολογιστή σαν μία coin-operated συσκευή που απαιτεί ένα 1 cyber-ευρώ για ένα σταθερό ποσό υπολογισμού. Δημιουργούμε ένα σχήμα για να χρεώνονται οι λειτουργίες, γνωστό ώς σχήμα απόσβεσης. Το σχήμα πρέπει να δίνει συνεχώς αρκετά λεφτά για να πληρώνουμε το κόστος της λειτουργίας. Το συνολικό κόστος μιας σειράς λειτουργιών δεν είναι μεγαλύτερο από το συνολικό ποσό που χρεώνεται. (χρόνος απόσβεσης) (σύνολο Ευρώ / (# λειτουργιών) Πληροφορικής 19

Σχήμα Απόσβεσης για την Στρατηγική Διπλασιασμού Θεωρούμε ξανά k φάσεις, όπου κάθε φάση αποτελείται από τα διπλάσια pushes από την προηγούμενη. Στο τέλος μιας φάσης πρέπει να έχουμε αρκετά για να πληρώσουμε για το push της επόμενης φάσης. Στο τέλος της φάσης i θέλουμε να έχουμε κρατήσει i cyber-ευρώ, για να πληρώσουμε για την αύξηση του πίνακα για το ξεκίνημα της επόμενης φάσης. $ $ $ $ $ $ $ $ $ $ 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 8 9 101112131415 Χρεώνουμε 3ευρώγια ένα push. Τα 2Ευρώπου κρατάμε για ένα κανονικό push φυλάσσονται στο δεύτερο μισό του πίνακα. Συνεπώς θα έχουμε 2(i/2)i cyber-ευρώ στο τέλος της φάσης i. Άρα, κάθε push τρέχει σε O(1) χρόνο απόσβεσης. Τα n pushes τρέχουν σε O(n) χρόνο. Πληροφορικής 20

Διεπαφή Στοίβας (Stack Interface) στη C++ Διεπαφή που αντιστοιχεί στην ADT Στοίβα Απαιτεί τον ορισμό της κλάσης EmptyStackException Παρόμοια κατασκευή είναι το άνυσμα (vector) template <typename Object> class Stack { public: int size(); bool isempty(); Object& top() throw(emptystackexception); void push(object o); Object pop() throw(emptystackexception); }; Πληροφορικής 21

Στοίβα βασισμένη σε Πίνακα στη C++ template <typename Object> class ArrayStack { private: int capacity; // stack capacity Object *S; // stack array int top; // top of stack public: ArrayStack(int c) { capacity c; S new Object[capacity]; t 1; } bool isempty() { return (t < 0); } Object pop() throw(emptystackexception) { if(isempty()) throw EmptyStackException ( Access to empty stack ); return S[t--]; } // (other functions omitted) Πληροφορικής 22

Στοίβα (stack)- Συνοπτικά Δομή τύπου LIFO: Last In - First Out (τελευταία εισαγωγή πρώτη εξαγωγή) Περιορισμένος τύπος γραμμικής λίστας: Εισαγωγή και διαγραφή μόνο στο ένα άκρο της λίστας (στην αρχή) AbstractDataType Stack { instances ordered list of elements; one end is called the bottom; the other is the top; operations Create (): create an empty stack; IsEmpty (): return true if stack is empty, return false otherwise; Top (): return top element of stack; Add (x): add element x to the stack; Delete (x): delete top element from stack and put it in x; } Πληροφορικής 23

Εφαρμογή Στοίβας Υπολογισμός της ΕΠΙΘΕΜΑΤΙΚΗΣ μορφής μίας αλγεβρικής έκφρασης από την ΕΝΔΟΘΕΜΑΤΙΚΗ μορφή. ΕΠΙΘΕΜΑΤΙΚΗ POSTFIX ΕΝΔΟΘΕΜΑΤΙΚΗ INFIX Στην ενδοθεματική μορφή αναπαράστασης αλγεβρικών εκφράσεων ο μοναδικός τελεστής τίθεται πριν από τη μεταβλητή ενώ ο δυαδικός τελεστής τίθεται μεταξύ των δύο μεταβλητών. Πληροφορικής 24

Εφαρμογή Στοίβας Παράδειγμα: Ενδοθεματική (Infix): A*B+C*D^E/F+G*H Επιθεματική (Postfix): AB*CDE^*F/+GH*+ Για τον υπολογισμό μιας αλγεβρικής έκφρασης ο μεταφραστής πραγματοποιεί: Μετάφραση της ενδοθεματικής μορφής της αριθμητικής έκφρασης σε επιθεματική Η επιθεματική μορφή χρησιμοποιείται για τον υπολογισμό της αλγεβρικής έκφρασης Πληροφορικής 25

Προτεραιότητες Τελεστών Οι μαθηματικές εκφράσεις αποτελούνται από τελεστές (operators) και από μεταβλητές ή τελεστέους (operands). Οι τελεστές διακρίνονται σε δυαδικούς (binary) και σε Operator unary-, unary+,! *, /, %, && +, -, <, >,,!, <, > Priority 4 3 2 1 μοναδικούς (unary) αν αφορούν δύο ή μια μεταβλητές αντίστοιχα Πληροφορικής 26

infix expression: z a * ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: Όταν ένα στοιχείο είναι μεταβλητή ή σταθερά, τότε τοποθετείται στα δεξιά της επιθεματικής μορφής Όταν το στοιχείο είναι τελεστής τότε κατευθύνεται σε μια στοίβα. Πριν την οριστική ώθηση στη στοίβα, ο τελεστής συγκρίνεται με τον τελεστή της κορυφής της στοίβας. Όταν εισερχόμενος τελεστής έχει προτεραιότητα μεγαλύτερη, τότε ο τελεστής εισάγεται στην κορυφή της στοίβας Εάν η προτεραιότητα του εισερχόμενου τελεστή είναι μικρότερη ή ίση τότε: Απωθούνται όλοι οι τελεστές της στοίβας με προτεραιότητα μεγαλύτερη ή ίση από την προτεραιότητα του νέου τελεστή Και ο νέος τελεστής εισάγεται και η ώθηση ολοκληρώνεται Πληροφορικής 27

infix expression: z a * ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: Πληροφορικής 28

infix expression: z a * ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z Πληροφορικής 29

infix expression: za * ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z Πληροφορικής 30

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a Πληροφορικής 31

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a * Πληροφορικής 32

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a ( * Πληροφορικής 33

infix expression: za* (x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x ( * Πληροφορικής 34

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x + ( * Πληροφορικής 35

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + ( * Πληροφορικής 36

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + ( * Πληροφορικής 37

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + * Πληροφορικής 38

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + * Πληροφορικής 39

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + * + Πληροφορικής 40

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z + Πληροφορικής 41

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z * + Πληροφορικής 42

infix expression: za* ( x + y ) + z * c ^ ( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z c * + Πληροφορικής 43

infix expression: za* ( x + y ) + z * c^( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z c ^ * + Πληροφορικής 44

infix expression: za* ( x + y ) + z * c^( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z c ( ^ * + Πληροφορικής 45

infix expression: za* ( x + y ) + z * c^( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z c 2 ( ^ * + Πληροφορικής 46

infix expression: za* ( x + y ) + z * c^( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z c 2 ( ^ * + Πληροφορικής 47

infix expression: za* ( x + y ) + z * c^( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z c 2 ( ( ^ * + Πληροφορικής 48

infix expression: za* ( x + y ) + z * c^( 2 ( d + w ) ) / x ; postfix expression: z a x y + * z c 2 ~ ( ( ^ * + Πληροφορικής 49

infix expression: za* ( x + y ) + z * c^( 2 ( d+ w ) ) / x ; postfix expression: z a x y + * z c 2 d ~ ( ( ^ * + Πληροφορικής 50

infix expression: za* ( x + y ) + z * c^( 2 ( d+w ) ) / x ; postfix expression: z a x y + * z c 2 d ~ ( ( ^ * + Πληροφορικής 51

infix expression: za* ( x + y ) + z * c^( 2 ( d+w ) ) / x ; postfix expression: z a x y + * z c 2 d ~ ( ( ^ * + Πληροφορικής 52

infix expression: za* ( x + y ) + z * c^( 2 ( d+w ) ) / x ; postfix expression: z a x y + * z c 2 d ~ + ( ( ^ * + Πληροφορικής 53

infix expression: za* ( x + y ) + z * c^( 2 ( d+w) ) / x ; postfix expression: z a x y + * z c 2 d ~ w + ( ( ^ * + Πληροφορικής 54

infix expression: za* ( x + y ) + z * c^( 2 ( d+w)) / x ; postfix expression: z a x y + * z c 2 d ~ w + ( ( ^ * + Πληροφορικής 55

infix expression: za* ( x + y ) + z * c^( 2 ( d+w)) / x ; postfix expression: z a x y + * z c 2 d ~ w + ( ( ^ * + Πληροφορικής 56

infix expression: za* ( x + y ) + z * c^( 2 ( d+w)) / x ; postfix expression: z a x y + * z c 2 d ~ w + ( ( ^ * + Πληροφορικής 57

infix expression: za* ( x + y ) + z * c^( 2 ( d+w)) / x ; postfix expression: z a x y + * z c 2 d ~ w + ( ^ * + Πληροφορικής 58

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/ x ; postfix expression: z a x y + * z c 2 d ~ w + ( ^ * + Πληροφορικής 59

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/ x ; postfix expression: z a x y + * z c 2 d ~ w + ( ^ * + Πληροφορικής 60

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/ x ; postfix expression: z a x y + * z c 2 d ~ w + ^ * + Πληροφορικής 61

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x ; postfix expression: z a x y + * z c 2 d ~ w + ^ * + Πληροφορικής 62

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x ; postfix expression: z a x y + * z c 2 d ~ w + ^ * + Πληροφορικής 63

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x ; postfix expression: z a x y + * z c 2 d ~ w + ^ * + Πληροφορικής 64

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x ; postfix expression: z a x y + * z c 2 d ~ w + ^ * / + Πληροφορικής 65

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x; postfix expression: z a x y + * z c 2 d ~ w + ^ * x / + Πληροφορικής 66

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x; postfix expression: z a x y + * z c 2 d ~ w + ^ * x / + Πληροφορικής 67

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x; postfix expression: z a x y + * z c 2 d ~ w + ^ * x / + Πληροφορικής 68

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x; postfix expression: z a x y + * z c 2 d ~ w + ^ * x / + Πληροφορικής 69

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x; postfix expression: z a x y + * z c 2 d ~ w + ^ * x / + Πληροφορικής 70

infix expression: za* ( x + y ) + z * c^( 2 ( d+w))/x; postfix expression: z a x y + * z c 2 d ~ w + ^ * x / + Πληροφορικής 71

Εφαρμογή Στοίβας Αναζήτηση ενός μονοπατιού σε ένα λαβύρινθο. Πληροφορικής 72

Λαβύρινθος Entrance Exit Πληροφορικής 73

1 1 1 1 1 1 0 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 Πληροφορικής 74

Κινήσεις NW N NE [row-1][col-1] [row-1]col] [row-1][col+1] W X E [row]col-1] [row][col] [row][col+1] [row+1][col-1] [row+1][col] [row+1][col+1] SW S SE Allowable moves Πληροφορικής 75

Επίλυση Είσοδος 1 1 1 1 1 1 0 0 1 0 0 1 (1,4,E) (1,3,E) 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 1 Έξοδος (2,3,N) (2,2,E) (2,1,E) (1,1,S) (1,0,E) Πληροφορικής 76

Παράδειγμα Να προτείνετε µια δοµή δεδοµένων η οποία να υποστηρίζει εκτός από τις συνήθεις πράξεις στοίβας (IsEmpty, MakeEmpty, Top, Push, Pop) και την επιπλέον πράξη FindMin, η οποία επιστρέφει το µικρότερο στοιχείο της δοµής (χωρίς να το εξάγει). Να γράψετε ι) µια καθαρή προδιαγραφή των πράξεων και των µεταβλητών που χρειάζονται για τη δοµή και (ιι) την υλοποίηση των πράξεων σε ψευδοκώδικα. Όλες οι πράξεις πρέπει να είναι της τάξης Ο(1). Πληροφορικής 77

Λύση Σε κάθε θέση της στοίβας αποθηκεύουµε ζεύγη στοιχείων όπου το πρώτο µέλος κάθε ζεύγους αντιστοιχεί στο στοιχείο που εισήχθηκε, και το δεύτερο µέλος του ζεύγους στο µέχρι στιγµής ελάχιστο στοιχείο της στοίβας. Πληροφορικής 78

Για παράδειγµα οι διαδοχικές εισαγωγές 4,3,5,9,7,1,2 έχουν ως αποτέλεσµα τις πιο κάτω Κατά συνέπεια, ανά πάσα στιγµή µπορούµε να βρούµε και να επιστρέψουµε το ελάχιστο στοιχείο της στοίβας σε χρόνο σταθερό (επιστρέφοντας το δεύτερο µέλος του ζεύγους που βρίσκεται στον κόµβο κορυφής της στοίβας). Πληροφορικής 79