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

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Indexing.
Advertisements

3.4 Στοίβα (stack) (μόνο θεωρία)
Δένδρα van Emde Boas TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Μελετάμε την περίπτωση όπου αποθηκεύουμε.
Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση.
Αλγόριθμοι Αναζήτησης
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
-Στοίβα-Ουρά - Πλεονεκτήματα πινάκων -Δομές δεδομένων δευτερεύουσας μνήμης -Πληροφορική και δεδομένα -Παραδείγματα-Προβλήματα ψευδοκώδικα.
Αντισταθμιστική ανάλυση Κατά τη διάρκεια εκτέλεσης του Α η Δ πραγματοποιεί μία ακολουθία από πράξεις. Θεωρήστε έναν αλγόριθμο Α που χρησιμοποιεί μια δομή.
Ανασκόπηση σε Δείκτες, Ουρές, Στοίβες, Συνδεδεμένες Λίστες
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο
ΣΤΟΙΧΕΙΑ ΨΕΥΔΟΚΩΔΙΚΑ ΒΑΣΙΚΕΣ ΔΟΜΕΣ ΒΑΣΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ ΠΙΝΑΚΩΝ
Επίπεδα Γραφήματα : Προβλήματα και Υπολογιστική Πολυπλοκότητα TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA.
Πολυπλοκότητα Παράμετροι της αποδοτικότητας ενός αλγόριθμου:
ΤΕΧΝΙΚΕΣ Αντικειμενοστραφουσ προγραμματισμου
TEMPLATES STANDARD TEMPLATE LIBRARY ΟΝΤΟΚΕΝΤΡΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ C Evangelos Theodoridis.
Στοίβα & Ουρά Πέμπτη 08/03/2007 Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον Τμήμα: Γ3τεχν. Καθηγητής :Ν. Γιαννακόπουλος ΠΕ19 Ερωτήσεις:
Εισαγωγικές Έννοιες Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
Κοντινότεροι Κοινοί Πρόγονοι α βγ θ δεζ η π ν ι κλμ ρσ τ κκπ(λ,ι)=α, κκπ(τ,σ)=ν, κκπ(λ,π)=η κκπ(π,σ)=γ, κκπ(ξ,ο)=κ ξο κκπ(ι,ξ)=β, κκπ(τ,θ)=θ, κκπ(ο,μ)=α.
Δυναμική Διατήρηση Γραμμικής Διάταξης Διατηρεί μια γραμμική διάταξη δυναμικά μεταβαλλόμενης συλλογής στοιχείων. Υποστηρίζει τις λειτουργίες: Έλεγχος της.
Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Stacks - Στοίβες.
Ε. ΠετράκηςΣτοίβες, Ουρές1 Στοίβες  Στοίβα: περιορισμένη ποικιλία λίστας  τα στοιχεία μπορούν να εισαχθούν ή να διαγραφούν μόνο από μια άκρη : λίστες.
Στοίβα, Ουρά.
Αλγόριθμοι συνέχεια 2.2.4, 2.2.5,
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Lists– Λίστες 1. Αυτό-αναφορικές δομές Τα μέλη μίας δομής μπορεί να είναι οποιουδήποτε τύπου, ακόμα και δείκτες σε δομές του ίδιου τύπου. Χρησιμοποιώντας.
2-1 Ανάλυση Αλγορίθμων Αλγόριθμος Πεπερασμένο σύνολο εντολών που, όταν εκτελεστούν, επιτυγχάνουν κάποιο επιθυμητό αποτέλεσμα –Δεδομένα εισόδου και εξόδου.
ΜΑΘΗΜΑ: ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C++ ΔΙΔΑΣΚΩΝ: Π. ΚΑΤΣΑΡΟΣ Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Πέμπτη, 2 Απριλίου 2015Τμ.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΣΥΝΟΛΑ.
Λεξικό, Union – Find Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ
Κεφάλαιο 10 – Υποπρογράμματα
Ασυμπτωτικός Συμβολισμός
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι13-1 Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ο αλγόριθμος Dijkstra για εύρεση βραχυτέρων μονοπατιών.
1 ΤΜΗΜΑ ΜΠΕΣ Αλγόριθμοι Αναζήτησης Εργασία 1 Τυφλή Αναζήτηση.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
Ελαφρύτατες διαδρομές TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A AA A A.
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι 4-1 Στην ενότητα αυτή θα μελετηθεί η χρήση στοιβών στις εξής εφαρμογές: Αναδρομικές συναρτήσεις Ισοζυγισμός Παρενθέσεων.
Δομές Δεδομένων και Αρχεία Ενότητα 7: Η δομή Στοίβα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας.
Δομές Δεδομένων και Αρχεία Ενότητα 10: Κυκλικά και Διπλά Συνδεδεμένη Λίστα Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I.
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Κλάσεις και Αντικείμενα.
Κεφάλαιο 3ο Δομές Δεδομένων.
Συνδετικότητα γραφήματος (graph connectivity). α β Υπάρχει μονοπάτι μεταξύ α και β; Παραδείγματα: υπολογιστές ενός δικτύου ιστοσελίδες ισοδύναμες μεταβλητές.
ΤΕΙ ΚΕΝΤΡΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ ΣΕΡΡΕΣ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Τ.Ε. Πτυχιακή εργασία Μάρθα Τσολακίδου.
Οι Δομές Δεδομένων Ουρά και Στοίβα
Θεωρία Γραμμών Αναμονής ή ΟΥΡΕΣ (QUEUE)
Δυναμικός Κατακερματισμός
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Κατανεμημένα Συστήματα
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ ΠΡΟΧΩΡΗΜΕΝΕΣ ΤΕΧΝΙΚΕΣ
Διδάσκων: Δρ. Τσίντζα Παναγιώτα
Αρχεσ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ ΤΑξη Β΄
ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ: ΔΙΟΙΚΗΣΗ ΕΚΠΑΙΔΕΥΤΙΚΩΝ ΜΟΝΑΔΩΝ
Δομές δεδομένων.
Μέγιστη ροή Κατευθυνόμενο γράφημα 12 Συνάρτηση χωρητικότητας
Μορφές κατανομών Αθανάσιος Βέρδης.
Πίνακας Συμβόλων Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής.
Μανασσάκης Βασίλης Καθηγητής Πληροφορικής
ΣΤΟΙΒΑ.
Ανάπτυξη Εφαρμογών σε Προγραμματιστικό Περιβάλλον ΑΕΠΠ
ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ
ΑΣΥΜΠΤΩΤΙΚΗ ΑΝΑΛΥΣΗ & ΠΡΟΣΘΕΣΗ
Πολυπλοκότητα Αλγορίθμων
Πολυπλοκότητα Αλγορίθμων
Δυναμικός Κατακερματισμός
Μανασσάκης Βασίλης Καθηγητής Πληροφορικής
ΠΙΝΑΚΕΣ Δομή ΟΥΡΑΣ (queue)
Μεταγράφημα παρουσίασης:

