Download - Δομές Δεδομένων (Data Structures)vagelis/Courses/EM240/Ch2_Analysh... · Δομές Δεδομένων (Data Structures) Ανάλυση -Απόδοση Αλγορίθμων

Transcript

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

Ανάλυση - Απόδοση Αλγορίθμων

• Έλεγχος Αλγορίθμων.

• Απόδοση Προγραμμάτων.

• Χωρική/Χρονική Πολυπλοκότητα.

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

• Παραδείγματα.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Αλγόριθμοι: Βασικές Έννοιες

Αλγόριθμος: μια μέθοδος ή μια διαδικασία που ακολουθείται για την επίλυση ενός προβλήματος (π.χ. αναζήτηση, ταξινόμηση, κλπ.).

Ένας αλγόριθμος παίρνει την δεδομένα (input) ενός προβλήματος, εκτελεί λειτουργίες (π.χ. συναρτήσεις) και παρέχει αποτελέσματα (output).

Ένα πρόβλημα μπορεί να επιλύεται με πολλούς εναλλακτικούς αλγορίθμους. Χρειάζεται να συγκρίνουμε τους αλγόριθμους μεταξύ τους.

Το βασικότερο κριτήριο είναι ο χρόνος εκτέλεσης του προγράμματος.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Έλεγχος Αλγορίθμων

Η επιλογή του αλγορίθμου (και της κατάλληλης δομής δεδομένων) επηρεάζουν το χρόνο εκτέλεσης ενός προγράμματος.

Ο χρόνος εκτέλεσης μπορεί να κυμαίνεται από λίγα δευτερόλεπτα έως μερικές ώρες/μέρες/εβδομάδες/...

Μια λύση λέγεται αποδοτική, εάν επιλύει το πρόβλημα εντός των περιορισμών που υπάρχουν ως προς τους πόρους:

Χώρος

Χρόνος

Το κόστος μιας λύσης είναι το ποσό των πόρων που αυτή η λύση δαπανά.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Αλγορίθμοι – Δομές Δεδομένων

Επιλογή της κατάλληλης δομής δεδομένων (ΔΔ):

1. Αναλύουμε το πρόβλημα, καθορίζουμε τους περιορισμούς πόρων, στους οποίους πρέπει να υπόκειται μια λύση

2. Καθορίζουμε τις βασικές λειτουργίες που πρέπει να υποστηρίζονται– Εισαγωγή δεδομένων: Είτε όλα τα δεδομένα εισάγονται από την αρχή ή

παρεμβάλλονται ανάμεσα σε άλλες λειτουργίες.– Πως γίνεται η διαχείριση των δεδομένων;– Όλα τα δεδομένα υφίστανται επεξεργασία σε μια καθορισμένη σειρά ή

επιτρέπεται τυχαία προσπέλαση;

3. Επιλέγουμε τη δομή δεδομένων που ικανοποιεί καλύτερα αυτούς τους περιορισμούς

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Δομές Δεδομένων – Μην Ξεχνάτε:

• Κάθε δομή δεδομένων έχει πλεονεκτήματα και μειονεκτήματα.Σπάνια μια δομή δεδομένων είναι καλύτερη από μια άλλη σε όλες τις περιπτώσεις.

• Μια δομή δεδομένων απαιτεί:Χώρο για κάθε αντικείμενο δεδομένων που αποθηκεύειΧρόνο για να εκτελέσει κάθε βασική λειτουργίαΠρογραμματιστική προσπάθεια

• Κάθε πρόβλημα έχει περιορισμούς ως προς το διαθέσιμο χώρο και χρόνο.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Έλεγχος Αλγορίθμων: Σχεδιάζοντας Δεδομένα Ελέγχου

1) Μέθοδοι Μαύρου Κουτιού (ΜΜΚ): Ελέγχουμε κυρίως τη λειτουργία του προγράμματος.

Π.χ. Διαμερίζουμε το χώρο δεδομένων (Ι/Ο) σε κλάσεις. Δεδομένα σε διαφορετικές κλάσεις εμφανίζουν διαφορετικές συμπεριφορές.

2) Μέθοδοι Άσπρου Κουτιού (ΜΑΚ): Ελέγχουμε κυρίως τον κώδικα.

