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

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

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

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

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

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

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

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Εργαστήριο 2: Πίνακες

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

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

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

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

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

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

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

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

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

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

Θέματα Προγραμματισμού Η/Υ

(Γραμμικές) Αναδρομικές Σχέσεις

(Γραμμικές) Αναδρομικές Σχέσεις

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

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

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

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

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

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

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

Εργαστηριακή Άσκηση 1

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

Διάλεξη 5η: Εντολές Επανάληψης

Αριθμητικές Μέθοδοι σε Προγραμματιστικό Περιβάλλον

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

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

Προγραμματισμός Ι (ΗΥ120)

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

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

Βρόχοι. Εντολή επανάληψης. Το άθροισμα των αριθμών 1 5 υπολογίζεται με την εντολή. Πρόβλημα. Πώς θα υπολογίσουμε το άθροισμα των ακέραιων ;

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

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

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

(Γραμμικές) Αναδρομικές Σχέσεις

ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ Ι

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

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

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

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

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

Κεφάλαιο 8: Προγραμματίζοντας αλγορίθμους έξυπνα και δημιουργικά

Πολυπλοκότητα Αλγορίθµων

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

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Αλγόριθμοι Ταξινόμησης Μέρος 2

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

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

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

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

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

11/23/2014. Στόχοι. Λογισμικό Υπολογιστή

Αλγόριθμοι ταξινόμησης

Αλγόριθμοι και πολυπλοκότητα Διαίρει και Κυρίευε

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

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

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

Αναζήτηση και ταξινόμηση

n ίδια n διαφορετικά n n 0 n n n 1 n n n n 0 4

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

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

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

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

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

Πανεπιστήμιο Ιωαννίνων Τμήμα Μηχανικών Η/Υ και Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2013

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

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

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

Transcript:

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

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Παραδείγματα Ανάλυσης Πολυπλοκότητας : Μέθοδοι, παραδείγματα - Γραμμική και Δυαδική Αναζήτηση, Ανάλυση Αναδρομικών Αλγορίθμων - H Μέθοδος της Αντικατάστασης, Master Theorem ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 3 Παράδειγμα 1: Υπολογισμός Χρόνου Εκτέλεσης Υποθέστε ότι ένα πρόβλημα επιλύνεται με τον πιο κάτω κώδικα: Ανάλυση k+=i; for(i=0; i<; i++) it i,k=0; for (i=0; i<; i++) k+=i; H βασική πράξη η οποία χρειάζεται Ο(1) χρόνο Ο αλγόριθμος εκτελεί την βασική πράξη φορές 1 i= 0 1 = ή 1 = i o O αλγόριθμος έχει πολυπλοκότητα της τάξης O() o Στην βέλτιστη περίπτωση χρειάζεται Ω() O() & Ω() Θ()

