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

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

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

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

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

Δομές Δεδομένων. Ενότητα 1 - Εισαγωγή. Χρήστος Γκουμόπουλος. Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων

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

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

Οι λίστες, χάνοντας τα πλεονεκτήματα των πινάκων, λύνουν προβλήματα που παρουσιάζουν οι πίνακες

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

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

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

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

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

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

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

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

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

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

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

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3)

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

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

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

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

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

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

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

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

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

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

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

Διακριτά Μαθηματικά [Rosen, κεφ. 3] Γιάννης Εμίρης Τμήμα Πληροφορικής & Τηλεπικοινωνιών, ΕΚΠΑ Οκτώβριος 2018

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Εισαγωγή στους Αλγόριθμους. Παύλος Εφραιμίδης, Λέκτορας

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

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

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

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

Δομές Δεδομένων. Λουκάς Γεωργιάδης.

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

Standard Template Library (STL) C++ library

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

Ασυμπτωτικός Συμβολισμός

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

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

Προγραμματισμός Η/Υ. Δομές Δεδομένων. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

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

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

Ορθότητα Χωρική αποδοτικότητα. Βελτιστότητα. Θεωρητική ανάλυση Εμπειρική ανάλυση. Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

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

Περιεχόμενα. Περιεχόμενα

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

Ασυμπτωτικός Συμβολισμός

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

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

Κεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

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

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

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ : ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΤΑΞΗ : Γ ΛΥΚΕΙΟΥ ΣΠΟΥΔΕΣ ΟΙΚΟΝΟΜΙΑΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΔΙΑΓΩΝΙΣΜΑ ΠΕΡΙΟΔΟΥ : ΜΑΪΟΥ

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Υπολογιστική Πολυπλοκότητα

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

οµές εδοµένων 3 ο Εξάµηνο Τµήµα Πανεπιστήµιο Πληροφορικής Ιωαννίνων ΟΜΕΣ Ε ΟΜΕΝΩΝ

Κεφάλαιο 13 Αντισταθμιστική Ανάλυση

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

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

Ενδεικτικές Ερωτήσεις Θεωρίας

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

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

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

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

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

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

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

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

Επιλογές και Κριτήρια Σχεδιασμού ΑΤΔ Ανεξαρτήτως από Γλώσσα Υλοποίησης 24/4/2012

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

ΑΕΠΠ Ερωτήσεις θεωρίας

Επιλέξτε Σωστό ή Λάθος για καθένα από τα παρακάτω:

Ασυμπτωτικός Συμβολισμός

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

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

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

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

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

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

Βασικοί τύποι δεδομένων (Pascal) ΕΠΑ.Λ Αλίμου Γ Πληροφορική Δομημένος Προγραμματισμός (Ε) Σχολ. Ετος Κων/νος Φλώρος

Διάλεξη 9: Αφηρημένοι Τύποι Δεδομένων. Διδάσκων: Παναγιώτης Ανδρέου

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

ΚΕΦΑΛΑΙΟ 8: Αφαίρεση δεδοµένων

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

Αν ένα πρόβλημα λύνεται από δύο ή περισσότερους αλγόριθμους, ποιος θα είναι ο καλύτερος; Με ποια κριτήρια θα τους συγκρίνουμε;

Εντολές γλώσσας μηχανής

Transcript:

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

Βιβλιογραφία Robert Sedgewick, Αλγόριθμοι σε C, Μέρη 1-4 (Θεμελιώδεις Έννοιες, Δομές Δεδομένων, Ταξινόμηση, Αναζήτηση), Τρίτη Αμερικάνικη Έκδοση, Εκδόσεις Κλειδάριθμος Γεώργιος Φρ. Γεωργακόπουλος, Δομές Δεδομένων: Έννοιες, Τεχνικές, Αλγόριθμοι, Πανεπιστημιακές Εκδόσεις Κρήτης, Ηράκλειο 2002. Cormen, Leiserson, Rivest and Stein. Introduction to Algorithms, MIT Press, Third Edition, 2009. Kurt Mehlhorn and Peter Sanders: Algorithms and Data Structures, The Basic Toolbox, Springer, 2008. Χαροκόπειο Πανεπιστήμιο 2/49

