Δοµές Δεδοµένων. 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων. Ε. Μαρκάκης

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

Γράφημα. Συνδυαστικό αντικείμενο που αποτελείται από 2 σύνολα: Σύνολο κορυφών (vertex set) Σύνολο ακμών (edge set) 4 5 πλήθος κορυφών πλήθος ακμών

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

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

Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K.

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

Δοµές Δεδοµένων. 3η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες. Ε. Μαρκάκης

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

Στοιχειώδεις Δομές Δεδομένων

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

Δοµές Δεδοµένων. 4η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες και Λίστες. Ε. Μαρκάκης

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

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

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

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Κεφάλαιο 1. Ε. Μαρκάκης Επικ. Καθηγητής

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

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

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

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

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

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

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

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

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

Δοµές Δεδοµένων και Αλγόριθµοι - Εισαγωγή

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

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

Ανω Φράγµα στην Τάξη των Συναρτήσεων. Ρυθµός Αύξησης (Τάξη) των Συναρτήσεων. Παράδειγµα (1/2) O( g(n) ) είναι σύνολο συναρτήσεων:

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

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

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

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

Δοµές Δεδοµένων. 8η Διάλεξη: Ταξινόµηση. Ε. Μαρκάκης

Θεωρήµατα Ιεραρχίας Ειδικά Θέµατα Υπολογισµού και Πολυπλοκότητας, Μάθηµα Βασικής Επιλογής Εαρινού Εξαµήνου Τοµέας Εφαρµογών και Θεµελιώσεων

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

Ανάλυση Αλγορίθµων. Σύντοµη επανάληψη (ΕΠΛ 035).

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΚΕΦΑΛΑΙΟ 12: Θεωρία υπολογισµών

Δοµές Δεδοµένων. 13η Διάλεξη Πίνακες Συµβόλων. Ε. Μαρκάκης

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

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

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

Ανάλυση Αλγορίθµων 4. Πειραµατικές Μελέτες. Χρόνος Εκτέλεσης. Περιγραφή και Υλικό Ανάγνωσης

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

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

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

Γνωριµία. οµές εδοµένων Εισαγωγή. Βιβλία Μαθήµατος. Επικοινωνία. ιδάσκων: Ορέστης Τελέλης. Ωρες γραφείου (502, Γρ.

Αναδρομή Ανάλυση Αλγορίθμων

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

Θεωρητικό Μέρος. 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); } }

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

1 Ανάλυση αλγορίθµων. 2 Συµβολισµοί O, Ω και Θ. 3 Αναδροµικές εξισώσεις

Μαθηµατικά για Πληροφορική

Δομές ελέγχου ροής προγράμματος

ρυθιμός αύξησης συναρτήσεων

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

ΠΛΗ111. Ανοιξη Μάθηµα 2 ο. Αλγόριθµοι και Αφηρηµένοι Τύποι εδοµένων. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

5.1. Προσδοκώμενα αποτελέσματα

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

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

Κεφα λαιο 3 Στοιχειώδεις Δομές Δεδομένων

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

Δοµές Δεδοµένων. 15η Διάλεξη Δέντρα Δυαδικής Αναζήτησης και Κατακερµατισµός. Ε. Μαρκάκης

ΕΠΛ 211: Θεωρία Υπολογισμού και Πολυπλοκότητας. Διάλεξη 18: Χρονική και Χωρική Πολυπλοκότητα

Διάλεξη 04: Παραδείγματα Ανάλυσης

Τηλ , Fax: , URL:

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

Ασκήσεις (2) Άσκηση 1

1o Φροντιστήριο ΗΥ240

Δοµές Δεδοµένων. 17η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Αρχή Εγκλεισµού-Αποκλεισµού (3 σύνολα) Αρχή Εκλεισµού-Αποκλεισµού Η Τάξη των Συναρτήσεων. Εφαρµογές. Παράδειγµα 1.

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

Υπολογιστικό Πρόβληµα

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