Κάλυψη Εντολών: Το σύνολο των ελέγχων θα πρέπει να προκαλεί την εκτέλεση κάθε εντολής προγράμματος τουλάχιστον 1 φορά.

Κάλυψη Αποφάσεων: Απαιτούμε κάθε συνθήκη μέσα στο πρόγραμμα να πάρει και τις δύο πιθανές τιμές (true, false).

Κάλυψη Μονοπατιών Εκτέλεσης: Απαιτούμε την κάλυψη/εκτέλεση όλων των μονοπατιών εκτέλεσης στο πρόγραμμα. Πολύ απαιτητική, συχνά αδύνατη συνθήκη.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Αποσφαλμάτωση (Debugging)

• Διαδικασία καθορισμού της αιτίας ασυμφωνίας μεταξύ επιθυμητής και παρατηρούμενης συμπεριφοράς.

Τρόποι αποσφαλμάτωσης:

Αναλύστε διεξοδικά το πρόβλημα - Χρησιμοποιήστε τη λογική

Έλεγχος: ξεκινήστε από μια συνάρτηση/κλάση που είναι ανεξάρτητη από τις άλλες. Κατόπιν προχωρήστε σε περισσότερες.

Επανασχεδιάσετε το πρόβλημα αφού πρώτα βρείτε το αίτιο.

Βεβαιωθείτε ότι η διόρθωση δεν προκαλεί άλλα σφάλματα.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Απόδοση Προγραμμάτων

• Ορισμός: ποσό μνήμης (χωρική απόδοση) και χρόνου (χρονική απόδοση) υπολογιστή τα οποία απαιτούνται για να «τρέξει» το πρόγραμμα.

• Καθορισμός: (α) Ανάλυση απόδοσης: αναλυτικές μεθόδους(β) Μέτρηση απόδοσης: διεξάγουμε «πειράματα»

Μέτρηση απόδοσης:a) Εμπειρική σύγκριση (τρέξιμο προγραμμάτων)b) Ασυμπτωτική ανάλυση αλγορίθμων

Σχεδόν πάντα, ο χρόνος εκτέλεσης (τρεξίματος) εξαρτάται από το ‘μέγεθος’του προβλήματος (των δεδομένων), π.χ. μέγεθος λίστας, πινάκων, … κλπ.

Ο χρόνος εκτέλεσης εκφράζεται ως Τ(n) για κάποια συνάρτηση Τ πάνω στομέγεθος n που δίνεται (input) κατά την εκτέλεση του προγράμματος.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Εμπειρική Σύγκριση - Τρέξιμο Προγραμμάτων

• Αναπτύσσουμε πρόγραμμα που επιλύει ένα πρόβλημα.

Εκτελούμε-«τρέχουμε» το πρόγραμμα για διαφορετικό μέγεθος εισόδου και δεδομένων (input).

Χρησιμοποιούμε συναρτήσεις που μετρούν τον πραγματικό χρόνο που απαιτείται για την εκτέλεση του προγράμματος.

Σχεδιάζουμε τα αποτελέσματα.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Απόδοση Προγραμμάτων

Χωρική Πολυπλοκότητα: ποσό μνήμης που απαιτείται

Χώρος εντολών: ποσό μνήμης που απαιτούν οι εντολές. Εξαρτάται από: compiler, flags, hardware.

Χώρος δεδομένων: ποσό μνήμης που απαιτείται για την: (α) αποθήκευση των τιμών όλων των σταθερών και μεταβλητών(β) Στοίβα περιβάλλοντος: κάθε φορά που καλείται μια συνάρτηση στη στοίβα περιβάλλοντος αποθηκεύονται: η διεύθυνση (θέση του προγρ/τος) επιστροφής, οι τιμές των τοπικών μεταβλητών και των τυπικών παραμέτρων τιμών και η δέσμευση (binding) όλων των παραμέτρων αναφοράς const.

Ο χώρος που καταλαμβάνει ένα πρόγραμμα P συναρτήσει του μεγέθους του προβλήματος (n) είναι:

S(n) = c + Sp(n)