Δομές Δεδομένων Στην επιστήμη υπολογιστών μία δομή δεδομένων είναι ένας συγκεκριμένος τρόπος αποθήκευσης και οργάνωσης δεδομένων στον υπολογιστή με σκοπό αυτά τα δεδομένα να μπορούν να χρησιμοποιηθούν αποδοτικά. Χαροκόπειο Πανεπιστήμιο 3/49

Τύποι Δεδομένων Ένας τύπος δεδομένων αποτελείται από: ένα σύνολο τιμών ένα σύνολο από πράξεις που μπορούν να εκτελεστούν σε αυτές τις τιμές Χαροκόπειο Πανεπιστήμιο 4/49

Τύποι Δεδομένων Ένας τύπος δεδομένων αποτελείται από: ένα σύνολο τιμών ένα σύνολο από πράξεις που μπορούν να εκτελεστούν σε αυτές τις τιμές Παράδειγμα boolean 2 τιμές: true, false πράξεις: AND, OR, NOT, κ.τ.λ Χαροκόπειο Πανεπιστήμιο 4/49

Τύποι Δεδομένων Ένας τύπος δεδομένων αποτελείται από: ένα σύνολο τιμών ένα σύνολο από πράξεις που μπορούν να εκτελεστούν σε αυτές τις τιμές Παράδειγμα ακέραιος τιμές Z πράξεις: πρόσθεση, αφαίρεση, κ.τ.λ Χαροκόπειο Πανεπιστήμιο 4/49

Στοιχειώδης Δομές Δεδομένων Θα μιλήσουμε για τις παρακάτω στοιχειώδης δομές: Πίνακες Λίστες Οι δομές αυτές είναι βασικοί λίθοι για άλλες πιο πολύπλοκες δομές δεδομένων. Χαροκόπειο Πανεπιστήμιο 5/49

Πίνακας (array) Η πιο θεμελιώδης δομή δεδομένων 0 4 8 12 16 20 24 28 32 36 40 byte 32-bit word Χαροκόπειο Πανεπιστήμιο 6/49

Πίνακας (array) Η πιο θεμελιώδης δομή δεδομένων Ένας πίνακας αποτελεί μία σταθερή συλλογή δεδομένων ίδιου τύπου τα οποία αποθηκεύονται ακολουθιακά σε κάποιο σημείο της μνήμης. Χαροκόπειο Πανεπιστήμιο 7/49

Πίνακας (array) Η πιο θεμελιώδης δομή δεδομένων Ένας πίνακας αποτελεί μία σταθερή συλλογή δεδομένων ίδιου τύπου τα οποία αποθηκεύονται ακολουθιακά σε κάποιο σημείο της μνήμης. Χαρακτηριστικά Σταθερό μέγεθος Ένας τύπος δεδομένων Συνεχόμενη αποθήκευση στην μνήμη Τυχαία πρόσβαση (RAM - random access memory) Χαροκόπειο Πανεπιστήμιο 7/49

Πίνακας (array) Η πιο θεμελιώδης δομή δεδομένων Μία δήλωση σε γλώσσα C όπως η παρακάτω: int array [ 1 0 0 ] ; δεσμεύει ένα κομμάτι μνήμης 100 ακεραίων. Η δήλωση περιέχει όλη την απαραίτητη πληροφορία ώστε ο μεταγλωττιστής να μπορεί να υλοποιήσει εντολές όπως array [ 2 3 ] = 5 ; με την χρήση τυχαίας πρόσβασης. Χαροκόπειο Πανεπιστήμιο 8/49

Πίνακας (array) Η πιο θεμελιώδης δομή δεδομένων Στην C το όνομα ενός πίνακα είνα συνώνυμο με την διεύθυνση μνήμης του πρώτου στοιχείου του πίνακα. Έτσι και αλλιώς ο μεταγλωττιστής αποφασίζει που να αποθηκεύσει τον πίνακα. Από τον τύπο του πίνακα (int) ξέρει πως κάθε στοιχείο του πίνακα αποτελείται από 4 bytes (σε 32-bit αρχιτεκτονική). Αφού τα στοιχεία είναι συνεχόμενα στην μνήμη, το στοιχείο 23 είναι στην διεύθυνση μνήμης array + 23 4 Χαροκόπειο Πανεπιστήμιο 9/49