Αναδρομικοί Αλγόριθμοι

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

Transcript:

Δοµές Δεδοµένων 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων Ε. Μαρκάκης

Περίληψη Διπλά συνδεδεµένες λίστες Αναπαράσταση γράφων µε λίστες Εµπειρική ανάλυση αλγορίθµων Μαθηµατική ανάλυση αλγορίθµων Αύξηση συναρτήσεων Συµβολισµός µεγάλου όµικρον Βασικές αναδροµικές εξισώσεις Παραδείγµατα ανάλυσης Όρια ανάλυσης αλγορίθµων Δοµές Δεδοµένων 05-2

Διπλά συνδεδεµένη λίστα Διπλά συνδεδεµένη λίστα 2 δείκτες σε κάθε κόµβο Κάθε κόµβος δείχνει και στον προηγούµενο Κίνηση προς δύο κατευθύνσεις Ευκολότερη εισαγωγή και διαγραφή Εισαγωγή: αρκεί να έχουµε δείκτη προς προηγούµενο ή επόµενο κόµβο Διαγραφή: αρκεί ο προς διαγραφή κόµβος Μεγαλύτερο κόστος συντήρησης Διπλάσιοι σύνδεσµοι προς ενηµέρωση Μεγαλύτερο κόστος µνήµης Διπλάσιοι σύνδεσµοι προς αποθήκευση Δοµές Δεδοµένων 05-3

Διπλά συνδεδεµένη λίστα Δήλωση διπλά συνδεδεµένης λίστας class Node{ Object item; Node next; Node prev; Node(Object v){ } } item = v; next = null; prev = null; Διαγραφή του κόµβου t Δεν χρειάζονται άλλοι κόµβοι t.next.prev = t.prev; t.prev.next = t.next; Δοµές Δεδοµένων 05-4

Διπλά συνδεδεµένη λίστα Εισαγωγή του κόµβου t Αρκεί ο προηγούµενος ή ο επόµενος Έστω ότι δίνεται ο προηγούµενος x t.next = x.next; x.next.prev = t; x.next = t; t.prev = x; Έστω ότι δίνεται ο επόµενος y t.prev = y.prev; y.prev.next = t; y.prev = t; t.next = y; Δοµές Δεδοµένων 05-5

Επιστροφή στην Αναπαράσταση Γράφων Γράφος (graph): (V, E) V: Ένα σύνολο από κόµβους E: Πλευρές (σύνδεσµοι µεταξύ κόµβων) Αν έχουµε Ν κόµβους, τους ονοµατίζουµε από 0 ως Ν-1 Πίνακας γειτνίασης Συµµετρικός πίνακας ΝxΝ Αν (i, j) E, a[i][j] = a[j][i] = 1 Διαφορετικά a[i][j] = a[j][i] = 0 Από σύµβαση θέτουµε a[i][i] = 1 i Χώρος µνήµης: Ν 2 Χρόνος για να δούµε αν συνδέονται 2 κορυφές: σταθερός, ανεξάρτητος από Ν (1 εντολή) Δοµές Δεδοµένων 05-6

