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

Σχετικά έγγραφα
Δομές Δεδομένων (Data Structures)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΗΥ-150. Προγραμματισμός

POINTERS, AGGREGATION, COMPOSITION

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

#4. Heaps (σωροί), η ταξινόμηση HeapSort, η δομή std::priority_queue της STL

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

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

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

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

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

Ανάπτυξη και Σχεδίαση Λογισμικού

ΗΥ-150. Προγραμματισμός

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

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

Ανάπτυξη και Σχεδίαση Λογισμικού

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

Δομημένος Προγραμματισμός (ΤΛ1006)

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

6η Διάλεξη Διάσχιση Γράφων και Δέντρων

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

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

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

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

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

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

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

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

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

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

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

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

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

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

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

Αλγόριθμοι Τυφλής Αναζήτησης

Αναζήτηση σε Γράφους. Μανόλης Κουμπαράκης. ΥΣ02 Τεχνητή Νοημοσύνη 1

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός (ΤΛ1006)

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Εντολές επανάληψης Εντολές επανάληψης while for do-while ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ Παράδειγμα #1 Εντολή while

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

Εισαγωγή στον Προγραμματισμό

Σκοπός. Προγραμματίζοντας τον Arduino ΙΙ Εντολή Εκχώρησης & Εντολές. Συλλογή & Επεξεργασία Δεδομένων. Πρόγραμμα. Εντολές Επεξεργασίας Δεδομένων

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

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Αλγόριθμοι Ταξινόμησης Μέρος 2

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 4

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

Εισαγωγή στις Συναρτήσεις

Δομημένος Προγραμματισμός (ΤΛ1006)

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

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

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

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

υναµική διαχείριση µνήµης στη C++ Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 είκτες

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι χρειάζεται η εντολή if ; Εντολή if. Παράδειγμα #1. Παράδειγμα #1

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

Transcript:

Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 14 Στοίβες 1 / 14

Στοίβες Η στοίβα είναι μια ειδική περίπτωση γραμμικής λίστας στην οποία οι εισαγωγές και οι διαγραφές επιτρέπονται μόνο από το ένα άκρο Συνήθως αυτό το άκρο λέγεται κορυφή (top) Η στοίβα είναι μια δομή τύπου LIFO (Last In First Out) 2 / 14

Λειτουργίες στοίβας empty() ελέγχει αν οι στοίβα είναι άδεια size() επιστρέφει το πλήθος των στοιχείων της στοίβας push() ωθεί ένα στοιχείο στην κορυφή της στοίβας pop() αφαιρεί το στοιχείο που είναι στην κορυφή της στοίβας top() επιστρέφει το στοιχείο που είναι στην κορυφή της στοίβα (χωρίς να το αφαιρεί) 3 / 14

Στοίβες στη C++ std::stack Παράδειγμα Ο ακόλουθος κώδικας εξετάζει αν ένα κείμενο είναι παλινδρομικό δηλαδή διαβάζεται το ίδιο από αριστερά προς τα δεξιά και από δεξιά προς τα αριστερά #include <stack> stack<char> st; char s [] = amanaplanacanalpanama ; for (unsigned int i = 0; i < strlen (s); i++) { st push(s[i ]) ; } cout << size= << stsize () << endl; char s2[st size () ]; int i = 0; while (! st empty()) { s2[i ] = st top() ; st pop(); i++; } s2[i]= \0 ; if (strcmp(s, s2) == 0) cout << Palindrome << endl; else cout << Not a palindrome << endl; 4 / 14

Εφαρμογές στοίβας Στοίβα χρόνου εκτέλεσης Υλοποίηση λειτουργιών Undo/Redo σε προγράμματα (πχ επεξεργαστής κειμένου) Λειτουργία ως βοηθητικής δομής για την υλοποίηση αλγορίθμων (πχ για την υλοποίηση Depth First Search σε γραφήματα) 5 / 14

Στοίβα χρόνου εκτέλεσης (Runtime Stack) Χρησιμοποιείται κατά την κλήση συναρτήσεων Όταν μια συνάρτηση καλείται ωθείται στη στοίβα χρόνου εκτέλεσης ένα πλαίσιο δεδομένων που περιέχει στοιχεία που αφορούν τη συνάρτηση που κλήθηκε καθώς και τη διεύθυνση επιστροφής δηλαδή τη διεύθυνση στην οποία θα πρέπει να επιστρέψει η εκτέλεση όταν ολοκληρωθεί η κλήση της συνάρτησης Όταν ολοκληρώνεται η κλήση της κάθε συνάρτησης το πλαίσιο το οποίο είναι στην κορυφή της στοίβας χρόνου εκτέλεσης απωθείται από τη στοίβα και ο έλεγχος περνά στη συνάρτηση που είναι πλέον στην κορυφή της λίστας 6 / 14

Εφαρμογή στοίβας: το πρόβλημα Stock Span Στο Stock Span πρόβλημα δίνονται οι τιμές που σημείωσε μια μετοχή για έναν αριθμό ημερών και πρέπει να υπολογιστεί για κάθε ημέρα το span Το span για μια ημέρα i ορίζεται ως ο μεγαλύτερος αριθμός από συνεχόμενες ημέρες μέχρι και την ημέρα i που η τιμή της μετοχής ήταν μικρότερη ή ίση από την τιμή της μετοχής στην ημέρα i Για παράδειγμα για τις τιμές [100, 80, 60, 70,60,75,85] οι span τιμές είναι [1,1,1,2,1,4,6] 7 / 14