Πίνακας Ποια είναι τα πλεονεκτήματα και μειονεκτήματα των πινάκων Για να απαντήσουμε αυτό το ερώτημα θα κάνουμε μία μικρή παρένθεση. Χαροκόπειο Πανεπιστήμιο 10/49

Ανάλυση Αλγορίθμων διαδικασία κατανόησης της απόδοσης και συμπεριφοράς σημαντική στη σχεδίαση και υλοποίηση Διαφορετικοί τρόποι ανάλυσης Εμπειρική ανάλυση (empirical analysis) Προσπάθεια κατανόησης συμπεριφοράς μέσω μίας υλοποίησης Μαθηματική ανάλυση Προσπάθεια κατανόησης συμπεριφοράς μέσω των μαθηματικών Χαροκόπειο Πανεπιστήμιο 11/49

Εμπειρική ανάλυση Χρειαζόμαστε μία σωστή και ολοκληρωμένη υλοποίηση Πρέπει να αποφασίσουμε τι δεδομένα θα χρησιμοποιήσουμε πραγματικά τυχαία Χρειαζόμαστε ένα μέτρο σύγκρισης Χαροκόπειο Πανεπιστήμιο 12/49

Ασυμπτωτική Ανάλυση Μετράμε την απόδοση ενός αλγορίθμου ή δομής δεδομένων ως συνάρτηση του μεγέθους της εισόδου n f(n). Συνήθως μετράμε ως μονάδα κόστους μία σημαντικού κόστους εντολή του υπολογιστή, π.χ: μαθηματικές πράξεις συγκρίσεις load-store από την μνήμη Χαροκόπειο Πανεπιστήμιο 13/49

Ασυμπτωτική Ανάλυση Παράδειγμα Έστω ένας πίνακας με n ακεραίους. Πόσο χρόνο χρειάζεται ο παρακάτω αλγόριθμος για να βρει το μέγιστο. 1 int findmax ( int * array, int n ) 2 { 3 int max = array [ 0 ] ; 4 for ( int i = 1 ; i < n ; ++i ) 5 { 6 if ( array [ i ] > max ) 7 max = array [ i ] ; 8 } 9 return max ; 10 } Χαροκόπειο Πανεπιστήμιο 14/49

Ασυμπτωτική Ανάλυση Γενική Ιδέα δεν μας ενδιαφέρουν οι σταθερές εάν ένας αλγόριθμος κάνει 2 προσθέσεις και μία σύγκριση για n στοιχεία, εμείς δεν μετράμε 3n κόστος αλλά n προσπαθούμε να κάνουμε την ανάλυση ανεξάρτητη από την ταχύτητα του υπολογιστή που τρέχει ο αλγόριθμος Χαροκόπειο Πανεπιστήμιο 15/49

Ασυμπτωτική Ανάλυση Γενική Ιδέα δεν μας ενδιαφέρουν οι σταθερές εάν ένας αλγόριθμος κάνει 2 προσθέσεις και μία σύγκριση για n στοιχεία, εμείς δεν μετράμε 3n κόστος αλλά n προσπαθούμε να κάνουμε την ανάλυση ανεξάρτητη από την ταχύτητα του υπολογιστή που τρέχει ο αλγόριθμος Προσπαθούμε να καταλάβουμε πως συμπεριφέρεται ένας αλγόριθμος όταν n. Εάν ένας αλγόριθμος έχει κόστος 4n 4 + 2n 2 + 30 εμείς αγνοούμε τους μικρούς όρους και τις σταθερές και λέμε πως ο αλγόριθμος συμπεριφέρεται n 4 για πολύ μεγάλα n. Χαροκόπειο Πανεπιστήμιο 15/49

Ασυμπτωτική Ανάλυση Παράδειγμα Έστω ένας αλγόριθμος Α που για είσοδο μεγέθους n τρέχει σε χρόνο 3n 2 + 2n + 5 Χαροκόπειο Πανεπιστήμιο 16/49