Οι Δομές Δεδομένων Ουρά και Στοίβα ΓΕ0170 -Αλγόριθμοι και Προηγμένες Προγραμματικές Τεχνικές Οι Δομές Δεδομένων Ουρά και Στοίβα Νίκος Αθανάσης e-mail: athanasis@geo.aegean.gr

Συμβολισμός Ο Συμβολισμός Ο. Μία συνάρτηση f(n) λέγεται ότι έχει πολυπλοκότητα της τάξης O(g(n)) και συμβολίζεται με f(n) = O(g(n)) ή με f(n) ∈ O(g(n)), αν υπάρχει μία θετική σταθερά c και μία τιμή n0, έτσι ώστε για κάθε n > n0 να ισχύει η σχέση f(n) < c*g(n).

Συμβολισμός Ο «Η f (n) είναι πολυπλοκότητας O(g(n)).” Εναλλακτικά, “ Η f (n) είναι τάξης (order of) g(n).” Εναλλακτικά, “ f (n) ∈ O(g(n))», f(x) ∈ O(‘άνω άκρο’) σημαίνει ότι η  f «μεγαλώνει όχι γρηγορότερα από" το ‘’ανω άκρο’ Στον συμβολισμό Ο δεν μας ενδιαφέρουν σταθεροί όροι / μη ασυμπτωτικοί όροι Ο αλγόριθμος τάξης 9x² είναι ίδιας τάξης με τον 10x². ο αλγόριθμος τάξης 10x² είναι ίδιας τάξης με τον 10x² - x + 2017 διότι, τα μικρότερα μέρη τείνουν να μην έχουν σημασία σε μεγάλη κλίμακα