-- c: σταθερό μέρος -- Sp(n): μεταβλητό μέρος

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Απόδοση Προγραμμάτων

Χρονική Πολυπλοκότητα: ο χρόνος που απαιτείται για την εκτέλεση ενός προγράμματος.

Εξαρτάται από: πρόγραμμα (αλγόριθμο), υπολογιστή, compiler (software + hardware).

T(n,P): χρόνος εκτέλεσης ενός προγράμματος μεγέθους n σε P επεξεργαστές. Εδώ θα αναφερθούμε στη περίπτωση εκτέλεσης σε 1 επεξεργαστή (σειριακό πρόγραμμα), T(n). Πιθανοί τύποι:

1( ) ( )

m

i ii

T n c F n=

=∑(α) Μέτρηση πράξεων:

Το άθροισμα είναι πάνω σε όλες τις βασικές πράξεις, π.χ. πρόσθεση, αφαίρεση, κλπ., Fi είναι ο αριθμός των πράξεων και ci ο χρόνος που απιατείται για την εκτέλεση κάθε πράξης.

Πολύ δύσχρηστος τύπος: μπορεί να χρησιμοποιηθεί μόνο σε απλά (σχετικά μικρά) προγράμματα.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Απόδοση Προγραμμάτων

1( ) ( )

m

l ii

T n t n=

=∑

(β) Μέτρηση λειτουργιών: επιλέγουμε βασικές λειτουργιές (συναρτήσεις/κλάσεις/υπορουτίνες) ενός προγράμματος (π.χ. πολ/σμόςπινάκων, εύρεση στοιχείου λίστας, κλπ) και μετράμε το χρόνο εκτέλεσης κάθε λειτουργίας.

Το άθροισμα είναι πάνω σε όλες τις λειτουργίες (i=1,…,m) που έχουμε επιλέξει. ti(n) είναι ο χρόνος εκτέλεσης κάθε λειτουργίας

Προσοχή: ο συνολικός χρόνος εκτέλεσης συμπεριλαμβάνει και το χρόνο λειτουργιών που έχουμε αμελήσει:

( ) ( ) ( )l otherT n T n T n= +

Προσπαθούμε να επιλέξουμε τις σημαντικότερες, και πιο χρονοβόρες, λειτουργίες του προγράμματος/αλγόριθμου: Tl(n) >> Tother(n)

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Ασυμπτωτική Εκτίμηση

Σταθερό ~ 1 < Λογαριθμικό ~ logn < Γραμμικό ~ n < ~nlogn < Τετραγωνικό ~ n2 < Κυβικό ~ n3 < … < Εκθετικό ~ 2n

Ορισμός: Μας επιτρέπει την εξαγωγή χρήσιμων συμπερασμάτων για τη χωρική και χρονική πολυπλοκότητα των προγραμμάτων για μεγάλα n.

Τάξη ή ρυθμός ανάπτυξης (Order or rate of growth)

Γραφική αναπαράσταση ρυθμού αύξησης

Καλύτερος αλγόριθμος: μικρότερη τάξη μεγέθους.

Αγνοούμε σταθερές, κρατάμε μόνο τον κυρίαρχο όρο.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

O (Όμικρον κεφαλαίο): Άνω φράγμα στην τάξη μεγέθους