Ασυμπτωτική Ανάλυση Παράδειγμα Έστω ένας αλγόριθμος Α που για είσοδο μεγέθους n τρέχει σε χρόνο 3n 2 + 2n + 5 Ισχυριζόμαστε πως για αρκετά μεγάλες εισόδους οι χαμηλές δυνάμεις δεν έχουν μεγάλη σημασία Χαροκόπειο Πανεπιστήμιο 16/49

Ασυμπτωτική Ανάλυση Παράδειγμα Έστω ένας αλγόριθμος Α που για είσοδο μεγέθους n τρέχει σε χρόνο 3n 2 + 2n + 5 Ισχυριζόμαστε πως για αρκετά μεγάλες εισόδους οι χαμηλές δυνάμεις δεν έχουν μεγάλη σημασία n 3n 2 2n + 5 2 12 9 10 300 25 1000 3000000 2005 100000 3 10 10 200005 Χαροκόπειο Πανεπιστήμιο 16/49

Ασυμπτωτική Ανάλυση Παράδειγμα 1200 1000 3n 2 συγκριτικά με 2n + 5 3n 2 2n + 5 800 600 400 200 0 0 5 10 15 20 Ο τετραγωνικός όρος αυξάνει πολύ πιο γρήγορα από τον γραμμικό όρο. Αγνοώντας τους μικρούς όρους χάνουμε πολύ λίγο για μεγάλες εισόδους Χαροκόπειο Πανεπιστήμιο 17/49

Συμβολισμός μεγάλου όμικρον big-oh notation O(g(n)) = { f(n) : υπάρχουν θετικές σταθερές c και n } 0 ώστε 0 f(n) c g(n) για όλα τα n n 0 Χαροκόπειο Πανεπιστήμιο 18/49

Συμβολισμός μεγάλου όμικρον big-oh notation O(g(n)) = { f(n) : υπάρχουν θετικές σταθερές c και n } 0 ώστε 0 f(n) c g(n) για όλα τα n n 0 cg(n) f(n) n n0 f(n) = O(g(n)) Χαροκόπειο Πανεπιστήμιο 18/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα 2n 3 + 100n 2 + n O(n 3 ) Απόδειξη Αρκεί να βρούμε θετική σταθερά c και n 0 0 ώστε να ισχύει: 2n 3 + 100n 2 + n cn 3 Χαροκόπειο Πανεπιστήμιο 19/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα 2n 3 + 100n 2 + n O(n 3 ) Απόδειξη Αρκεί να βρούμε θετική σταθερά c και n 0 0 ώστε να ισχύει: Διαιρώντας με n > 1 έχουμε πως αρκεί 2n 3 + 100n 2 + n cn 3 2n 2 + 100n + 1 cn 2. Χαροκόπειο Πανεπιστήμιο 19/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα 2n 3 + 100n 2 + n O(n 3 ) Απόδειξη Αρκεί να βρούμε θετική σταθερά c και n 0 0 ώστε να ισχύει: Διαιρώντας με n > 1 έχουμε πως αρκεί 2n 3 + 100n 2 + n cn 3 2n 2 + 100n + 1 cn 2. Για n 1 έχουμε 2n 2 + 100n + 1 2n 2 + 100n 2 + n 2 103n 2. Άρα μπορούμε να θέσουμε c = 103 και n 0 = 1 > 0. Χαροκόπειο Πανεπιστήμιο 19/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα n O(2 n ) Απόδειξη Πρέπει να βρούμε c > 0, n 0 > 0 ώστε να ισχύει n c 2 n. Χαροκόπειο Πανεπιστήμιο 20/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα n O(2 n ) Απόδειξη Πρέπει να βρούμε c > 0, n 0 > 0 ώστε να ισχύει n c 2 n. Παρατηρώντας τον τρόπο που μεγαλώνουν οι συναρτήσεις βλέπουμε πως για c = 1 και n 0 = 1 η ανισότητα ισχύει. Πρέπει όμως να αποδείξουμε πως παραμένει αλήθεια για κάθε n n 0 = 1. Χαροκόπειο Πανεπιστήμιο 20/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα n O(2 n ) Απόδειξη Πρέπει να βρούμε c > 0, n 0 > 0 ώστε να ισχύει n c 2 n. Παρατηρώντας τον τρόπο που μεγαλώνουν οι συναρτήσεις βλέπουμε πως για c = 1 και n 0 = 1 η ανισότητα ισχύει. Πρέπει όμως να αποδείξουμε πως παραμένει αλήθεια για κάθε n n 0 = 1. Έστω f(n) = 2 n n. Η συνάρτηση είναι συνεχής και παραγωγίσιμη. Η πρώτη παράγωγος είναι f (n) = ln(2) 2 n 1 και είναι θετική για κάθε n 1. Χαροκόπειο Πανεπιστήμιο 20/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα n O(2 n ) Απόδειξη Πρέπει να βρούμε c > 0, n 0 > 0 ώστε να ισχύει n c 2 n. Παρατηρώντας τον τρόπο που μεγαλώνουν οι συναρτήσεις βλέπουμε πως για c = 1 και n 0 = 1 η ανισότητα ισχύει. Πρέπει όμως να αποδείξουμε πως παραμένει αλήθεια για κάθε n n 0 = 1. Έστω f(n) = 2 n n. Η συνάρτηση είναι συνεχής και παραγωγίσιμη. Η πρώτη παράγωγος είναι f (n) = ln(2) 2 n 1 και είναι θετική για κάθε n 1. Άρα η συνάρτηση f(n) είναι γνησίως αύξουσα για n 1 που σημαίνει πως παραμένει θετική για κάθε n n 0 = 1. Χαροκόπειο Πανεπιστήμιο 20/49

