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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

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

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

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

Αναδροµή (Recursion) ύο παρεξηγήσεις. Σκέψου Αναδροµικά. Τρίγωνο Sierpinski Μη αναδροµικός ορισµός;

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

ΗΥ240: οµές εδοµένων. ιδάσκουσα: Παναγιώτα Φατούρου ΗΥ240 - Παναγιώτα Φατούρου 2

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

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

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

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

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

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

ΗΥ240: οµές εδοµένων

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

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

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

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

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

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

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

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Αξιοποίηση Η/Υ και Πληροφορικής στην Μηχανική

Προγραμματιστικές Τεχνικές

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

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

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

Αριθμοθεωρητικοί Αλγόριθμοι

Τηλ , Fax: , URL:

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

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

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

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

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

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

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

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

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

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

1η Σειρά Γραπτών Ασκήσεων

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

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

Εισαγωγικές Έννοιες. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

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

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

Αναδρομή (Recursion) Πώς να λύσουμε ένα πρόβλημα κάνοντας λίγη δουλειά και ανάγοντας το υπόλοιπο να λυθεί με τον ίδιο τρόπο.

Αλγόριθμοι. Μάρθα Σιδέρη. ιαδικαστικά: ύο πρόοδοι 31 Μαρτίου, 18 Μαΐου 7-9μμ 20% η μία, ύο Προγραμματιστικές 1 προσθετικό βαθμό η μία.

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

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

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

Πληροφορική 2. Αλγόριθμοι

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

Σχεδίαση και Ανάλυση Αλγορίθμων

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

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

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

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

Transcript:

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

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

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

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

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

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

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

Μαθηµατική ανάλυση αλγορίθµων Δοµές Δεδοµένων 05-8

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

Μαθηµατική ανάλυση H παράµετρος β εξαρτάται από το σύστηµα! Οι υπόλοιποι όροι εξαρτώνται από τον αλγόριθµο και τα δεδοµένα Στη µαθηµατική ανάλυση αλγορίθµων ΔΕΝ µας απασχολεί η παράµετρος β Μας απασχολεί µόνο ο συνολικός αριθµός εντολών που πρέπει να εκτελεστούν (έστω προσεγγιστικά) Στο παράδειγµά µας: 3n+2 = γραµµικός χρόνος εκτέλεσης Ανεξάρτητα από το σύστηµα και τη γλώσσα προγραµµατισµού Σηµαντικό: καθορισµός των πιο κρίσιµων λειτουργιών σε ένα πρόγραµµα Δοµές Δεδοµένων 05-10

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

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

Αύξηση συναρτήσεων Πρακτική µορφή συναρτήσεων του 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-13

Αύξηση Συναρτήσεων time n! =2 O(nlοgn) 2 n 5n 3 928n input length Δοµές Δεδοµένων 05-14

Επιπλέον Ορολογία 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-15

Συµβολισµός µεγάλου όµικρον Ορισµός: Λέµε ότι η συνάρτηση g(n) είναι O(f(N)) αν υπάρχουν θετικές σταθερές c 0 και N 0 έτσι ώστε g(n) c 0 f(n) για κάθε N N 0 Παραδείγµατα: 2Ν + 10 είναι O(Ν). Αρκεί να θέσουµε 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 µπορεί να είναι πολύ µεγάλο (αρκεί όµως να είναι µία σταθερά, ανεξάρτητη του Ν) Δοµές Δεδοµένων 05-16

Συµβολισµός µεγάλου όµικρον Προσοχή: g(n) είναι O(f(N)) δεν σηµαίνει ότι f(n) είναι O(g(N)) Χρήσεις συµβολισµού µεγάλου όµικρον Άνω φράγµα σφάλµατος όταν αγνοούµε µικρούς όρους Άνω φράγµα σφάλµατος όταν αγνοούµε κάποιες γραµµές κώδικα Κατάταξη αλγορίθµων µε βάση άνω φράγµατα εκτέλεσης Δοµές Δεδοµένων 05-17

Συµβολισµός µεγάλου όµικρον Διαγραµµατική ερµηνεία 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-18

