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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 11: Φροντιστήριο για Στοίβες. Διδάσκων: Παναγιώτης Ανδρέου. ΕΠΛ035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. Και Μηχ. Υπολ.

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

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

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

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

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

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

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

ΕΠΛ232: Εργαστήριο 2

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

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

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

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

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

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

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

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

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

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

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

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

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

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

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Ενότητα 2: Στοίβες Ουρές - Λίστες Ασκήσεις και Λύσεις

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

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

Σειρά Προβλημάτων 3 Λύσεις

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

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

υναµικές οµές εδοµένων (συν.) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα:

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Μεταβλητές- Τύποι- Τελεστές

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

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

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

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

Σύντοµος Οδηγός της Qbasic. Πέρδος Αθανάσιος Καθηγητής Πληροφορικής

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

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

Φροντιστήριο 4 Σκελετοί Λύσεων

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

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

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

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

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΣΤΟΙΒΑ ΧΑΡΑΚΤΗΡΙΣΤΙΚΗ ΙΔΙΟΤΗΤΑ ΤΗΣ ΣΤΟΙΒΑΣ. Το τελευταίο στοιχείο που εισήχθη θα εξαχθεί πρώτο. Άλλο όνομα L I F O (Last In First Out)

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

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

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

ΔΟΜΗ ΕΠΙΛΟΓΗΣ. Οι διάφορες εκδοχές της

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Γλώσσα Προγραμματισμού C

Χρήσεις Στοίβας ΣΤΟΙΒΑ. Ορισμός Στοίβας (stack) Βασική Λειτουργικότητα

Η γλώσσα προγραμματισμού Strange

Προγραµµατισµός. Αναδροµή (1/2)

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

Προγραμματισμός I (Θ)

2.1. Εντολές Σχόλια Τύποι Δεδομένων

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

Επανάληψη για τις Τελικές εξετάσεις

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

ιαφάνειες παρουσίασης #4

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

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

ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ PASCAL

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

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

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

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

Οργάνωση Η/Υ. Γλώσσα Assembly. Τμήμα Εφαρμσμένης Πληροφορικής Πανεπιστήμιο Μακεδονίας Α. Χατζηγεωργίου-Η. Σακελλαρίου

Εισαγωγή στην γλώσσα προγραμματισμού C

Υλοποίηση Λειτουργιών Στοίβας Απλά(1/2)

Προγραμματισμός και Χρήση Ηλεκτρονικών Υπολογιστών - Βασικά Εργαλεία Λογισμικού

Η στοίβα (stack) H στοίβα είναι ένας αποθηκευτικός χώρος οργανωµένος κατά τέτοιο τρόπο ώστε να υποστηρίζει δύο βασικές λειτουργίες:

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Έστω συμβολοσειρά Το σύνολο FIRST περιέχει τα τερματικά σύμβολα από τα οποία αρχίζουν οι συμβολοσειρές που παράγονται από την

Διάλεξη 13: Δομές Δεδομένων ΙΙ (Ταξινομημένες Λίστες)

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

Δομή προγράμματος στη Fortran

Transcript:

Εφαρµογές στοιβών Στην ενότητα αυτή θα µελετηθεί η χρήση στοιβών στις εξής εφαρµογές: Αναδροµικές συναρτήσεις Ισοζυγισµός Παρενθέσεων Αντίστροφος Πολωνικός Συµβολισµός ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-1

Στοίβες και Αναδροµικές ιαδικασίες Οι στοίβες βρίσκουν µεγάλη χρήση στην πληροφορική για δηµιουργία άλλων δοµών και σε βασικό λογισµικό. Κλασικό παράδειγµα αφορά την κλήση υποπρογραµµάτων (function calls) και αναδροµικών διαδικασιών. Σε κάθε κλήση οποιασδήποτε συνάρτησης ένα σύνολο από λέξεις (stack frame) φυλάσσεται σε µια στοίβα, από όπου µπορεί να ανασυρθεί. Όταν µια συνάρτηση καλεί µια άλλη συνάρτηση οι παράµετροι της συνάρτησης, η διεύθυνση επιστροφής και οι τοπικές µεταβλητές της καλούσας συνάρτησης φυλάσσονται µέσα στη στοίβα του προγράµµατος. Έτσι, όταν η κληθείσα συνάρτηση τερµατίσει, το περιβάλλον την καλούσας συνάρτησης ανασύρεται από τη στοίβα για να συνεχιστεί κανονικά η εκτέλεσή της. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-2

Εφαρµογές Στοίβων Αφού κάθε κλήση µιας διαδικασίας εκτελείται στο δικό της περιβάλλον, είναι επιτρεπτή και η κλήση συναρτήσεων από τον εαυτό τους (αναδροµή). int f(int x, int y) { } int a; if ( term_cond ) return...; a =...; return g(a); int g(int z) { int p,q; p =...; q =...; return f(p,q); } ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-3

Ισοζυγισµός Παρενθέσεων Οέλεγχος σύνταξης (π.χ. ενός προγράµµατος) απαιτεί να ταιριάξουµε σύµβολα/λέξεις όπως: begin µε end else µε if παρενθέσεις { µε } Ας υποθέσουµε την ύπαρξη του συνόλου χαρακτήρων: {, }, [, ], (, ). Πρόβληµα: να διαπιστώσετε αν µια συµβολοσειρά που περιέχει τους πιο πάνω χαρακτήρες είναι ισοζυγισµένη, δηλαδή όλες οι παρενθέσεις ταιριάζουν. π.χ. { [ ] } ( [ { } { } [ ] ) ) ( [ ] { ( ) } ) ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-4