Συμβολισμός μεγάλου όμικρον big-oh notation Θεώρημα 1000000 O(1) Απόδειξη Πρέπει να δείξουμε πως υπάρχουν c > 0, n 0 > 0 ώστε 1000000 c 1 για κάθε n n 0. Η σχέση ισχύει για c = 1000001 και n 0 = 1. Χαροκόπειο Πανεπιστήμιο 21/49

Συμβολισμός μεγάλου όμικρον Παράδειγμα Θεώρημα Για a > 0 ισχύει πως f(n) = an 2 + bn O(n 2 ). Απόδειξη Πρέπει να βρούμε θετική σταθερά c και n 0 0 ώστε ή ισοδύναμα an 2 + bn cn 2 για κάθε n n 0 an + b cn. Επειδή an + b a n + b a n + b n για n 1 μπορούμε να διαλέξουμε c = a + b και n 0 οποιαδήποτε θετική τιμή μεγαλύτερη ή ίση του ένα π.χ n 0 = 1. Χαροκόπειο Πανεπιστήμιο 22/49

Συμβολισμός μεγάλου όμικρον big-oh notation Συναντάμε συχνά τους εξής χρόνους: σταθερός O(1) λογαριθμικός O(log n) γραμμικός O(n) O(n log n) τετραγωνικός O(n 2 ) πολυωνυμικός O(n k ) εκθετικός O(2 n ) Χαροκόπειο Πανεπιστήμιο 23/49

Συμβολισμός μεγάλου όμικρον big-oh notation 900 800 log(x) x x*log(x) x*x 700 600 Running Time 500 400 300 200 100 0-100 0 5 10 15 20 25 30 Input Size Χαροκόπειο Πανεπιστήμιο 24/49

Συμβολισμός μεγάλου όμικρον big-oh notation 10000 x*log(x) x*x 8000 Running Time 6000 4000 2000 0 0 20 40 60 80 100 Input Size Χαροκόπειο Πανεπιστήμιο 24/49

Συμβολισμός Ομέγα Ω-notation Ω(g(n)) = { f(n) : υπάρχουν θετικές σταθερές c και n } 0 ώστε 0 c g(n) f(n) για όλα τα n n 0 f(n) cg(n) n n0 f(n) = Ω(g(n)) Χαροκόπειο Πανεπιστήμιο 25/49

Συμβολισμός Θήτα Θ-notation Θ(g(n)) = { } f(n) : f(n) = O(g(n)) και f(n) = Ω(g(n)) c2g(n) f(n) c1g(n) n n0 f(n) = Θ(g(n)) Χαροκόπειο Πανεπιστήμιο 26/49