Δηµιουργία πίνακα γειτνίασης class AdjacencyMatrix { } } public static void main(string[] args) { int Ν = Integer.parseInt(args[0]); int E = Integer.parseInt(args[1]); boolean adj[][] = new boolean[ν][ν]; for (int i = 0; i < Ν; i++) for (int j = 0; j < Ν; j++) adj[i][j] = false; for (int i = 0; i < Ν; i++) adj[i][i] = true; for (In.init();!In.empty() ;) { } int i = In.getInt(), j = In.getInt(); adj[i][j] = true; adj[j][i] = true; Δοµές Δεδοµένων 05-7

Αναπαράσταση µε λίστες γειτνίασης Διατηρούµε έναν πίνακα µε λίστες Μία λίστα για κάθε κορυφή Περιέχει όλες τις άλλες κορυφές που συνδέονται µαζί της Χώρος µνήµης: Ν + Ε (συµφέρει αν Ε << Ν 2 ) Για αραιούς γράφους πολύ προτιµότερη η χρήση λίστας αντί πίνακα Χρόνος για να δούµε αν συνδέονται 2 κορυφές: πρέπει να διατρέξουµε τη λίστα της µίας εκ των 2 κορυφών, στη χειρότερη περίπτωση: Ν Δοµές Δεδοµένων 05-8

Δηµιουργία λιστών γειτνίασης class AdjacencyLists { static class Node { int v; Node next; } Node (int v, Node t) { this.v = v; next = t; } public static void main(string[] args) { int Ν = Integer.parseInt(args[0]); int E = Integer.parseInt(args[1]); Node adj[] = new Node[Ν]; for (int i = 0; i < Ν; i++) adj[i] = null; for (In.init();!In.empty() ;) { int i = In.getInt(), j = In.getInt(); adj[j] = new Node(i, adj[j]); adj[i] = new Node(j, adj[i]); } } } Δοµές Δεδοµένων 05-9

Κεφάλαιο 2 Αρχές Ανάλυσης Αλγορίθµων Δοµές Δεδοµένων 05-10

Εισαγωγή Γιατί αναλύουµε τους αλγορίθµους; Πρόβλεψη επίδοσης: αναµενόµενος χρόνος εκτέλεσης Σύγκριση αλγορίθµων: ποιος είναι ταχύτερος; Παροχή εγγυήσεων: άνω όριο χρόνου εκτέλεσης Κατανόηση θεωρητικής βάσης: συµπεριφορά του αλγορίθµου Επιστηµονική ανάλυση και σύγκριση αλγορίθµων Μπορεί να είναι είτε εµπειρική (υλοποίηση και σύγκριση του χρόνου εκτέλεσης) Είτε θεωρητική (ανάλυση του αριθµού των απαιτούµενων βηµάτων/εντολών ως συνάρτηση του µεγέθους των δεδοµένων της εισόδου) Δοµές Δεδοµένων 05-11

Εµπειρική ανάλυση Επιστηµονική ανάλυση αλγορίθµων Παρατήρηση ενός φαινοµένου Δηµιουργία µία υπόθεσης / µοντέλου συνεπούς µε το φαινόµενο Πρόβλεψη γεγονότων µε βάση το µοντέλο Επαλήθευση των προβλέψεων µέσω παρατήρησης Επικύρωση µέσω επανάληψης µέχρι να έχουµε συµφωνία Τα πειράµατα πρέπει να µπορούν να επαναληφθούν Υλοποίηση και εµπειρική ανάλυση Κάθε εκτέλεση ενός προγράµµατος είναι ένα πείραµα Οι υλοποιήσεις µπορούν να συγκριθούν Χρόνος εκτέλεσης, κατανάλωση µνήµης Προσοχή: οι υλοποιήσεις δεν είναι όλες καλές! Δοµές Δεδοµένων 05-12

Εµπειρική ανάλυση Στάδια εµπειρικής ανάλυσης 1. Υλοποίηση και εκσφαλµάτωση του προγράµµατος Δεν θέλουµε κακές ή λανθασµένες υλοποιήσεις Όλες οι υλοποιήσεις στο ίδιο περιβάλλον προγραµµατισµού 2. Προσδιορισµός της φύσης των δεδοµένων Πραγµατικά: αυτά που εµφανίζονται στην πράξη Τυχαία: τυχαία επιλογή από το πεδίο εισόδου (π.χ. µε τη Math.random()) Ακραία/µη ρεαλιστικά (perverse): επιλεγµένα έτσι ώστε να δυσκολεύουν τον αλγόριθµο 3. Εκτέλεση της υλοποίησης µε διάφορα µεγέθη προβλήµατος Δοµές Δεδοµένων 05-13

Εµπειρική ανάλυση Χρόνος εκτέλεσης υλοποίησης Μπορεί να µετρηθεί χρησιµοποιώντας το χρονόµετρο Κλήση µεθόδου System.currentTimeMillis() Γενικά αυξάνεται όταν αυξάνεται το µέγεθος της εισόδου Μπορεί να εξαρτάται αρκετά από τα δεδοµένα εισόδου Παράδειγµα: ταξινόµηση ενός σχεδόν ταξινοµηµένου πίνακα Μπορεί να µας ενδιαφέρει ο µέσος ή ο µέγιστος χρόνος Average case vs worst case analysis Από τι εξαρτάται ο χρόνος εκτέλεσης; Μηχανή, µεταγλωττιστής, αλγόριθµος, δεδοµένα εισόδου Κρυφή µνήµη, συλλογή σκουπιδιών, φόρτος CPU Δύσκολο να πάρουµε ακριβείς µετρήσεις µε µία εκτέλεση Συνήθως χρησιµοποιούµε µέσο όρο πολλών εκτελέσεων Δοµές Δεδοµένων 05-14

Εµπειρική ανάλυση Πόσο σίγουρη είναι η εµπειρική ανάλυση; Πιο σίγουρη σε παρόµοιες υλοποιήσεις Παραλλαγές του ίδιου βασικού αλγόριθµου Ίδια δεδοµένα και περιβάλλον εκτέλεσης Η παγίδα των απλών αλγορίθµων Ο απλός αλγόριθµος µπορεί να είναι πολύ αργός Απαιτούµενη µνήµη µπορεί επίσης να είναι µεγάλη Η παγίδα της βελτιστοποίησης Δεν είναι ανάγκη να βελτιστοποιούµε τα πάντα Έχει σηµασία ο συνολικός χρόνος εκτέλεσης Αν το πρόγραµµα απαιτεί λίγα msec δεν έχει µεγάλα περιθώρια βελτίωσης Το κόστος ανάπτυξης και συντήρησης µπορεί να είναι µεγάλο Βελτιστοποίηση εκεί που καθυστερεί το πρόγραµµα Δοµές Δεδοµένων 05-15

Μαθηµατική ανάλυση Χρόνος εκτέλεσης προγράµµατος Για κάθε εντολή: (χρόνος εκτέλεσης) * (συχνότητα εκτέλεσης) for (int i = 0; i < n; i++) a[i] = 5; Έστω ότι κάθε εντολή απαιτεί β µsec. Η εντολή µέσα στο βρόχο εκτελείται n φορές, η εντολή i++ n φορές και ο έλεγχος τερµατισµού του βρόχου n+1 φορές Συνολικός χρόνος: β(n+n+n+1 + 1) = β(3n+2) H παράµετρος β εξαρτάται από το σύστηµα Οι υπόλοιποι όροι εξαρτώνται γενικά από τον αλγόριθµο και τα δεδοµένα Στη µαθηµατική ανάλυση αλγορίθµων δεν µας απασχολεί το β Μας απασχολεί µόνο ο συνολικός αριθµός εντολών που πρέπει να εκτελεστούν (προσεγγιστικά) Ανεξάρτητο από το σύστηµα και τη γλώσσα προγραµµατισµού Σηµαντικό: καθορισµός των πιο σηµαντικών λειτουργιών Δοµές Δεδοµένων 05-16

Μαθηµατική ανάλυση Μειονεκτήµατα µαθηµατικής ανάλυσης Θεωρητικά υπάρχουν ακριβή µαθηµατικά µοντέλα Στην πράξη οι τύποι µπορεί να είναι περίπλοκοι και δυσεπίλυτοι Συνήθως καταφεύγουµε σε προσεγγιστικές αναλύσεις Πλεονεκτήµατα µαθηµατικής ανάλυσης Δεν εξαρτάται από τα χαρακτηριστικά του περιβάλλοντος και της γλώσσας προγραµµατισµού Πρόβλεψη επίδοσης ως συνάρτηση του µεγέθους της εισόδου Επιτρέπει πρόβλεψη επιδόσεων µε πολύ µεγάλες εισόδους Μηδενικό κόστος Δοµές Δεδοµένων 05-17

Αύξηση συναρτήσεων Κύρια παράµετρος αλγορίθµου: N Χαρακτηρίζει το µέγεθος του προβλήµατος (π.χ. σε προβλήµατα ταξιόµησης, είναι το πλήθος των αριθµών που ταξινοµούµε) Έκφραση χρόνου εκτέλεσης σε συνάρτηση του N 1: σταθερός χρόνος εκτέλεσης, ανεξάρτητος του Ν. logn: ελαφρά αύξηση καθώς αυξάνεται το N Παράδειγµα: για 1000Ν ο χρόνος αυξάνεται κατά 3 (log10) 10 N: αύξηση ανάλογη της αύξησης του N. NlogN: αύξηση λίγο πιο γρήγορη από αυτή του N. Ν 2 : τετραγωνική αύξηση του χρόνου, όχι και τόσο πρακτικός Παράδειγµα: για 1000N ο χρόνος αυξάνεται κατά 10 6 2 Ν : Εκθετική αύξηση, µη πρακτικός ακόµα και για µικρά προβλήµατα Για Ν=20 ο χρόνος εκτέλεσης είναι > 1000000 Δοµές Δεδοµένων 05-18

Αύξηση συναρτήσεων Πρακτική µορφή συναρτήσεων του N στην ανάλυση προγραµµάτων Συνήθως της µορφής a + c f(n) To c µπορεί να εκφράζει το πλήθος εντολών στον κύριο βρόχο Το a εκφράζει όρους µικρότερης σηµασίας Το πιο σηµαντικό είναι η µορφή της f(n) logn Sqrt(N) N NlogN N(logN) 2 N 3/2 N 2 7 10 100 664 4414 1000 10000 10 32 1000 9966 99317 31623 1000000 13 100 10000 132877 1765633 1000000 100000000 17 316 100000 1660964 27588016 31622777 10000000000 20 1000 1000000 19931569 397267426 1000000000 1000000000000 Δοµές Δεδοµένων 05-19

Αύξηση Συναρτήσεων time 5n 3 928n input length Δοµές Δεδοµένων 05-20

Επιπλέον Ορολογία x : ο µεγαλύτερος ακέραιος που είναι x 3.14 = 3, 9.99 = 9 x : ο µκρότερος ακέραιος που είναι x 3.14 = 4, 9.99 = 10 log(n+1) = πλήθος των bits στη δυαδική αναπαράσταση του Ν logn = log 2 N, lnn = log e N, για όλους τους άλλους λογαρίθµους, γράφουµε ρητά ποια είναι η βάση, π.χ. log 10 N H N : Ν-οστός αρµονικός αριθµός, Η Ν = 1+1/2+1/3+...+1/Ν lnn Δοµές Δεδοµένων 05-21

Συµβολισµός µεγάλου όµικρον Ορισµός συµβολισµού µεγάλου όµικρον Λέµε ότι η συνάρτηση g(n) είναι O(f(N)) αν υπάρχουν θετικές σταθερές c 0 και N 0 έτσι ώστε g(n) c 0 f(n) για κάθε N N 0 Παράδειγµατα: 2n + 10 είναι O(n). Αρκεί να θέσουµε c 0 = 3 και N 0 = 10 4NlogN + 150Ν + 3000sqrt(logN) = O(NlogN). c 0 = 3154, Ν 0 = 1 Ερµηνεία: το c 0 f(n) είναι άνω φράγµα της g(n) για µεγάλα N Δεν ξέρουµε τι ισχύει για N < N 0 (και δεν µας ενδιαφέρει) Το c 0 µπορεί να είναι πολύ µεγάλο Προσοχή: g(n) είναι O(f(N)) δεν σηµαίνει ότι f(n) είναι O(g(N)) Χρήσεις συµβολισµού µεγάλου όµικρον Άνω φράγµα σφάλµατος όταν αγνοούµε µικρούς όρους Άνω φράγµα σφάλµατος όταν αγνοούµε κάποιες γραµµές κώδικα Ταξινόµηση αλγορίθµων µε βάση άνω φράγµατα εκτέλεσης Δοµές Δεδοµένων 05-22

Συµβολισµός µεγάλου όµικρον Διαγραµµατική ερµηνεία g(n) = O(f(N)) g(n): συνάρτηση που µας ενδιαφέρει (π.χ. µπορεί να είναι ο χρόνος εκτέλεσης). Ακανόνιστη, ενδεχοµένως µε πολλούς ασήµαντους όρους f(n): οµαλή συνάρτηση O(f(N)) µας δείχνει την ασυµπτωτική συµπεριφορά της g(n) c 0 f(n) g(n) f(n) N 0 Δοµές Δεδοµένων 05-23

Χειρισµός παραστάσεων µε ασυµπτωτικούς όρους Αν το f(ν) είναι πολυώνυµο βαθµού d, τότε είναι O(Ν d ) Οι όροι µε χαµηλότερο βαθµό απαλείφονται Οι σταθεροί όροι απαλείφονται Χρησιµοποιούµε συνήθως το πιο αυστηρό όριο Λέµε ότι 2Ν είναι O(Ν). Είναι και O(Ν 2 ) αλλά Ο(Ν) είναι καλύτερο άνω φράγµα Οι σταθεροί πολλαπλασιαστές δεν έχουν σηµασία Λέµε ότι η 3Ν+5 είναι O(Ν). Είναι και O(3Ν) και Ο(Ν/2) αλλά ασυµπτωτικά δεν υπάρχει διαφορά µεταξύ Ο(Ν), Ο(3Ν), Ο(Ν/2) Σηµασία έχει ο µεγαλύτερος ρυθµός αύξησης Αν κάτι είναι N 2 +O(N)+O(NlgN) τότε είναι Ο(Ν 2 ) Πράξεις σε παραστάσεις µε ασυµπτωτικούς όρους: όπως µε κανονικούς αριθµούς (Ν+Ο(1))(Ν+Ο(logN) + O(1)) = N 2 + O(NlogN) + O(N)+ O(N) + O(logN) + O(1) = N 2 + O(NlogN) + O(N) + O(logN) + O(1) = O(N 2 ) Δοµές Δεδοµένων 05-24

Παραδείγµατα Ν 4 + 10Ν 3 + 80 Ν 2 + 24 = Ο(Ν 4 ) 2 Ν = Ο(2 Ν+1 ) και 2 Ν+1 = Ο(2 Ν ) Ν d = O(2 N ) για κάθε σταθερά d. 2 N O(Ν d ) (logn) m = O(Ν d ) για σταθερές m, d O(f(N))O(g(N)) = O(f(N)g(N)) Δοµές Δεδοµένων 05-25

Συµβολισµός µεγάλου όµικρον Πρόβλεψη χρόνου εκτέλεσης (Τ Ν ) µε βάση το ρυθµό αύξησης Πόσο αυξάνεται ο χρόνος εκτέλεσης όταν διπλασιάζεται το N; Ο(1): Τ 2Ν = Τ N Ο(logN): Τ 2Ν ~ Τ N (λίγο παραπάνω) Ο(N): Τ 2Ν = 2Τ N Ο(NlogN):Τ 2Ν ~ 2Τ N (λίγο παραπάνω) Ο(Ν 2 ): Τ 2Ν ~ 4Τ N Ο(2 Ν ): Τ 2Ν ~ (Τ N ) 2 Μπορούµε να δουλέψουµε και αντίστροφα Εκτελούµε το πρόγραµµα για είσοδο N και 2N Διαιρούµε το χρόνο εκτέλεσης Εκτιµούµε το ρυθµό αύξησης µε βάση το αποτέλεσµα Προσοχή: το N πρέπει να είναι αρκετά µεγάλο! Δοµές Δεδοµένων 05-26