Λύση βασισµένη σε στοίβες Ισοζυγισµός Παρενθέσεων MakeEmpty (S); while (c = next character and c is not EOF) if c = (,[,{ Push(c,S); else if IsEmpty(S) report error; else d = Top(S); Pop(S); if c does not match d report error } if IsEmpty(S) report success else report error Χρόνος Εκτέλεσης: ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-5

Παράδειγµα Εκτέλεσης Ανά πάσα στιγµή, η στοίβα περιέχει όλες τις `αριστερές παρενθέσεις που δεν έχουν ακόµη `ταιριαστεί. ( ( [ { [ ( ([{}(]) [{}(]) {}(]) } (]) [ ( ( [ ( ( ] ) ] ) ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-6

Αντίστροφος Πολωνικός Συµβολισµός Οαντίστροφος πολωνικός συµβολισµός (Jan Lukasiewich, 1951) είναι µια µέθοδος αναπαράστασης αριθµητικών παραστάσεων που δεν κάνει χρήση παρενθέσεων. π.χ. αντί α + β γράφουµε α β + (α + β)*γ γράφουµε α β + γ * α + (β*γ) γράφουµε α β γ * + α*β + γ*δ γράφουµε α β * γ δ * + Η συνήθης µορφή µιαςπαράστασηςονοµάζεται ενθεµατική (infix), γιατί οι τελεστές των πράξεων τίθενται µεταξύ των τελεστέων. Η πολωνική µορφή µιας παράστασης ονοµάζεται µεταθεµατική (postfix) γιατί οι τελεστές βρίσκονται µετά από τους τελεστέους. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-7

Υπολογισµός Μεταθεµατικής Παράστασης Ζητείται η υλοποίηση ενός προγράµµατος που να υπολογίζει αριθµητικές εκφράσεις αντίστροφου πολωνικού συµβολισµού. Για τον υπολογισµό τέτοιων εκφράσεων µπορεί να χρησιµοποιηθεί η έννοια της στοίβας. Η δοµή του προγράµµατος θα έχει τη µορφή της παρακάτω ανακύκλωσης: MakeEmpty(S); while (c = next character & c is not EOF){ case c of integer: Push(c,S); *: Push(Pop(S) * Pop(S), S); +: Push(Pop(S) + Pop(S), S); : default: } print Top(S); Χρόνος Εκτέλεσης: error υποθέτουµε υλοποίηση της Pop η οποία και επιστρέφει και αφαιρεί τον κόµβο κορυφής στοίβας ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-8

Παράδειγµα Εκτέλεσης Έστω η παράσταση 60 5 3 + 2 4 + * -. ( Η σε ενθεµατική µορφή: 60 - (5+3)*(2+4) ) 3 5 60 60 8 60 60 5 3 + 2 4 + * - 5 3 + 2 4 + * - + 2 4 + * - 2 4 + * - 4 2 6 8 8 48 60 60 60 12 + * - * - - ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-9

Από ενθεµατική σε µεταθεµατική µορφή Υποθέτουµε την ύπαρξη ακεραίων, παρενθέσεων (, ), +, * Κανόνας: το * έχει µεγαλύτερη προτεραιότητα από το +. Στόχος: µετατροπή της ενθεµατικής σε µεταθεµατική µορφή. π.χ. 60 + (( 5 + 3) * ( 2 + 4)) 60 5 3 + 2 4 + * + Χρησιµοποιώντας στοίβες η µετατροπή µπορεί να επιτευχθεί σε χρόνο Ο(Ν). ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-10

ΟΑλγόριθµος εδοµένο Εισόδου: λίστα L που περιέχει µια ενθεµατική παράσταση MakeEmpty(S); για κάθε c στην L κάνε { αν ο c είναι integer: τύπωσέ τον Χρόνος Εκτέλεσης:O(n) ( : γράψε ( στη στοίβα S ) : ανέτρεξε στη στοίβα αφαιρώντας και τυπώνοντας όλα τα στοιχεία µέχρι την πρώτη ( που θα συναντήσεις την οποία αφαίρεσε χωρίς να τυπώσεις. + : αφαίρεσε και τύπωσε όλα τα + και * που βρίσκονται στη στοίβα µέχρι να συναντήσεις µια ( ή να αδειάσει η στοίβα και στη συνέχεια πρόσθεσε το + στη στοίβα * : αφαίρεσε και τύπωσε όλα τα * που βρίσκονται στη στοίβα µέχρι να συναντήσεις µια ( ή ένα + ή να αδειάσει η στοίβα και στη συνέχεια πρόσθεσε το * } αφαίρεσε και τύπωσε όλα τα στοιχεία που παραµένουν στη στοίβα. ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-11

Παράδειγµα Εκτέλεσης * + + * + a+b*c*(d+e) *c*(d+e) *(d+e) (d+e) ab abc abc* ( * + + ( * + d+e) ) abc* abc*de abc*de+*+ ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 2006 4-12