Ανάλυση Αλγορίθμων Διαφορετικοί τρόποι ανάλυσης Εμπειρική ανάλυση (empirical analysis) Προσπάθεια κατανόησης συμπεριφοράς μέσω μίας υλοποίησης Μαθηματική ανάλυση Προσπάθεια κατανόησης συμπεριφοράς μέσω των μαθηματικών Καμία μέθοδος δεν είναι πανάκεια Χαροκόπειο Πανεπιστήμιο 27/49

Πίνακας Πλεονεκτήματα και Μειονεκτήματα Πλεονεκτήματα προσπέλαση στοιχείου σε σταθερό χρόνο, O(1) τυχαία προσπέλαση Μειονεκτήματα σταθερό μέγεθος δεν μπορούμε να προσθέσουμε στοιχεία στη μέση ενός πίνακα αναδιάταξη στοιχείων μόνο με αντιγραφή Χαροκόπειο Πανεπιστήμιο 28/49

Διδιάστατοι Πίνακες πίνακες με 2 αριθμοδείκτες, πχ array[3][2] αντιστοιχούν σε μήτρες (matrices) υλοποιούνται με μονοδιάστατους πίνακες, πχ για 5 5 μεγέθους πίνακα έχουμε array[i][j] = array[5 i + j] άρα κάθε στοιχείο χρειάζεται O(1) χρόνο για να προσπελαστεί Χαροκόπειο Πανεπιστήμιο 29/49

Διδιάστατοι Πίνακες Πολλαπλασιασμός Πινάκων c 11 c 12 c 1p a 11 a 12 a 1m b 11 b 12 b 1p c 21 c 22 c 2p a 21 a 22 a 2m b 21 b 22 b 2p........ =................ c n1 c n2 c np a n1 a n2 a nm b m1 b m2 b mp for ( i = 0 ; i < n ; i++ ) for ( j = 0 ; j < p ; j++ ) for ( k = 0, c [ i ] [ j ] = 0. 0 ; k < m ; k++ ) c [ i ] [ j ] += a [ i ] [ k ] * b [ k ] [ j ] ; Χαροκόπειο Πανεπιστήμιο 30/49

Διδιάστατοι Πίνακες Πολλαπλασιασμός Πινάκων c 11 c 12 c 1p a 11 a 12 a 1m b 11 b 12 b 1p c 21 c 22 c 2p a 21 a 22 a 2m b 21 b 22 b 2p........ =................ c n1 c n2 c np a n1 a n2 a nm b m1 b m2 b mp for ( i = 0 ; i < n ; i++ ) for ( j = 0 ; j < p ; j++ ) for ( k = 0, c [ i ] [ j ] = 0. 0 ; k < m ; k++ ) c [ i ] [ j ] += a [ i ] [ k ] * b [ k ] [ j ] ; Η πολυπλοκότητα είναι O(npm) Χαροκόπειο Πανεπιστήμιο 30/49

Συνδεδεμένες Λίστες Linked Lists Στόχος πρόσβαση σε μία συλλογή στοιχείων με τη σειρά (ακολουθιακά) αποδοτική αναδιάταξη στοιχείων, διαγραφή, προσθήκη, κ.τ.λ Χαροκόπειο Πανεπιστήμιο 31/49

Συνδεδεμένες Λίστες Linked Lists Ορισμός Μία συνδεδεμένη λίστα είναι ένα σύνολο στοιχείων όπου κάθε στοιχείο αποτελεί τμήμα ενός κόμβου (node) ο οποίος περιέχει επίσης ένα σύνδεσμο (link) προς κάποιον κόμβο. Χαροκόπειο Πανεπιστήμιο 31/49

Συνδεδεμένες Λίστες Τερματισμός Με μηδενικό σύνδεσμο (null link) NULL Χαροκόπειο Πανεπιστήμιο 32/49

Συνδεδεμένες Λίστες Τερματισμός Με ψευδο-κόμβο (dummy node) Χαροκόπειο Πανεπιστήμιο 32/49