Χειρισµός παραστάσεων µε ασυµπτωτικούς όρους Αν µία συνάρτηση είναι πολυώνυµο βαθµού d, τότε είναι O(Ν d ) Οι όροι µε χαµηλότερο βαθµό απαλείφονται, οι σταθεροί όροι επίσης Χρησιµοποιούµε συνήθως το πιο αυστηρό όριο Η συνάρτηση 2Ν είναι O(Ν). Είναι σωστό να πούµε ότι είναι και O(Ν 2 ) αλλά Ο(Ν) είναι ένα καλύτερο άνω φράγµα Οι σταθεροί πολλαπλασιαστές δεν έχουν σηµασία 3Ν+5 = O(Ν). Είναι και O(3Ν) και Ο(Ν/2) αλλά ασυµπτωτικά δεν υπάρχει διαφορά µεταξύ Ο(Ν), Ο(3Ν), Ο(Ν/2) Σηµασία έχει ο µεγαλύτερος ρυθµός αύξησης Αν κάτι είναι N 2 +O(N)+O(NlοgN) τότε είναι Ο(Ν 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-19

Παραδείγµατα Ν 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-20

Παραδείγµατα ανάλυσης αλγορίθµων Σύγκριση ακολουθιακής και δυαδικής αναζήτησης Έστω ένας πίνακας ακεραίων µε Ν στοιχεία Ψάχνουµε τη θέση ενός στοιχείου στον πίνακα (π.χ. σε ποια θέση του πίνακα υπάρχει η τιµή 20?) Πόσες πράξεις σύγκρισης χρειάζονται; Λύση 1: Ακολουθιακή αναζήτηση (Sequential Search) Ψάχνουµε από το ένα άκρο του πίνακα ως το άλλο Κατάλληλη και για µη ταξινοµηµένο πίνακα Το εύρος του πίνακα που ψάχνουµε δίνεται µε τις παραµέτρους p, r static int search(int a[], int v, int p, int r) { int i; for (i = p; i <= r; i++)//ψάξε αν υπάρχει το v if (v == a[i]) return i; return -1; //επιστρέφει -1 αν δεν βρει το v } Δοµές Δεδοµένων 05-21

Παραδείγµατα ανάλυσης αλγορίθµων Ανάλυση ακολουθιακής αναζήτησης Έστω Ν το εύρος του πίνακα που ψάχνουµε (Ν = r p + 1) Ν = µέγεθος εισόδου για τον αλγόριθµο Ο χρόνος εκτέλεσης εξαρτάται από τα δεδοµένα. Συµβολίζουµε συνήθως µε Τ Ν ή C N το χρόνο εκτέλεσης µε µέγεθος εισόδου Ν Χειρότερη δυνατή περίπτωση: η αναζήτηση είναι ανεπιτυχής ή το στοιχείο είναι στην τελευταία θέση: Ο(Ν) βήµατα Μέσο κόστος επιτυχούς αναζήτησης: Υποθέτουµε ότι όλες οι θέσεις είναι εξίσου πιθανές Μέσο κόστος = (1 + 2 + + N) / N = (N+1)/2 N/2 Καλύτερο από τη χειρότερη περίπτωση αλλά και πάλι Ο(Ν) Δοµές Δεδοµένων 05-22

Παραδείγµατα ανάλυσης αλγορίθµων Αν ο πίνακας είναι ταξινοµηµένος; Η ακολουθιακή αναζήτηση µπορεί να µην εξαντλήσει απαραίτητα τον πίνακα Μέσο κόστος N/2 βήµατα, κόστος χειρότερης περίπτωσης N βήµατα Πάλι Ο(Ν) Δοµές Δεδοµένων 05-23

Παραδείγµατα ανάλυσης αλγορίθµων Δυαδική αναζήτηση (Binary Search) Μόνο για ταξινοµηµένο πίνακα Εξετάζει το µεσαίο στοιχείο του πίνακα Συνεχίζει µε το κατάλληλο µισό του πίνακα (αναδροµή) static int search(int a[], int v, int p, int r) { //µη αναδροµική υλοποίηση while (r >= p) { int m = (p+r)/2; if (v == a[m]) return m; if (v < a[m]) r = m-1; else p = m+1; } return -1; } Θα µπορούσε να υλοποιηθεί και µε αναδροµικές κλήσεις Δοµές Δεδοµένων 05-24

Παραδείγµατα ανάλυσης αλγορίθµων Ανάλυση δυαδικής αναζήτησης Σε κάθε έλεγχο µένει ο µισός πίνακας Χειρότερη περίπτωση: TN T +! N / 2 O(1) " Για να βρούµε την πολυπλοκότητα πρέπει να λύσουµε την αναδροµική σχέση Όχι πάντα εύκολο αλλά επιλύσιµο για πολλές κατηγορίες αναδροµικών εξισώσεων Δοµές Δεδοµένων 05-25

Βασικές αναδροµικές εξισώσεις Αναδροµικές εξισώσεις προκύπτουν στην ανάλυση αναδροµικών αλγορίθµων Ακολουθούν την αποσύνθεση ενός προβλήµατος Ο χρόνος εκτέλεσης ορίζεται ως συνάρτηση του χρόνου εκτέλεσης σε µικρότερα προβλήµατα Τελικά φτάνουµε σε στοιχειώδη προβλήµατα Η λύση δίνει έναν τύπο για το χρόνο εκτέλεσης Δοµές Δεδοµένων 05-26

Βασικές αναδροµικές εξισώσεις Παράδειγµα 1 Έστω ένας αλγόριθµος που έχει βρόχο στα δεδοµένα εισόδου εξετάζει όλα τα δεδοµένα και κάνει απαλοιφή ενός στοιχείου πριν την επόµενη επανάληψη (όπως η Selectionsort που θα δούµε σε επόµενα µαθήµατα) C N = C N-1 + N, C 1 = 1 Λύση: Μέθοδος της αντικατάστασης C Ν = C N-1 +N = C N-2 +(N-1)+Ν = C N-3 + (Ν-2)+ (N-1)+ Ν = 1+2+3+...+Ν = Ν(Ν+1)/2, δηλαδή O(N 2 ) Δοµές Δεδοµένων 05-27

Βασικές αναδροµικές εξισώσεις Παράδειγµα 2 Έστω ότι κάθε βρόχος διχοτοµεί τα δεδοµένα, και στην επόµενη επανάληψη κοιτάζουµε τα µισά δεδοµένα (όπως η δυαδική αναζήτηση) C N = C N/2 + 1, C 1 = 1 Τέτοιες σχέσεις είναι χρήσιµο να τις αναλύουµε πρώτα για δυνάµεις του 2, έστω ότι Ν = 2 n C C + 1 = C + 1 = ( C + 1) + 1 N = =... = C N / 2 n 1 n 2 2 2 1 + 1+ 1+... + 1 = n + 1 Άρα C Ν = lοgn+1, δηλαδή O(lοgN) Όταν το Ν δεν είναι δυναµη του 2, αποδεικνύεται µε επαγωγή ότι C Ν lοgn+1 Άρα για κάθε Ν, C N = O(lοgN) Πόρισµα: Ο αλγόριθµος δυαδικής αναζήτησης τρέχει σε χρόνο Ο(logN) Δοµές Δεδοµένων 05-28

Βασικές αναδροµικές εξισώσεις Με ίδια τεχνική αναλύονται πολλά άλλα προβλήµατα Παράδειγµα 3 (προσοχή: λάθος τύπος στο βιβλίο, σελ. 74!) Κάθε βρόχος διχοτοµεί τα στοιχεία αφού τα εξετάσει πρώτα όλα Ορισµός: C N = C N/2 + N, C 1 = 1 Λύση (µε παρόµοιο τρόπο όπως και πριν): C Ν = 2Ν, δηλαδή O(N) Παράδειγµα 4 Κάθε βρόχος βλέπει όλα τα δεδοµένα, διχοτοµεί και κάνει αναδροµικές κλήσεις και στα 2 υποπροβλήµατα µεγέθους Ν/2 (χρήσιµο σε προβλήµατα ταξινόµησης) Ορισµός: C N = 2C N/2 + Ν, C 1 = 1 Λύση: C Ν = N + NlοgN, δηλαδή O(NlοgN) Παράδειγµα 5 Κάθε βρόχος διχοτοµεί και κάνει αναδροµική κλήση και για τα 2 υποπροβλήµατα Ορισµός: C N = 2C N/2 + 1, C 1 = 1 Λύση: C Ν = 2Ν, δηλαδή O(N) Δοµές Δεδοµένων 05-29

Όρια ανάλυσης αλγορίθµων Εγγύηση: παρέχεται µε ένα άνω φράγµα στο χρόνο εκτέλεσης Χρόνος εκτέλεσης στη χειρότερη περίπτωση Χρησιµοποιούµε το χειρότερο δυνατό σύνολο εισόδου Πρόβλεψη: παρέχεται µε µελέτη του µέσου χρόνου εκτέλεσης Χρόνος εκτέλεσης κατά µέσο όρο Χρησιµοποιούµε «τυχαία» δεδοµένα εισόδου Περιορισµός: παρέχεται µε ένα κάτω φράγµα στο χρόνο εκτέλεσης Απόδειξη ότι κάθε αλγόριθµος θέλει τουλάχιστον τόσο χρόνο Γενικά πολύ πιο δύσκολη η απόδειξη κάτω φραγµάτων Δοµές Δεδοµένων 05-30