Συμβολισμός Ο Μας ενδιαφέρει ο λόγος καθώς το μέγεθος των δεδομένων τείνουν στο άπειρο

Παραδείγματα Η συνάρτηση 8n+5 είναι O(n). Αρκεί να βρούμε μια σταθερά c>0, και μια σταθερά no ώστε 8n+5 ≤ cn για κάθε n ≥ n0. Με c = 9 έχω 8n+5<=9n που ισχύει για κάθε n>=5 ή εναλλακτικά με c = 13 έχω 8n+5<=13n που ισχύει για κάθε n>=1 Η 5n4 +3n3+2n2 +4n+1 είναι O(n4). Διότι: 5n4+3n3+2n2+4n+1≤ (5+3+2+4+1)n4 = cn4, για c = 15 Η 5n2 +3nlog n+2n+5 is O(n2). Διότι:5n2 +3nlog n+2n+5 ≤(5+3+2+5)n2 =cn2, για c=15 Η 20n3 +10nlog n+5 είναι O(n3). Διότι: 20n3 +10nlog n+5 ≤ 35n3, για c=35 H 3logn+2 είναι O(logn). Διότι: 3logn+2 ≤ 5logn, για c=5. H 2n+100log n is O(n). Διότι: 2n+100log n≤ 102n, για c= 102

Παραδείγματα για καλύτερη κατανόηση Χρόνος εκτέλεσης (=συνολικά βήματα): c * n. Πολυπλοκότητα: Ο(n) Συνολικός χρόνος : ? Πολυπλοκότητα: ? Συνολικός χρόνος: ? Πολυπλοκότητα: ?

Παραδείγματα για καλύτερη κατανόηση Συνολικός χρόνος: ? Πολυπλοκότητα: ?

Η Δομή Δεδομένων: Στοίβα Μια Δομή Δεδομένων Stack (Στοίβα) είναι μια συλλογή από αντικείμενα που προσθέτονται και διαγράφονται με βάση την αρχή: Τελευταίο μέσα, πρώτο έξω last-in, first-out (LIFO) Ο χρήστης μπορεί να προσθέτει αντικείμενα στη στοίβα ανά πάσα στιγμή και έχει πρόβαση κάθε φορά στο τελευταίο χρονικά αντικείμενο που προστέθηκε, όπως ακριβώς γίνεται σε μια στοίβα στο νεροχύτη μας. Kάθε πιάτο που πλένεται τοποθετείται στην κορυφή (top) της στοίβας των πιάτων, ενώ για σκούπισμα λαμβάνεται και πάλι το πιάτο της κορυφής. Τα δεδομένα που βρίσκονται στην κορυφή της στοίβας λαμβάνονται πρώτα, ενώ αυτά που βρίσκονται στο βάθος της στοίβας λαμβάνονται τελευταία. Όταν θέλουμε να προσθέσουμε ένα νέο στοιχείο στη στοίβα κάνουμε push (ώθηση). Όταν θέλουμε να χρησιμοποιήσουμε ένα νέο στοιχείο κάνουμε pop (απώθηση)