Συνδεδεμένες Λίστες Τερματισμός Χωρίς τερματισμό, κυκλική λίστα (circular) Χαροκόπειο Πανεπιστήμιο 32/49

Διπλά Συνδεδεμένες Λίστες Περιέχουν και σύνδεσμο προς το προηγούμενο στοιχείο της λίστας Χαροκόπειο Πανεπιστήμιο 33/49

Χαρακτηριστικά Λιστών προσθήκη, διαγραφή, μετακίνηση σε O(1) χρόνο αναζήτηση k-στού στοιχείου σε O(k) χρόνο καταναλώνουν περισσότερο χώρο από πίνακες, αφού κρατάμε και τους συνδέσμους Χαροκόπειο Πανεπιστήμιο 34/49

Προσθήκη σε Λίστα t x Χαροκόπειο Πανεπιστήμιο 35/49

Προσθήκη σε Λίστα t x Χαροκόπειο Πανεπιστήμιο 35/49

Προσθήκη σε Λίστα t x Χαροκόπειο Πανεπιστήμιο 35/49

Διαγραφή από Λίστα x t Χαροκόπειο Πανεπιστήμιο 36/49

Διαγραφή από Λίστα x t Χαροκόπειο Πανεπιστήμιο 36/49

Διαγραφή από Λίστα x t Χαροκόπειο Πανεπιστήμιο 36/49

Αφαίρεση (abstraction) Ανάπτυξη αφηρημένων μοντέλων που διαχωρίζουν την λειτουργία από την υλοποίηση. Για να αναπτύξουμε ένα πολύπλοκο σύστημα (όπως τα σημερινά υπολογιστικά συστήματα) βασιζόμαστε σε στρώσεις αφαίρεσης (layers of abstraction). Χαροκόπειο Πανεπιστήμιο 37/49

Στρώσεις αφαίρεσης Παράδειγμα bits από φυσικές ιδιότητες υλικών αφηρημένο μοντέλο μηχανής από τις δυναμικές ιδιότητες των τιμών ενός συνόλου από bits αφηρημένο μοντέλο γλώσσας προγραμματισμού αφηρημένη έννοια αλγορίθμου Χαροκόπειο Πανεπιστήμιο 38/49

Αφηρημένος Τύπος Δεδομένων (ΑΤΔ) Abstract Data Type Ορισμός Ένας αφηρημένος τύπος δεδομένων είναι ένας τύπος δεδομένων (ένα σύνολο τιμών και μία συλλογή πράξεων ή λειτουργιών που εφαρμόζονται σε αυτές τις τιμές) ο οποίος μπορεί να προσπελαστεί μόνο μέσω κάποιας διασύνδεσης (interface). Ονομάζουμε πελάτη (client) ένα πρόγραμμα που χρησιμοποιεί κάποιον αφηρημένο τύπο δεδομένων και υλοποίηση (implementation) ένα πρόγραμμα στο οποίο ορίζεται ο τύπος δεδομένων. Χαροκόπειο Πανεπιστήμιο 39/49

Αφηρημένος Τύπος Δεδομένων (ΑΤΔ) Abstract Data Type Χρήση μόνο μέσα από την διασύνδεση Μπορούμε να αλλάξουμε ελεύθερα την υλοποίηση Θα δούμε αργότερα παραδείγματα διασύνδεση υλοποίηση Χαροκόπειο Πανεπιστήμιο 40/49

Στοίβα ως ΑΤΔ Μία στοίβα ώθησης προς τα κάτω (pushdown stack) είναι ένας ΑΤΔ που περιλαμβάνει τις εξής λειτουργίες: Εισαγωγή (ώθηση) ενός νέου στοιχείου, PUSH(S,x). Διαγραφή (απώθηση, pop) του τελευταίου στοιχείου που προστέθηκε στη στοίβα, POP(S). Έλεγχος κενής στοίβας, EMPTY(S). Επιστροφή του μεγέθους της στοίβας, SIZE(S). Χαροκόπειο Πανεπιστήμιο 41/49