Υπολογισμός Χρόνου Εκτέλ. με φωλιασμ. βρόγχους Σε ένα βρόχο (for loop) o συνολικός χρόνος που απαιτείται είναι: Βασική Πράξη x Αριθμό Επαναλήψεων Φωλιασμένοι Βρόχοι: η ανάλυση γίνεται από τα μέσα προς τα έξω: Παράδειγμα: for (i=0; i<; i++) for (j=0; j<; j++) //statemet e.g., k+=i; Συνεχόμενες Εντολές: Ο χρόνος εκτέλεσης T της εντολής S και μετά S παίρνει χρόνο ίσο του αθροίσματος των χρόνων εκτέλεσης των T(S) + T(S ). Συνθήκες if: Ο χρόνος εκτέλεσης T της εντολής if b the S else S παίρνει χρόνο ίσο με max(t(b)+t(s), T(b)+T(S )) ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 4

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 5 Παράδειγμα : Υπολογισμός Χρόνου Εκτέλεσης Υποθέστε ότι ένα πρόβλημα επιλύνεται με τον πιο κάτω κώδικα: Ανάλυση Εσωτερικός Βρόγχος: Εξωτερικός Βρόγχος: Σύνολο: it i, j, sum=0; for (i=0; i<; i++) for (j=0; j<; j++) sum++; i= 1 j= 1 IL i=1 1 = i= 1 = 1 = 1 = 1 IL j= 0 j= 1 = ( Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος IL ), ( = ) ( )

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 6 Παράδειγμα 3: Υπολογισμός Χρόνου Εκτέλεσης Υποθέστε ότι ένα πρόβλημα επιλύνεται με τον πιο κάτω κώδικα: Ανάλυση it i, j, sum=0; for (i=0; i<; i++) Εσωτερικός Βρόγχος: for (j=0; j< i*i; j++) sum++; IL j= 0 Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος Παρατηρούμε ότι ο χρόνος εκτέλεσης του εσωτερικού βρόχου εξαρτάται από την τιμή i, οποία καθορίζεται από τον εξωτερικό βρόχο. i = 1 = i

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 7 Παράδειγμα 3: Υπολογισμ. Χρόνου Εκτέλεσης (συν.) Ο πιο κάτω πίνακας δείχνει το πόσες φορές εκτελείται ο εσωτερικός βρόγχος σαν συνάρτηση του i: i 0 1 3-1 IL = i 0 1 4 9 (-1) Εξωτερικός Βρόγχος: 0 + 1 + 4 + 9 + + (-1) Σύνολο: Ο χρόνος εκτέλεσης του προγράμματος είναι ίσος με το άθροισμα του χρόνου εκτέλεσης κάθε επανάληψης του εσωτερικού βρόχου: i= 1 i = ( + 1)( + 1) 1 3 3 = ( + + + ) ( ) 6 6

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 8 Παράδειγμα 4: Υπολογισμός Χρόνου Εκτέλεσης Υποθέστε ότι ένα πρόβλημα επιλύνεται με τον πιο κάτω κώδικα: Ανάλυση Εσωτερικός Βρόγχος A: Εσωτερικός Βρόγχος B: Εξωτερικός Βρόγχος: Σύνολο: it i, j, k, sum=0; for (i=0; i<; i++) for (j=0; j<; j++) ( 3 ) for (k=0; k<; k++) sum++; IL A 1 = k = Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος B Εσωτερικός Βρόγχος A ILB = ILA = = = j j OL = ILB = = = i j 3

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 9 Παράδειγμα 5: Υπολογισμός Χρόνου Εκτέλεσης Υποθέστε ότι ένα πρόβλημα επιλύνεται με τον πιο κάτω κώδικα: Ανάλυση it i, j, sum=0; Εσωτερικός Βρόγχος: for (i=1; i<=; i=*i) for (j=0; j< ; j++) sum++; IL = 1 Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος Εξωτερικός Βρόγχος: Κάθε φορά, το i πολλαπλασιάζεται επί. j Παράδειγμα: για =10 το i θα είναι 1,, 4, 8, 16> break = Πόσες φορές εκτελείται;;;