Η Δομή Δεδομένων: Στοίβα Η διαδικασία της ώθησης πρέπει να ελέγχει, αν η στοίβα είναι γεμάτη, οπότε λέγεται ότι συμβαίνει υπερχείλιση (overflow) της στοίβας. Αντίστοιχα, η διαδικασία απώθησης ελέγχει, αν υπάρχει ένα τουλάχιστον στοιχείο στη στοίβα, δηλαδή ελέγχει αν γίνεται υποχείλιση (underflow) της στοίβας.

Λειτουργίες Στοίβας S.push(e): Ώθηση (προσθήκη) ενός αντικειμένου στην κορυφή. Ελεγχος υπερχείλισης S.pop(): Απώθηση (διαγραφή) ενός αντικειμένου από την κορυφή της στοίβας. Έλεγχος υποχείλισης S.top(): Επιστρέφει την κορυφή της στοίβας (χωρίς διαγραφή) S.is empty(): Επιστρέφει True αν η στοίβα δεν περιέχει στοιχεία len(S): Επιστρέφει το μήκος της στοίβας. Λειτουργία Χρόνος εκτέλεσης

Λειτουργίες Στοίβας Λειτουργία Επιστρέφει Περιεχόμενα στοίβας

Υλοποίηση Στοίβας Μια στοίβα μπορεί να υλοποιηθεί με τη βοήθεια μιας Python List Μέθοδος Αντιστοιχία με Python Περισσότερα στο αρχείο StackClass στο φάκελο του μαθήματος