Στοίβα Η στοίβα ακολουθεί την αρχή τελευταίο μέσα, πρώτο έξω ή αλλιώς LIFO (last-in, first-out) Push Pop Αφού ορίζουμε μία στοίβα ως ΑΤΔ δεν μας ενδιαφέρει η ακριβής υλοποίηση της στοίβας. Μπορούμε για παράδειγμα να υλοποιήσουμε μια στοίβα με λίστα αλλά και με πίνακα. Χαροκόπειο Πανεπιστήμιο 42/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() S A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() Y A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() Q A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() U Q A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() E U Q A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() U Q A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() Q A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() S A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() T S A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() S A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() A E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() I E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() O I E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() I E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() N I E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() I E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() E Χαροκόπειο Πανεπιστήμιο 43/49

Παράδειγμα Χρήσης Στοίβας EAS*Y*QUE***ST***IO*N*** τα γράμματα σημαίνουν push() και τα αστεράκια pop() Χαροκόπειο Πανεπιστήμιο 43/49

Εφαρμογή Στοίβας Υπολογισμών εκφράσεων (infix notation) Μια σημαντική εφαρμογή της στοίβας είναι ο υπολογισμός αριθμητικών παραστάσεων. π.χ για να υπολογίσουμε την παράσταση 5 (((9 + 8) (4 6)) + 7) πρέπει να έχουμε ένα μηχανισμό αποθήκευσης ενδιάμεσων αποτελεσμάτων. Μία στοίβα είναι ένας ιδανικός μηχανισμός. Χαροκόπειο Πανεπιστήμιο 44/49

Εφαρμογή Στοίβας Υπολογισμών Εκφράσεων (infix notation) Για να υπολογίσουμε ενθεματικές (infix) παραστάσεις, θα κάνουμε δύο βήματα:.1 μετατροπή από ενθεματική σε μεταθεματική (postfix) αναπαράσταση.2 υπολογισμός την μεταθεματικής παράστασης Και τα δύο βήματα θα γίνουν με την χρήση στοίβας. Χαροκόπειο Πανεπιστήμιο 45/49

Εφαρμογή Στοίβας Μεταθεματική Αναπαράσταση (postfix notation) Η παράσταση 5 (((9 + 8) (4 6)) + 7) γράφεται ως εξής σε postfix 5 9 8 + 4 6 7 + Για να επιστρέψουμε σε ενθεματική μορφή αντικαθιστούμε όλες τις εμφανίσεις των όρων a b και a b + με (a b) και (a + b). Χαροκόπειο Πανεπιστήμιο 46/49

Εφαρμογή Στοίβας Υπολογισμός Μεταθεματικής Παράστασης (postfix notation) Για να υπολογίσουμε την τιμή μιας μεταθεματικής παράστασης καθώς διαβάζουμε σύμβολα κάνουμε τα εξής: εαν το σύμβολο που διαβάσαμε είναι αριθμός, τον αποθηκεύσουμε μέσα στην στοίβα εαν το σύμβολο είναι πράξη, βγάζουμε δύο στοιχεία από την στοίβα, εκτελούμε την πράξη μεταξύ τους και βάζουμε το αποτέλεσμα στην στοίβα Χαροκόπειο Πανεπιστήμιο 47/49

Εφαρμογή Στοίβας Μετατροπή Πλήρους Ενθεματικής σε Μεταθεματική Παράσταση Για να μετατρέψουμε μια πλήρης ενθεματική παράσταση σε μεταθεματική κάνουμε την εξής διαδικασία: ωθούμε τους τελεστές σε μια στοίβα και τους όρους (αριθμούς) στην έξοδο κάθε φορά που βλέπουμε μια δεξιά παρένθεση ), αποθούμε ένα τελεστή από την στοίβα και τον στέλνουμε στην έξοδο Χαροκόπειο Πανεπιστήμιο 48/49

Ουρές FIFO πρώτο μέσα, πρώτο έξω (first-in, first-out) Παρόμοια δομή με την στοίβα, με αντίθετο κανόνα διαγραφής. Αφαιρείται το παλιότερο στοιχείο Queue Dequeue Λειτουργεί ακριβώς όπως η ουρά στο ταμείο μιας τράπεζας. Χαροκόπειο Πανεπιστήμιο 49/49