Παράδειγμα 5: Υπολογισμ. Χρόνου Εκτέλεσης (συν.) Ας υποθέσουμε ότι το είναι μία δύναμη του = κ Ο πιο κάτω πίνακας δείχνει το πόσες φορές εκτελείται ο εσωτερικός βρόγχος σαν συνάρτηση του k: k 0 1 3 4 k = k 1 4 8 16 k τιμές i - 1 1, 1,,4 1,,4,8 επαναλ. 0 1 3 4 k Συμπέρασμα: i=k, άρα για = i θα χρειαστούν i επαναλ. Ερώτηση: πως μπορούμε να βρούμε το την τιμή i έχοντας σαν δεδομένο το i ; Απάντηση: με χρήση λογάριθμου (log): log i = i ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 10

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 11 Παράδειγμα 5: Υπολογισμός Χρόνου Εκτέλεσης Υποθέστε ότι ένα πρόβλημα επιλύνεται με τον πιο κάτω κώδικα: Ανάλυση it i, j, sum=0; Εσωτερικός Βρόγχος: for (i=1; i<=; i=*i) for (j=0; j< ; j++) sum++; IL = 1 j Εξωτερικός Βρόγχος: (log i = log ) = log IL = log Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος Σύνολο: ( log )

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 1 Παράδειγμα 6: Υπολογισμός Χρόνου Εκτέλεσης Υποθέστε ότι ένα πρόβλημα επιλύνεται με τον πιο κάτω κώδικα: Ανάλυση =περιττός Εσωτερικός Βρόγχος (else): =άρτιος Εξωτερικός Βρόγχος: Σύνολο: it i, j, sum=0; for (i=0; i<; i++) if( (%)==0 ) for (j=0; j<; j++) sum++; else sum--; Εσωτερικός Βρόγχος (if): ( ) Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος (if) Εσωτερικός Βρόγχος (else) IL ( if ) = 1 = OL = j max( ILif, ILelse) = ILif = = i IL ( else) i = 1 i

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 13 Παράδειγμα 7: Χρόνος Εκτέλεσης BubbleSort Η BubbleSort ταξινομεί κάποιο πίνακα με συνεχή εναλλαγή των στοιχείων του αν δεν είναι στη σωστή σειρά. Παράδειγμα: it x = {3,, 4, 1, 5; swap o swap Πέρασμα 1 3 4 1 5 3 4 1 5 3 4 1 5 3 1 4 5 Πέρασμα 3 1 4 5 3 1 4 5 1 3 4 5 Πέρασμα 3 1 3 4 5 1 3 4 5 Πέρασμα 4 1 3 4 5

Παράδειγμα 7: Χρόνος Εκτέλεσης BubbleSort (συν.) ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 14 void bubblesort(it X[], it ){ it i, j, temp; for (i=0;i<-1;i++) { for (j=0;j<-i-1;j++) { if (X[j] > X[j+1]) { temp = X[j]; X[j] = X[j+1]; X[j+1] = temp; swapped = true; Εσωτερικός Βρόγχος Εξωτερικός Βρόγχος

Image from: https://www.geeksforgeeks.org/bubble-sort/ ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 15

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 16 Παράδειγμα 7: Χρόνος Εκτέλεσης BubbleSort (συν.) void bubblesort( it X[], it ){ for (i=0;i<-1;i++) { for (j=0;j<-i-1;j++) { Εσωτερικός Βρόγχος Ανάλυση Εσωτερικός Βρόγχος: Εξωτερικός Βρόγχος: Σύνολο: ( ) Εξωτερικός Βρόγχος = IL i = 1 i= 0 ( 1) j= 0 1 1 = 1 i= 0 ( 1) = 1 i 1 1 i= 0 ( )( 1) 1 OL = IL = i 1 = 1 i i= 0

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 17 Slightly Better BubbleSort (συν.) void bubblesort(it X[], it ){ it i, j, temp; boolea swapped; for (i=0;i<-1;i++) { swapped = false; for (j=0;j<-i-1;j++) { if (X[j] > X[j+1]) { temp = X[j]; X[j] = X[j+1]; X[j+1] = temp; swapped = true; Εσωτερικός Βρόγχος if (swapped==false) retur; Εξωτερικός Βρόγχος

Γραμμική vs. Δυαδική Διερεύνηση Δεδομένα Εισόδου: Πίνακας Χ με στοιχεία, ταξινομημένος από το μικρότερο στο μεγαλύτερο, και ακέραιος k. Στόχος: Να εξακριβώσουμε αν το k είναι στοιχείο του Χ. Γραμμική Διερεύνηση: εξερευνούμε τον πίνακα από τα αριστερά στα δεξιά. it liear( it X[], it, it k){ it i=0; while ( i < ) { if (X[i] == k) retur i; if (X[i] > k) retur -1; i++; retur -1; 1 3 4 5 Xείριστη περίπτωση: Ο() (ο βρόχος εκτελείται φορές) ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 18

Αναδρομική Γραμμική Διερεύνηση ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 19 it rliear( it X[], it, it k, it pos ){ if ( pos == ) retur -1; //ot foud if ( X[pos] == k ) retur pos; //foud elseif ( X[pos] > k ) retur -1; //foud larger skip rest retur rliear( X,, k, pos+1 ); Xείριστη περίπτωση: Ο() (εκτελούνται αναδρομικές κλήσεις της rliear)

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 0 Δυαδική Διερεύνηση Δυαδική Διερεύνηση: βρίσκουμε το μέσο του πίνακα και αποφασίζουμε αν το k ανήκει στο δεξιό ή αριστερό μισό. Επαναλαμβάνουμε την ίδια διαδικασία στο μισό που μας ενδιαφέρει: it biary (it X[], it, it key) { it low=0; it high = - 1; it mid; while( low <= high) { mid = (low + high) / ; if( key < X[mid]) high = mid-1; else if (key > X[mid]) low = mid+1; else { retur mid; break; retur -1;

Αναδρομική Δυαδική Διερεύνηση ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 1 it rbiary_aux (it X[], it low, it high, it key) { it mid; if( low <= high) { mid = (low + high) / ; if( key == X[mid]) retur mid; else if( key < X[mid]) retur rbiary_aux( X, low, mid-1, key); else retur rbiary_aux( X, mid+1, high, key); retur -1; it rbiary (it X[], it, it key) { it low = 0; it high = -1; retur rbiary_aux( X, low, high, key);

Δυαδική Διερεύνηση Χρόνος Εκτέλεσης Η βασική πράξη (σύγκριση) εκτελείται Ο(log ) φορές δηλαδή: Εκτέλεση 1 -> Μας απομένει* / του πίνακα, Εκτέλεση -> Μας απομένει /4 του πίνακα, Εκτέλεση 3 -> Μας απομένει /8 του πίνακα, Εκτέλεση Χ -> Μας απομένει 1 στοιχείο του πίνακα, Στην εκτέλεση Χ είτε βρήκαμε το στοιχείο είτε όχι δηλ., έχουμε την ακολουθία, /, /4, /8,, 4,, 1, <==> 0, 1,, 3,, x Το x εκφράζει πόσες φορές εκτελούμε το while loop x x = log log = x log Biary Search Ο(log ) ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 3 Πολυπλοκότητα Αναδρομικών Διαδικασιών Μέχρι τώρα συζητήσαμε τεχνικές για την ανάλυση επαναληπτικών αλγορίθμων (με while, for, κτλ.) Ωστόσο, πολλοί αλγόριθμοι ορίζονται αναδρομικά (π.χ. biary search, Fiboacci, κτλ.) Θέλουμε κάποια μεθοδολογία για να αναλύουμε την πολυπλοκότητα τέτοιων αναδρομικών εξισώσεων. π.χ. Τ() = T(/) +1000 Τ()=*T(-1), >0 κτλ. Σημειώστε ότι υπάρχουν διάφοροι τύποι αναδρομικών εξισώσεων. Πολλοί τύποι χρειάζονται ειδικά εργαλεία τα οποία δεν θα δούμε σε αυτό το μάθημα. Ένα τύπο που θα μελετήσουμε θα είναι οι Αναδρομικές Εξισώσεις τύπου «Διαίρει και Βασίλευε» Θα τις επιλύσουμε με την Μέθοδο της Αντικατάστασης και θα τις επαληθεύουμε με το Θεώρημα Master

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 4 Ανάλυση Αναδρομικής Δυαδικής Διερεύνησης Ας ξαναδούμε την αναδρομική έκδοση της δυαδικής αναζήτησης Από ότι βλέπουμε σε κάθε εκτέλεση το biary_search μοιράζει μια ακολουθία στοιχείων σε / στοιχεία (εάν είναι ζυγός). Επομένως το πρόβλημα μεγέθους έγινε τώρα /. Σε κάθε βήμα χρειαζόμαστε και δυο συγκρίσεις (τα δυο if statemets) O χρόνος εκτέλεσης της biary_search εκφράζεται με την αναδρομική συνάρτηση: f() = f(/) + // αναδρομικό βήμα f(1) = // συνθήκη τερματισμού

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 5 Μέθοδος της Αντικατάστασης Μέθοδος της Αντικατάστασης: Χρησιμοποιούμε το βήμα της αναδρομής επαναληπτικά, μέχρι να εκφράσουμε το Τ() ως συνάρτηση της βασικής περίπτωσης, δυνάμεις του και σταθερές τιμές. Εφαρμογή Έχουμε την αναδρομική εξίσωση της δυαδικής διερεύνησης (τύπου Διαίρει και Βασίλευε) Τ() = T(/) +, για κάθε T(1) = Τότε, αντικαθιστώντας το Τ(/) με την τιμή του παίρνουμε Τ() = T(/) + = T(/4) + + = T(/8) + + + = (Μπορούμε τώρα να μαντέψουμε ότι ) = +... + + + log Επομένως η δυαδική αναζήτηση εκτελείται log βήματα

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 6 Ανάλυση Αναδρομικής Δυαδικής Διερεύνησης Στην δυαδική διερεύνηση η ακολουθία μοιράζεται ως εξής:, /, /4,,, 1. Προσοχή: Δεν σημαίνει ότι έχουμε +/+ /4+ + + 1=-1 εκτελέσεις. Έχουμε μονάχα log εκτελέσεις Ανάλογα με το σε πόσα κομμάτια «διαιρείται» το πρόβλημα κάθε φορά, αλλάζει και η βάση του λογάριθμου. log log 3 0 = 1 1 = 3 = 4 5 6 7 3 = 8 9 10 9 = 51 10 = 104 11 = 048 30 = 1,073,741,84 0 1 1.58496501.3198095.58496501.8073549 3 3.16995001 3.3198095 9 10 11 30 Αριθμός πράξεων 0 0.63099754 1 1.61859507 1.46497351 1.63099754 1.77143749 1.8978961.09590374 5.67836778 6.30997536 6.940789 18.978961, /, /4,,,1 ί :log, /3, /9,, 3,1 ί :log3 Όσο μεγαλύτερη η βάση του λογάριθμου τόσο πιο λίγες εκτελέσεις του αλγόριθμου έχουμε! Ωστόσο, αυξάνονται οι συγκρίσεις σε κάθε εκτέλεση! Π.χ., δυαδική διερεύνηση: lg εκτελέσεις, 1 έλεγχο σε κάθε βήμα.

Master Theorem To Master Theorem μας επιτρέπει να βρίσκουμε ή να επαληθεύουμε την χρονική πολυπλοκότητα αναδρομικών εξισώσεων τύπου διαίρει και βασίλευε. Διαίρει και Βασίλευε: πχ. Τ() = T(/) + αλλά όχι Τ()=*T(-1) Αυτό το θεώρημα δεν χρειάζεται να το απομνημονεύσετε αλλά μπορείτε να τον χρησιμοποιήσετε για την επαλήθευση ασκήσεων. Master Theorem: Έστω ότι η f είναι μία αύξουσα που ικανοποιεί τη λειτουργία της επανάληψης: f = af /b + c d όταν το = b k, όπου k είναι ένας θετικός ακέραιος, a 1, b > 1, και c, d είναι πραγματικοί αριθμοί, c 0, d 0. Τότε ισχύει: Ο d if a < b d f is Ο d log b Ο log b a if a = b d if a > b d ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 7

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 8 Master Theorem - Εφαρμογή O χρόνος εκτέλεσης της δυαδικής διερεύνησης εκφράζεται με την αναδρομική συνάρτηση: Τ() = Τ(/) + Τ(1) = T() = (a=1) x T ( /(b=) ) + (c=)x d=0 a=1, b=, c=, d=0 a=1 και b d = 0 = 1 a=b d T() is O( d log) T() is O( 0 log) T() is O(log) // αναδρομικό βήμα // συνθήκη τερματισμού

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 9 Μέθοδος της αντικατάστασης: Παράδειγμα 1 Έχουμε την αναδρομική εξίσωση Τ() = 4 T(/) +, για κάθε T(1) = 1 Τότε, αντικαθιστώντας το Τ(/) με την τιμή του παίρνουμε Τ() = 4 T(/) + // Εκτέλεση 1 = 4(4 T(/4) + /) + // Εκτέλεση = 4² Τ(/4) + + // Πράξεις = 4³ Τ(/8) + ² + + // Εκτέλεση 3 =... = 4 k Τ(1) + k-1 + +² + + // k = k=log log 1 = 4 + * = + ( 1) = O( + *( log i log log i= 0 = ) 1) a=4, b=, c=1, d=1, a=4>b d = 1 = T() O( log(4) ) T() O( )

Μέθοδος της αντικατάστασης: Παράδειγμα Άσκηση Να λύσετε την πιο κάτω αναδρομική εξίσωση με την μέθοδο της αντικατάστασης (προσοχή δεν είναι τύπου διαίρει & βασίλευε) Τ(0)=1 Τ()=*T(-1), >0 Λύση Τ() = **T(-1) = * *(-1)*T(-) = 3* *(-1)*(-)*T(-3) = = **(-1)*(-)*...**1*T(0) = *! ε Ο(!) ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι 30

Εργασία 1 Να λύσετε την πιο κάτω αναδρομική εξίσωση: T(1) = 1 Τ() = T(/) +1000 ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι -31

Εργασία Να λύσετε την πιο κάτω αναδρομική εξίσωση: T(1) = 1 T() = 7 T(/) + 18² ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι -3

Εργασία 3 Nα υπολογίσετε τον χρόνο εκτέλεσης της παρακάτω αναδρομικής διαδικασίας λύνοντας οποιαδήποτε αναδρομική εξίσωση συναντήσετε. ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι -33 public static it recursive1(it ){ it sum=0; for ( it i=1; i = ; i++) sum++; if ( 1) retur recursive1(/); else retur 1;

Εργασία 4 Nα υπολογίσετε τον χρόνο εκτέλεσης της παρακάτω αναδρομικής διαδικασίας λύνοντας οποιαδήποτε αναδρομική εξίσωση συναντήσετε. ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι -34 public static it recursive(it ){ it sum=0; for ( it i=1; i = ; i++) sum++; if ( 1) retur (recursive(/) + recursive(/)); else retur 1;

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι -35 Περίληψη των όσων έχουμε πει Μας ενδιαφέρει να αναλύουμε την πολυπλοκότητα των αλγορίθμων που φτιάχνουμε. Έχουμε δύο επιλογές: 1. Αν υλοποιήσουμε τον αλγόριθμο και να τρέξουμε πολλά παραδείγματα έτσι ώστε να αξιολογήσουμε την απόδοση του αλγόριθμού μας.. Να εφαρμόσουμε τη θεωρητική προσέγγιση ανάλυσης αλγορίθμων. Τι κερδίζουμε επιλέγοντας το () πιο πάνω; A. Αποφεύγουμε την υλοποίηση B. Προφέρουμε απάντηση η οποία δεν βασίζεται στην υλοποίηση που έχουμε κάνει και κατά συνέπεια δεν βασίζεται στον υπολογιστή στον οποίο τρέξαμε τα πειράματα, στη γλώσσα που χρησιμοποιήσαμε για την υλοποίηση ή στις προγραμματιστικές ικανότητες του προγραμματιστή. C. Επιπλέον: Το αποτέλεσμα μας καλύπτει πληροφορίες για όλα τα πιθανά στιγμιότυπα εισόδου.

ΕΠΛ31 Δομές Δεδομένων και Αλγόριθμοι -36 Περίληψη των όσων έχουμε πει Πως μπορούμε να υποσχόμαστε τόσα πολλά; Επειδή βασιζόμενοι στην Αρχή της Σταθερότητας αγνοούμε διάφορες σταθερές που συναντούμε: Υποθέτουμε ότι όλες οι πράξεις ενός αλγόριθμου χρειάζονται τον ίδιο χρόνο για να εκτελεστούν παρόλο που διαφέρουν στον χρόνο εκτέλεσης τους