Εφαρμογή στοίβας 1 - Αντιστροφή περιεχομένου ενός αρχείου Περισσότερα στο αρχείο ReverseFile στο φάκελο του μαθήματος 2 - Ταίριασμα παρενθέσεων σε έκφραση Σωστό: ( )(( )){([( )])} Σωστό: ((( )(( )){([( )])})) Λάθος: )(( )){([( )])} Λάθος: ({[ ])} Λάθος: ( Περισσότερα στο αρχείο Matching στο φάκελο του μαθήματος 3 - Έλεγχος εγκυρότητας html αρχείου Περισσότερα στο αρχείο Matchinghtml στο φάκελο του μαθήματος

Η Δομή Δεδομένων: Ουρά Οι ουρές είναι καθημερινό φαινόμενο. Για παράδειγμα, ουρές δημιουργούνται όταν άνθρωποι, αυτοκίνητα, εργασίες, προγράμματα κ.λπ. περιμένουν για να εξυπηρετηθούν. Το θέμα είναι τόσο σημαντικό και με τέτοιες πρακτικές επιπτώσεις, ώστε ένας ιδιαίτερος κλάδος των Μαθηματικών και Πληροφορικής, η Θεωρία Ουρών (Queueing Theory), μελετά τη συμπεριφορά και την επίδοση των ουρών. Σε μία ουρά αναμονής εξυπηρετείται εκείνος που στάθηκε στην ουρά πρώτος από όλους τους άλλους (αν και πολύ συχνά στην Ελάδα αυτό δεν ισχύει!) Γραμμή προτεραιότητας

Η Δομή Δεδομένων: Ουρά Μια Ουρά είναι μια δομή δεδομένων όπου τα αντικείμενα εισέρχονται και διαγράφονται με βάση την αρχή first-in, first-out (FIFO). Έτσι, τα αντικείμενα εισέρχονται ανά πάσα στιγμή στο τέλος της ουράς ενώ αυτό που είναι στην ουρά το περισσότερο διάστημα μπορεί να διαγραφεί και αποτελεί και το πρώτο στοιχείο της ουράς. Δύο είναι οι κύριες λειτουργίες σε μία ουρά: η εισαγωγή (enqueue) στοιχείου στο πίσω άκρο της ουράς, και η εξαγωγή (dequeue) στοιχείου από το εμπρός άκρο της ουράς. Q.enqueue(e): Προσθήκη του στοιχείου e στο πίσω άκρο της ουράς Q. Q.dequeue( ): Διαγραφή και επιστροφή του πρώτου στοιχείου από το εμπρός άκρο της ουράς Q.first(): Επιστρέφει το πρώτο στοιχείο της ουράς. Q.is empty( ): Επιστρέφει True εάν η ουρά Q δεν περιέχει κανένα αντικείμενο len(Q): Επιστρέφει τον αριθμό των αντικειμένων της ουράς

Λειτουργίες της Ουράς Λειτουργία Επιστρέφει Περιεχόμενα στοίβας

Υλοποίηση Ουράς Η υλοποίηση της ουράς θα μπορούσε να γίνει με τη βοήθεια μιας Python λίστας. Θα μπορούσαμε να εισάγουμε ένα στοιχείο e καλώντας την append(e) ώστε να εισάγεται στο τέλος της λίστας. Θα μπορούσαμε να κάνουμε εξαγωγή καλώντας την pop(0), ώστε να διαγραφεί το πρώτο στοιχείο της λίστας. Όμως, κάτι τέτοιο θα είχε ως αποτελέσμα να εκτελείται σε κάθε εξαγωγή ένας βρόγχος πολυπλοκότητας O(n) για να συμπληρωθεί το κενό που αφήνει η εξαγωγή του πρώτου στοιχείου Μπορούμε να αντιμετωπίσουμε το παραπάνω πρόβλημα αντικαθιστώντας την τιμή της εξαγωγής με το None και διατηρώντας σε μια μεταβλητή f (front index) την αρχή της ουράς. Έτσι, η εξαγωγή θα γίνεται σε χρόνο O(1). Το πρόβλημα που υπάρχει με την παραπάνω υλοποίηση είναι ότι το μήκος της ουράς μεγαλώνει όσο εισάγονται και εξάγονται στοιχεία. Μπορεί να έχω έτσι μια τεράστια λίστα που όμως διατηρεί λίγα στοιχεία

Υλοποίηση Ουράς Για να αντιμετωπίσουμε επιτυχώς τα παραπάνω προβλήματα, η ουρά υλοποιείται με μια “κυκλική” λίστα η οποία έχει σταθερό μέγεθος Ν. Κατά την εξαγωγή, ο δείκτης f (αρχή της ουράς) αυξάνεται σε f = (f + 1) % N. Για παράδειγμα, αν έχουμε μια λίστα μεγέθους 10 και η αρχή της ουράς είναι στο 7, μια νέα εξαγωγή θα κάνει την αρχή της ουράς να δείχνει στη θέση (7+1) % 10 = 8. Από τη θέση 9 όμως μια νέα εξαγωγή θα δείχνει την κορυφή της ουράς στη θέση (9+1) % 10 = 0 Νέα στοιχεία εισάγονται στο τέλος της λίστας. Η εισαγωγή γίνεται στη θέση f + μήκος_ουράς+1 Αν το τελευταίο στοιχείο που έχει εισαχθεί βρίσκεται στη θέση N-1 τότε το επόμενο εισάγεται στη θέση 0

Υλοποίηση Ουράς Υλοποίηση της κλάσης Queue με τις παρακάτω μεταβλητές αντικειμένου instance variables data: μια λίστα συγκερκριμένου μεγέθους που περιέχει τα στοιχεία τη ουράς size: ένας αριθμός που δείχει το τρέχον μέγεθος της ουράς (δηλαδή το μέγεθος της λίστας) front: ο δείκτης προς το πρώτο στοιχείο της ουράς. Λειτουργία Χρόνος εκτέλεσης Περισσότερα στο αρχείο MyQueue στο φάκελο του μαθήματος