Ορισμός: f(n) = O(g(n) αν και μόνο αν υπάρχουν θετικές σταθερές c και n0τέτοιες ώστε f(n) ≤ cg(n) για όλα τα n ≥ n0

( ) : | 0, : ( ) ( ),O f g N N c m f n cg n n m= → ∃ > ≤ ∀ ≥

Παράδειγμα: 10n2 + 30n2logn = O(n2logn)=O(n3), 10-200n2≠O(n)

Ερμηνεία: Για όλα τα αρκετά μεγάλα σύνολα δεδομένων (δηλαδή n ≥ n0), ο αλγόριθμος πάντα τερματίζει σε λιγότερα από cg(n) βήματα στην [καλύτερη, μέση, χειρότερη] περίπτωση.

Επιθυμούμε όσο το δυνατό στενότερα όρια: παρόλο που η συνάρτηση f(n) = 8n4 είναι O(n6), προτιμούμε O(n4)

Παράδειγμα 2: f(n) = c1n + c2n2 + c3n3, ισχύει: c1n + c2n2 + c3n3 ≤ (c1 + c2+ c3)n3 για όλα τα n, Άρα f(n) ≤ cn3 για c = c1 + c2 + c3. Επομένως, f(n) είναι O(n3).

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

Ω (Ωμέγα κεφαλαίο): Κάτω φράγμα στην τάξη μεγέθους

Ορισμός: f(n) = Ω(g(n) αν και μόνο αν υπάρχουν θετικές σταθερές c και n0 τέτοιες ώστε f(n) ≥ cg(n) για όλα τα n ≥ n0

( ) : | 0, : ( ) ( ),f g N N c m f n cg n n mΩ = → ∃ > ≥ ∀ ≥

Παράδειγμα: 30n2logn = Ω(n2logn )=Ω(n2), 10200n2≠Ω(n3)

Ερμηνεία: Για όλα τα αρκετά μεγάλα σύνολα δεδομένων (δηλαδή n ≥ n0), ο αλγόριθμος πάντα τερματίζει σε περισσότερα από cg(n) βήματα στην [καλύτερη, μέση, χειρότερη] περίπτωση.

Θέλουμε το μεγαλύτερο κάτω όριο.

Παράδειγμα 2: f(n) = c1n + c2n2 + c3n3, ισχύει: c1n + c2n2 + c3n3 ≥ c3n3 για όλα τα n,Άρα f(n) ≥ cn3 για c = c3 και n0 = 1. Επομένως, f(n) είναι Ω(n3).

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

Θ (Θήτα κεφαλαίο): Άνω και κάτω φράγμα στην τάξη μεγέθους

Όταν τα Ο και Ω ταυτιστούν, το δηλώνουμε αυτό με χρήση του συμβολισμού Θ.

Ορισμός: f(n) = Θ(g(n) αν και μόνο αν υπάρχουν θετικές σταθερές c1, c2 και n0τέτοιες ώστε c1g(n) ≤ f(n) ≤ c2g(n) για όλα τα n ≥ n0

1 2 2 1 1 2( ) : | , ( ) 0, : ( ) ( ) ( ),f g N N c c c c m c g n f n c g n n mΘ = → ∃ > > ≤ ≤ ∀ ≥

Παράδειγμα: c1n2 + c2n4 + c3n4logn = Θ(n4logn )

Παρατήρηση: Ένας αλγόριθμος λέμε ότι είναι Θ(g(n) εάν είναι ταυτόχρονα Ο(g(n) και Ω(g(n).

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

ο (όμικρον μικρό): Άνω στην τάξη μεγέθους που δεν είναι ακριβές

ω (ωμέγα μικρό): Κάτω στην τάξη μεγέθους που δεν είναι ακριβές

( ) : | 0, : ( ) ( ),f g N N c m f n cg n n mο = → ∃ > < ∀ ≥

Παράδειγμα: 5n3logn = ο(n4), 100n3 ≠ο(n3)

( ) : | 0, : ( ) ( ),f g N N c m f n cg n n mω = → ∃ > > ∀ ≥

Παράδειγμα: 10n4logn = ω(n4), 100n3 ≠ω(n3), 100n3 =ω(n2)= ω(n2logn)

( )lim 0( )n

f ng n→∞

=

( )lim( )n

f ng n→∞

= +∞

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

Εξ ορισμού ισχύει:

f(n) = O(g(n)) ~ ασυμπτωτικά, μεγάλα n f(n) ≤ g(n)

f(n) = Ω(g(n)) ~ ασυμπτωτικά, μεγάλα n f(n) ≥ g(n)

f(n) = Θ(g(n)) ~ ασυμπτωτικά, μεγάλα n f(n) ≈ g(n)

f(n) = ο(g(n)) ~ ασυμπτωτικά, μεγάλα n f(n) < g(n)

f(n) = ω(g(n)) ~ ασυμπτωτικά, μεγάλα n f(n) > g(n)

Ασυμπτωτικά:

a) Εάν f(n) = O(g(n)) και g(n) = O(h(n)), τότε f(n) = O(h(n))

b) Εάν f(n) = O(kg(n)) για σταθερά k > 0, τότε f(n) = O(g(n))

c) Εάν f1(n) = O(g1(n)) και f2(n) = O(g2(n)), τότε (f1 + f2)(n) = O(max(g1(n), g2(n)))

d) Εάν f1(n) = O(g1(n)) και f2(n) = O(g2(n)), τότε f1(n)f2(n) = O(g1(n)g2(n))

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

“Η καλύτερη περίπτωση για τον αλγόριθμό μου είναι n=1 επειδή αυτό είναι το γρηγορότερο.”

ΛΑΘΟΣ!

Το Ο αναφέρεται σε ένα αυξανόμενο ρυθμό (rate) καθώς το n τείνει στο ∞.

Η καλύτερη περίπτωση ορίζεται ως: ποια είσοδος μεγέθους n είναι φθηνότερη από όλες τις εισόδους μεγέθους n.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

Παράδειγμα 2b: (εναλλακτικός) υπολογισμός n(n+1)/2

sum = 0;for (i=1; i<=n; i++)for (j=1; j<=i; j++)

sum++;

Παράδειγμα 2a: υπολογισμός n(n+1)/2

sum = 0;for (i=1; i<=n; i++)sum += i;

• Παράδειγμα 1: a = b;Αυτή η ανάθεση παίρνει σταθερό χρόνο c, οπότε είναι Θ(1)

Σύγκριση 2a και 2b: Υπολογισμός ίδιας έκφρασης με διαφορετικό κόστος! Θ(n) έναντι Θ(n2)

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

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

Αν ξέρουμε ότι ένας αλγόριθμος έχει πολυπλοκότητα O(n) σε ένα σύστημα Pentium IV στα 3 GHz, πόση είναι η πολυπλοκότητα σε ένα σύστημα Pentium III στα 500 ΜHz;

Note: Η πολυπλοκότητα ενός αλγορίθμου είναι ανεξάρτητη του υπολογιστή (hardware).

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Μέτρηση Απόδοσης: Μελέτη Προγράμματος

Μέτρηση απόδοσης: καθορισμός των πραγματικών χωρικών/χρονικών απαιτήσεων

Μελέτη προγράμματος:

Best case scenario (καλύτερη περίπτωση): μικρότερη τιμή που μπορεί να πάρει ο χρόνος εκτέλεσης T(n) για οποιαδήποτε είσοδο (input) με δεδομένο μέγεθος n.

Worse case scenario (χειρότερη περίπτωση): μεγαλύτερη τιμή που μπορεί να πάρει ο χρόνος εκτέλεσης T(n) για οποιαδήποτε είσοδο (input) με δεδομένο μέγεθος n.

Expected/Average case scenario (αναμενόμενη/μέση περίπτωση): αναμενόμενη/μέση τιμή που μπορεί να πάρει ο χρόνος εκτέλεσης T(n) για οποιαδήποτε είσοδο (input) με δεδομένο μέγεθος n.

Δομές Δεδομένων 2010/11, Κεφάλαιο 2:Απόδοση - Ανάλυση Αλγορίθμων

Βιβλιογραφία

• Δομές Δεδομένων, Π. Μποζάνης, Εκδόσεις Τζιόλα 2006.

• Δομές Δεδομένων, Αλγόριθμοι και Εφαρμογές στη C++, S. Sahni, Εκδόσεις Τζιόλα, 2004.

• Δομές Δεδομένων, Έννοιες, Τεχνικές και Αλγόριθμοι, Γ.Φ. Γεωργακόπουλος.,

Πανεπιστημιακές Εκδόσεις Κρήτης, Ηράκλειο 2002.

• Αλγόριθμοι σε C, Μέρη 1-4 (Θεμελιώδεις Έννοιες, Δομές Δεδομένων, Ταξινόμηση,

Αναζήτηση), Robert Sedgewick, Τρίτη Αμερικάνικη Έκδοση, Εκδόσεις Κλειδάριθμός 2005.

• Εισαγωγή στους αλγορίθμους Τόμος Ι, T.H. Cormen, C.E. Leiserson, R.L. Rivest,

Πανεπιστημιακές Εκδόσεις Κρήτης, Ηράκλειο 2006.