Λύση του προβλήματος stock span με τετραγωνική πολυπλοκότητα O(n 2 ) void stock_span(int* stock_prices, int * spans, int N) { for ( int i = 0; i < N; i++) { int c = 1; for ( int j = i 1; j >= 0; j ) { if (stock_prices[ j ] <= stock_prices[i ]) { c++; } else break; } spans[i] = c; } } int N = 7; int stock_prices[] = { 100, 80, 60, 70, 60, 75, 85 }; int * spans = new int[n]() ; // initializes with zero stock_span(stock_prices, spans, N); for ( int i = 0; i < 7; i++) printf ( %d, spans[i ]) ; delete [] spans; 8 / 14

Λύση του προβλήματος stock span με γραμμική πολυπλοκότητα O(n) void stock_span_using_stack(int* stock_prices, int* spans, int N) { stack<int> st ; spans[0] = 1; st push(0); for ( int i = 1; i < N; i++) { while (! st empty() && stock_prices[sttop() ] < stock_prices[i ]) st pop(); if (st empty()) spans[i] = i + 1; else spans[i] = i sttop() ; st push(i) ; } } int N = 7; int stock_prices[] = { 100, 80, 60, 70, 60, 75, 85 }; int * spans = new int[n]() ; // initializes with zero stock_span_using_stack(stock_prices, spans, N); for ( int i = 0; i < 7; i++) printf ( %d, spans[i ]) ; delete [] spans; 9 / 14

Γιατί η λύση του προβλήματος stock span με χρήση στοίβας έχει γραμμική πολυπλοκότητα O(n) Κάθε στοιχείο του πίνακα προστίθεται και αφαιρείται από την στοίβα το πολύ 1 φορά Άρα οι λειτουργίες που γίνονται στην στοίβα είναι το πολύ 2n Καθώς κάθε λειτουργία στην στοίβα εκτελείται σε O(1) η πολυπλοκότητα χειρότερης περίπτωση είναι O(n) 10 / 14

Εφαρμογή στοίβας: infix και postfix μορφές αλγεβρικών παραστάσεων Στην infix μορφή μιας παράστασης οι τελεστές (πράξεις) τοποθετούνται ανάμεσα από τους τελεστέους (σταθερές και μεταβλητές) (πχ x + y) Στην postfix μορφή μιας παράστασης οι τελεστές τοποθετούνται μετά από τους τελεστέους (πχ xy+) Υπολογισμός postfix μορφής αλγεβρικής παράστασης με τη χρήση στοίβας Η παράσταση επεξεργάζεται από αριστερά προς τα δεξιά και για κάθε σύμβολο: Αν είναι μεταβλητή ή σταθερά ωθείται στη στοίβα Αν είναι τελεστής τότε απωθούνται 2 στοιχεία από την κορυφή της στοίβας, εφαρμόζεται η πράξη που υποδηλώνει ο τελεστής και το αποτέλεσμα ωθείται στη στοίβα πχ Η παράσταση 3 4 1-2 * + 7 + ισούται με την τιμή 16 τα δε περιεχόμενα της στοίβας σε κάθε βήμα για να παραχθεί το αποτέλεσμα είναι [3], [3,4], [3,4,1], [3,3], [3,3,2], [3,6], [9], [9,7], [16] 11 / 14

Μετατροπή infix σε postfix Διαδικασία μετατροπής infix σε postfix Η είσοδος είναι μια ακολουθία συμβόλων σε infix μορφή και η έξοδος είναι η ισοδύναμη ακολουθία σε postfix μορφή Για κάθε σύμβολο της ακολουθίας εισόδου: Αν είναι μεταβλητή ή σταθερά τοποθετείται στην παράσταση εξόδου απευθείας Αν είναι τελεστής συγκρίνεται με το κορυφαίο στοιχείο της στοίβας και αν έχει υψηλότερη προτεραιότητα από αυτό εισάγεται στην κορυφή της στοίβας Αν έχει χαμηλότερη ή ίση προτεραιότητα τότε απωθούνται όλοι οι τελεστές με υψηλότερη προτεραιότητα τοποθετούνται στην παράσταση εξόδου και ο νέος τελεστής μπαίνει στη στοίβα πχ για την infix έκφραση a+b*c+dˆe*z-w η postfix μορφή είναι abc*+deˆz*+w- 12 / 14

Εφαρμογή στοίβας: Αναζήτηση μονοπατιού σε λαβύρινθο Λαβύρινθος Είναι μια ορθογώνια περιοχή με μια είσοδο και μια έξοδο Το εσωτερικό του περιέχει τοίχους που δεν μπορούν να διαπεραστούν Το μονοπάτι είναι μια ακολουθία θέσεων από την είσοδο προς την έξοδο για τις οποίες ισχύει ότι καμία δεν είναι μπλοκαρισμένη 13 / 14

Αναφορές http://wwwgeeksforgeeksorg/the-stock-span-problem/ 14 / 14