ΚΕΦΑΛΑΙΟ(5:(Αλγόριθμοιpages.cs.aueb.gr/courses/epl131/files/Κ5-Αλγόριθμοι-2013.pdf ·...

Post on 07-Jan-2020

3 views 0 download

Transcript of ΚΕΦΑΛΑΙΟ(5:(Αλγόριθμοιpages.cs.aueb.gr/courses/epl131/files/Κ5-Αλγόριθμοι-2013.pdf ·...

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

● 5.1  Η  έννοια  του  αλγορίθμου● 5.2  Αναπαράσταση  αλγορίθμων● 5.3  Επινόηση  αλγορίθμων● 5.4  Δομές  επανάληψης● 5.5  Αναδρομικές  δομές● 5.6  Απόδοση  και  ορθότητα

Οι  διαφάνειες  βασίζονται  σε  μεγάλο  βαθμό  σε  αυτές  που  συνοδεύονται  με  το  προτεινόμενο  σύγγραμμα,καθώς  και  στις  διαφάνειες  προηγούμενων  ετών  του  κ.  Κουρκουμπέτη. 1

Αλγόριθμος:  Ορισμός● Ένας  αλγόριθμος  είναι  ένα  διατεταγμένο  σύνολο,  

πεπερασμένων,  σαφώς  ορισμένων,  εκτελέσιμων βημάτων,  το  οποίο  ορίζει  μία  τερματιζόμενη διαδικασία.

● Έχουμε  ήδη  δει  αλγορίθμους  για:● μετατροπής  δεκαδικής  αναπάραστασης  αριθμού  σε  δυαδική● Ανίχνευση  και  διόρθωση  σφαλμάτων● Έλεγχο  πολλών  διεργασιών  από  το  λειτουργικό  σύστημα● Τον  κύκλο  μηχανής  μιας  CPU:

2

Αλγόριθμος:  Ορισμός  (2)● Διατεταγμένο  (ordered)  σύνολο  βημάτων:  που  να  ξεχωρίζουν

● Όχι  απαραίτητα  να  εκτελούνται    με  τη  σειρά  (π.χ.  παράλληλοι  αλγόριθμοι  για  πολλούς  επεξεργαστές  ή  για  πολλαπλά  threads)

● Πεπερασμένα (finite)● Σαφώς  ορισμένα (unambiguous):  να  μην  είναι  αόριστα  και  να  

προκύπτουν  κατά  την  διαδικασία● Eκτελέσιμα βήματα:  π.χ.  όχι  κάτι  σαν

● το  οποίο  ορίζει  μία  τερματιζόμενη διαδικασία● Αν  και  ορίζονται  και  αλγόριθμοι  για  ατέρμονες  διεργασίες,  π.χ.  Διαίρεση  

του  1  με  το  3

3

Αλγόριθμοι,  προγράμματα  και  γλώσσες

− Aλγόριθμοι που  τερματίζουν  ή  δεν  τερματίζουν− πως  να  περιγράψουμε  έναν  αλγόριθμο;

− φυσική  γλώσσα  (ελληνικά,  αγγλικά)  είναι  ασαφής«μαζεύετε  τριαντάφυλλα  όσο  σας  επιτρέπεται»

− Γλώσσα  προγραμματισμού:− εύκολη  και  περιεκτική  έκφραση  αλγορίθμων− άμεσα  κατανοητή  από  υπολογιστές  και ανθρώπους

Αλγόριθμοςείσοδος έξοδος

4

Αλγόριθμοι  :  επίπεδα  αφαίρεσης

● Ένα  πρόβλημα  αποτελεί  το  κίνητρο  για  την  επινόηση  ενός  αλγόριθμου

● Ο  αλγόριθμος  είναι  μια  διαδικασία  επίλυσης  του  προβλήματος  αυτού– Συνήθως  μία  διαδικασία, από  πολλές  πιθανές

● Η  αναπαράσταση  είναι  η  επαρκής  περιγραφή  ενός  αλγορίθμου– μία  περιγραφή  από  πολλές  πιθανές

● Πρόγραμμα  (program):  είναι  μια  αναπαράσταση  ενός  αλγορίθμου● Η  επίσημη  αναπαράσταση,  γραμμένη  για  εκτέλεση  από  

υπόλογιστή● Διεργασία  (process):  η  διαδικασία  εκτέλεσης  ενός  

προγράμματος  (και  συνεπώς  και  του  αλγορίθμου)

5

Αναπαράσταση  αλγορίθμων  :  Κατασκευή  πουλιού  από  ένα  τετράγωνο  κομμάτι  χαρτί

6

Αρχέτυπα• Αρχέτυπα  (primitives):  Καλά  ορισμένα  σύνολα  από  δομικά  

μπλοκ  από  τα  οποία  μπορεί  να  κατασκευαστούν  αναπαραστάσεις  αλγορίθμων

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

• Κάθε  αρχέτυπο  έχει  τη  δική  του  σύνταξη  (syntax)  και  σημασιολογία  (semantics)– Σύνταξη:  συμβολική  αναπαράσταση– Σημασιολογία:  Σημασία  του  αρχέτυπου

• Τα  αρχέτυπα  είναι  σε  πιο  υψηλό  επίπεδο  από  αυτό  των  εντολών  της  γλώσσας  μηχανής  (που  είδαμε  στον  Κεφ.  2)

7

Αρχέτυπα  Origami

Αρχέτυπα  (primitives):  Καλά  ορισμένα  σύνολα  από  δομικά  μπλοκ  από  τα  οποία  μπορεί  να  κατασκευαστούν  αναπαραστάσεις  αλγορίθμων

8

Αρχέτυπα  ψευδοκώδικα● Ψευδοκώδικας  (pseudo-­‐code):   ένα  λιγότερο  επίσημο  (από  την  γλώσσα  

προγραμματισμού) σύστημα  από  συμβολισμούς  το  οποίο  μπορεί  να  αναπαραστήσει  τις  ιδέες  που  διέπουν  έναν  αλγόριθμο

● Ανάθεση:όνομα  ß έκφρασηname  ß expression

● Επιλογή  συνθήκης:  αν (συνθήκη)  τότε (ενέργεια  1)

αλλιώς (ενέργεια  2)if (συνθήκη)  then (ενέργεια  1)

else (ενέργεια  2)

9

Αρχέτυπα  ψευδοκώδικα  (2)● Επαναλαμβανόμενη   εκτέλεση:

όσο (συνθήκη)  κάνε (ενέργεια)while (συνθήκη)  do (ενέργεια)

● Διαδικασία   (procedure): Μπλοκ  από  εντολές   που  εκτελούν   μια  αυτόνομη  λειτουργία  

● Λέγεται   και  υπο-­‐πρόγραμμα (subprogram) υπορουτίνα(subroutine),   διαδικασία (procedure),   συνάρτηση  (function)

διαδικασία όνομα  (συγκεκριμένο  όνομα  της  μονάδας)procedure name

10

Διαδικασία  • Η  διαδικασία  (procedure)  πρέπει  να  είναι  γενική  και  

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

κατά  αλφαβητική  σειρά  πρέπει  να  είναι  τέτοια  ώστε  να  εφαρμόζεται  σε  οποιαδήποτε  λίστα  ονομάτων  και  όχι  σε  μια  συγκεκριμένη  μόνο

• Παράμετροι  (parameters):  στην  προκειμένη  περίπτωση  η  λίστα  προς  ταξινόμηση

• Π.χ.  Procedure Sort  (List)

11

Παραδείγματα  στοίχισης  • Η  ανάγνωση  ψευδο-­‐κώδικα   διευκολύνεται  αν  κάνουμε  καλή  

στοίχιση  και  περιγραφή  των  βρόχων  και  του  τέλος  των  if,  while,…

12

Βήματα  επίλυσης  προβλήματος

Βήματα  κατά  τον  Polya (1945)1. Κατανόηση  του  προβλήματος.2. Σχηματισμός   (στο  νου  μας)  μιας  ιδέας  για  το  πώς  μπορεί  

να  λυθεί  το  πρόβλημα  από  μία  αλγοριθμική   διαδικασία.3. Συγκρότηση  του  αλγορίθμου  και  αναπαράσταση   του  ως  

πρόγραμμα.4. Αξιολόγηση  του  προγράμματος   όσον  αφορά  την  ακρίβεια  

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

Όχι  απαραίτητο   (και  πολλές  φορές  όχι  αποδοτικό)   να  τηρείταιαυστηρή  αλληλουχία   στα  βήματα  αυτά

13

Τεχνικές  για  “το  πρώτο  βήμα”

● Επίλυση  ενός  πιο  εύκολου,  σχετικού  προβλήματος:– «Χαλαρώνει»  κάποιους  από  τους  ασφυκτικούς  περιορισμούς  του  προβλήματος.

– Επιλύει  πρώτα  κάποια  επιμέρους  τμήματα  του  προβλήματος  -­‐ συνθετική  μεθοδολογία.

– Λέγεται  και  τεχνική  από-­‐κάτω-­‐προς-­‐τα-­‐πάνω   (bottom-­‐up)● Βηματική εκλέπτυνση  (step-­‐wise  refinement)

– Δημοφιλής  τεχνική  επειδή  παράγει  τμηματικά  προγράμματα

– Απλοποίηση  βήματων  σε  πολλά  απλούστερα– Λέγεται  και  τεχνική  από  πάνω-­‐προς-­‐τα-­‐κάτω  (top-­‐down)

14

Βηματική  εκλέπτυνσηΑλγόριθμος: φτιάξε  στιγμιαίο  καφέ

(1)  βράσε  νερό

(2)  βάλε  καφέστο  φλιτζάνι

(3)  πρόσθεσενερό  στο  φλιτζάνι

(1.1)  γέμισε  χύτρα (1.1.1)  βάλε  χύτρα  κάτω  από  βρύση(1.1.2)  άνοιξε  βρύση(1.1.3)  περίμενε  να  γεμίσει  η  χύτρα(1.1.4)  κλείσε  βρύση(1.2)  άναψε  το  μάτι

(1.3)  περίμενε  να  βράσει(1.3.1)  περίμενε  να  σφυρίξει  η  χύτρα(1.4)  σβήσε  το  μάτι

(2.1)  άνοιξε  το  δοχείο  του  καφέ(2.2)  πάρε  ένα  κουταλάκι  καφέ(2.3)  άδειασε  το  κουταλάκι  στο

φλιτζάνι(2.4)  κλείσε  το  δοχείο  του  καφέ  

(3.1)  βάλε  νερό  από  την  χύτρα  στο  φλιτζάνι  μέχρι  να  γεμίσει

(2.1.1)  πάρε  το  δοχείο  του  καφέ    από  το  ντουλάπι(2.1.2)  βγάλε  το  καπάκι

(2.4.1)  βάλε  το  καπάκι  στο  δοχείο(2.4.2)  βαλε  το  δοχείο  στο  ντουλάπι

15

Ακολουθία βημάτων  για  αλγόριθμο

1. βάλε  την  χύτρα  κάτω  από  βρύση2. άνοιξε  την  βρύση3. περίμενε  να  γεμίσει  η  χύτρα4. κλείσε  την  βρύση5. άναψε  το  μάτι6. περίμενε  να  σφυρίξει  η  χύτρα7. σβήσε  το  μάτι8. πάρε  το  δοχείο  του  καφέ  από  το  ντουλάπι9. βγάλε  το  καπάκι10. πάρε  ένα  κουταλάκι  καφέ11. άδειασε  το  κουταλάκι  στο  φλιτζάνι12. βάλε  το  καπάκι  στο  δοχείο13. βαλε  το  δοχείο  στο  ντουλάπι14. βάλε  νερό  από  την  χύτρα  στο  φλιτζάνι  μέχρι  να  γεμίσει        

εάν  δεν  υπάρχει  νερό;

εάν  δεν  υπάρχει  καφές,  να  δοκιμάσει  το  επόμενοδοχείο  καφέ;  εάν  υπάρχουν  1000  δοχεία,  πολλά  από  αυτά  άδεια,  τι  να  κάνει;

16

Υπόδειγμα  προβλήματος

● Το  άτομο  Α  πρέπει  να  βρει  τις  ηλικίες  των  τριών  παιδιών  του  ατόμου  Β.

● Ο  Β  λέει  στον  Α  ότι  το  γινόμενο  των  ηλικιών  των  παιδιών  του  είναι  36.

● Ο  Α  απαντάει  ότι  χρειάζεται  άλλο  ένα  στοιχείο● Ο  Β  λέει  στον  Α  το  άθροισμα  των  ηλικιών  των  παιδιών  του,  13● Ο  Α  απαντάει  ξανά  ότι  χρειάζεται  άλλο  ένα  στοιχείο● Ο  Β  λέει  στον  Α  ότι  το  μεγαλύτερο  παιδί  του  παίζει  πιάνο● Ο  Α  λέει  στον  Β  τις  ηλικίες  των  τριών  παιδιών  του.

Ποιες  είναι  οι  ηλικίες  των  τριών  παιδιών;

17

Υπόδειγμα  προβλήματος  (2)

Λύση

18

Διαγράμματα  ροής

βάλε  την  χύτρα  κάτω  από  βρύσηάνοιξε  την  βρύσηπερίμενε  να  γεμίσει  η  χύτρακλείσε  την  βρύσηάναψε  το  μάτιπερίμενε  να  σφυρίξει  η  χύτρασβήσε  το  μάτιπάρε  το  δοχείο  του  καφέ  από  το  ντουλάπι

ακολουθία

δοκιμή(test)

συνθήκη  =  true

συνθήκη  =  false

Διαγράμματα  ροής (flow charts): γραφικός  τρόπος  περιγραφής  δομής  αλγορίθμωνΟρίζουμε  τα  βασικά  συστατικά  διαγραμμάτων  ροής-­‐-­‐ ακολουθία-­‐-­‐ δοκιμή  (διάφοροι  τύποι)-­‐-­‐ επανάληψη  (διάφοροι  τύποι)

συνθήκη  =  false

19

Σύνθεση  βασικών  διαγραμμάτων

δοκιμή(test)

true

false

ακολουθία

ακολουθία ακολουθία

Αλγόριθμος:  σύνθεση  βασικών  διαγραμμάτων  

20

Η  δομή  ελέγχου  επιλογής

if condition then P1 else P2

if x>3  then z:=1  else y:=8

δοκιμήσυνθήκης

true

false

P1

if condition then P1δοκιμήσυνθήκης

true

false

P1 P2

21

Παράδειγμα  φωλιασμένων  επιλογών

if condition then P1 elseif condition then P3 else  P4

δοκιμήσυνθήκης

true

false

P1 P2

P2

δοκιμήσυνθήκης

true

false

P1

δοκιμήσυνθήκης

true

false

P3 P4

P2

22

Δομές  Επανάληψης• Βρόχος  προ-­‐ελέγχου   (pro-­‐test  loop):

όσο (συνθήκη) κάνε(σώµα βρόχου)

while (condition) do()

• Βρόχος  μετα-­‐ελέγχου (post-­‐test  loop):επανάλαβε (σώµα βρόχου)

µέχρι(συνθήκη)

repeat (loop body)until(condition)

23

Δομές  επανάληψης  (2)

• Υποθέτει  ότι  υπάρχει  ένα  κέρμα  στην  τσέπη  στην  αρχή

• Δεν  υποθέτει  ότι  υπάρχει  ένα  κέρμα  στην  τσέπη  στην  αρχή  (και  ελέγχει)

24

Η  δομή  ελέγχου  επανάληψης

Η  δομή βρόχου όσο (while)

25

Άλλο  παράδειγμα  δομής  επανάληψης

Η  δομή βρόχου επανέλαβε(repeat)

26

Στοιχεία  ελέγχου  επανάληψης  

Χρειάζεται  προσοχή  με  τον  έλεγχο  και  την  τροποποίηση!  

27

Επανάληψη:  Αρχέτυπα  (εντολές)  ψευδοκώδικα

● Ανάθεσηόνομα  ß έκφραση

● Επιλογή  συνθήκης  αν (συνθήκη)  τότε (ενέργεια)

● Επαναλαμβανόμενη  εκτέλεσηόσο (συνθήκη)  κάνε (ενέργεια)

● Διαδικασία  διαδικασίαόνομα  (συγκεκριμένο  όνομα  της  μονάδας)

28

Παράδειγμα  Διαδικασίας

διαδικασίαΧαιρετισμόςΜετρητής  ß 3;όσο (Μετρητής  >0)  κάνε(τύπωσε  το  μήνυμα  “Γεια  χαρά” καιΜετρητήςßΜετρητής-­‐1)

29

Ο  αλγόριθμος  της  σειριακής  αναζήτησης  (sequential  search)  σε  ψευδοκώδικα  

Αρχή:  μια  λίστα  με  ονόματα  αλφαβητικά  ταξινομημένηΣτόχος είναι  να  βρεθεί  η  ΤιμήΣτόχος  (π.χ.  Ένα  συγκεκριμένο  όνομα)  στην  Λίστα

30

Sequential  Search

31

Αλγόριθμος  Αλφαβητικής  ταξινόμησης  λίστας

)(21)1(

21)1(321 2 nnnnn −=−=−++++ !

Αριθμός  βημάτων  στην  χειρότερη  περίπτωσηγια μια  λίστα  μήκους  n

32

Αλγόριθμος  Ταξινόμησης  με  Εισαγωγή  (InsertionSort)

Ο  αλγόριθμος  ταξινόμησης  με  εισαγωγή  (insertion  sort) σε  ψευδοκώδικα

διαδικασία Ταξινόμηση  (Λίστα)Νß2όσο (η  τιμή  του  Ν  δεν  υπερβαίνει  το  μήκος  της  Λίστας) κάνε

(επίλεξε  την  Ν-­‐οστή καταχώρηση  της  Λίστας  ως  οριακή  καταχώρηση.Μετακίνησε  την  οριακή  καταχώριση  σε  μία  προσωρινή  θέση,  αφήνοντας  ένα  κενό  στη  Λίστα.όσο (υπάρχει  κάποιο  όνομα  επάνω  από  το  κενό,  και  το  όνομα  αυτό  

είναι  «μεγαλύτερο»  από  την  οριακή  καταχώριση)  κάνε(μετακίνησε  το  όνομα  που  βρίσκεται  επάνω  από  το  κενό  προς  τα  κάτω,  αφήνοντας  ένα  κενό  από  πάνω  του)

Τοποθέτησε  την  οριακή  καταχώριση  στο  κενό  της  Λίστας.Ν  ß Ν  +  1)

33

Insertion  Sort

34

Αναδρομή (Recursion)

• Η  εκτέλεση  μιας  διαδικασίας  οδηγεί  σε  μια  ακόμα  εκτέλεση  της  διαδικασίας.

• Πραγματοποιούνται  πολλαπλές  ενεργοποιήσεις  της  διαδικασίας,  από  τις  οποίες  όλες  εκτός  από  μία  περιμένουν  να  ολοκληρωθούν  οι  άλλες  ενεργοποιήσεις.

35

Αναδρομή (Recursion)  (2)Αναδρομικός (recursive) αλγόριθμος: καλεί  τον  εαυτό  τουΜεθοδολογία: εκφράζουμε  την  διαδικασία  με  βάση  ιδίου  τύπου  διαδικασίεςπου  λειτουργούν  σε  απλούστερα  προβλήματα,  Γνωρίζουμε  την  απάντηση για  το  πλέον  απλό  πρόβλημα

factorial(N)          =        1*2*3*...   (N-­‐1)*N          =        N*factorial(N-­‐1)

module factorial(N)if N=1then answer  =  1else answer  =  N  *  factorial(N-­1)

3

3  *

21

2  * 1

36

Αναδρομικές  διαδικασίες• Η  διαδικασία  καλεί  τον  εαυτό  της

– Κάθε  αντίτυπο  της  διαδικασίας  καλεί  τον  εαυτό  της  (με  διαφορετικές  παραμέτρους)

– Π.χ.  Η  διαδικασία  για  το  n!  (n  παραγοντικό)• Κάθε  κλήση  της  διαδικασίας  λέγεται  ενεργοποίηση  (activation)• Σε  μια  χρονική  στιγμή  μόνο  ένα  αντίτυπο  της  διαδικασίας  εκτελείται,  τα  

υπόλοιπα  (που  έχουν  κληθεί  πριν)  περιμένουν  το  αποτέλεσμα  αυτού  του  αντιτύπου

• Κάθε  αναδρομική  διεργασία  περιέχει  συνθήκη  τερματισμού  -­‐ λέγεται  περίπτωση  βάσης  (base  case)  ή  εκφυλισμένη  περίπτωση  (degenerate  case)– Αν  η  συνθήκη  δεν  ικανοποιείται,  καλείται  και  πάλι  η  διαδικασία  με  άλλες  

παραμέτρους,  που  πλησιάζουν  στην  συνθήκη  τερματισμού

37

module factorial(N)if N=1then answer  =  1else answer  =  N  *  factorial(N-­1)

Αναδρομική  στρατηγική  (Δυαδική  Αναζήτηση)  για  αναζήτηση  της  καταχώρισης  “Κώστας”  σε  μια  

ταξινομημένη  λίστα  

Είσοδος:  Μια  λίστα  που  είναι  ταξινομημένη  αλφαβητικά 38

Εφαρμογή  της  δυαδικής  αναζήτησης  για  την  καταχώριση  “Κώστας” σε  μία  ταξινομημένη  λίστα

Log2 n  =  πόσες  φορές  διαιρείται  το  n  με  το  2 nn =log2Αριθμός  βημάτων  χειρότερης  περίπτωσης

39

Ο  αλγόριθμος  της  δυαδικής  αναζήτησης  σε  ψευδοκώδικα

Διαδικασία Αναζήτηση  (Λίστα,  ΤιμήΣτόχος)αν (  Η  Λίστα  είναι  άδεια)τότε(Ανάφερε  ότι  η  αναζήτηση  απέτυχε)αλλιώς[Επίλεξε τη  “μεσαία” καταχώριση  της  Λίστας  ως  την  ΚαταχώρισηΠροςΈλεγχο.Εκτέλεσε  το  παρακάτω  μπλοκ  εντολών  που  αντιστοιχεί  στην  κατάλληλη  περίπτωση.

περίπτωση  1: ΤιμήΣτόχος=ΚαταχώρισηΠροςΈλεγχο(Ανέφερε  ότι  η  αναζήτηση  είναι  επιτυχής.)

περίπτωση  2: ΤιμήΣτόχος<ΚαταχώρισηΠροςΈλεγχο(Εφάρμοσε  τη  διαδικασία  Αναζήτηση  για  να  δεις  αν  η  ΤιμήΣτόχος  βρίσκεται  στο  τμήματης  λίστα  που  προηγείται  της  ΚαταχώρισηΠροςΈλεγχο,  και  ανέφερε  το  αποτέλεσμααυτής  της  αναζήτησης.)

περίπτωση3: ΤιμήΣτόχος>  ΚαταχώρισηΠροςΈλεγχο(Εφάρμοσε  τη  διαδικασία  Αναζήτηση  για  να  δεις  αν  η  ΤιμήΣτόχος  βρίσκεται  στο  τμήμα  της  λίστα  μετά  την  ΚαταχώρισηΠροςΈλεγχο,  και  ανέφερε  το  αποτέλεσμα  αυτής  της  

αναζήτησης.)

]  τέλος  αν 40

Ψευδοκώδικας  Δυαδικής  Αναζήτησης  

low  =  0;  high  =  N-­‐1;BinarySearch(A[0..N-­‐1],   value,  low,  high)  {            

if  (high  <  low)                      return   -­‐1  //  not  found              

mid  =  (low  +  high)    /  2            

if  (A[mid]  >  value)                      return  BinarySearch(A,  value,  low,  mid-­‐1)              

else        

if  (A[mid]  <  value)                      return  BinarySearch(A,  value,  mid+1,  high)              

else                      return  mid  //  found      

} 41

Ο  αλγόριθμος  της  δυαδικής  αναζήτησηςΑναζήτηση  του  Β  στην  λίστα  Α  Β  Γ  Δ  Ε  Ζ  Η

42

Ο  αλγόριθμος  της  δυαδικής  αναζήτησης  (2)

Αναζήτηση  του  Δ  στην  λίστα  Α  Γ  Ε  Ζ  Η

43

Ο  αλγόριθμος  της  δυαδικής  αναζήτησης

Αναζήτηση  του  Δ  στην  λίστα  Α  Γ  Ε  Ζ  Η

44

Δυαδική  Αναζήτηση  (Τερματισμός)

• Αρχικοποίηση  με  μια  ταξινομημένη  λίστα• Αν  βρεθεί  η  Τιμή-­‐Στόχος  ή  αν  προκύψει  άδεια  λίστα,  ο  αλγόριθμος  τερματίζει– Διαφορετικά,   καλείται   ένα  αντίτυπο  της  διαδικασίας  με  το  μισό  της  λίστας   (άνω  ή  κάτω  μισό)

• Σίγουρος  τερματισμός:  εφόσον  η  λίστα  είναι  πεπερασμένη  και  κάθε  φορά  η  διαδικασία  καλείται  για  το  μισό  της  λίστας  της  προηγούμενης  κλήσης,  κάποια  στιγμή  ο  αλγόριθμος  θα  τελειώσει– Θα  βρεθεί  η  Τιμή-­‐Στόχος  ή  θα  προκύψει  άδεια  λίστα  

45

Αποδοτικότητα  Αλγορίθμων  (Παράδειγμα)• Λίστα  30,000  ονομάτων  φοιτητών  • Ακολουθιακή  (sequential)  αναζήτηση:  κατά  μέσο  όρο  χρειάζεται  να  περάσει  15,000  ονόματα– 10msec  για  να  ελέγξει  ένα  όνομα– Μέσος  χρόνος  για  έλεγχο:  150  sec  

• Δυαδική  (binary)  αναζήτηση:  χρειάζεται  να  ελέγξει  το  πολύ  15  ονόματα  – Όσες  φορές  (το  πολύ)  μπορεί  να  κοπεί  μια  λίστα  30,000  ονομάτων  στην  μέση

– 10msec  για  να  ελέγξει  ένα  όνομα– Χρόνος  για  έλεγχο  (στη  χειρότερη  περίπτωση):  0,15  sec

46

Αποδοτικότητα  ● Μετράται  ως  πλήθος  των  εκτελούμενων   εντολών  του  αλγορίθμου● Συνήθως  θεωρούμε  τις  πιο  σοβαρές  (από  άποψη  υπολογιστικού   φόρτου  

ή  αποθηκευτικού   χώρου)  εντολές● Έχει  επίδραση  στο  χρόνο  ή  στον  αποθηκευτικό   χώρο  που  απαιτείται  για  

την  εκτέλεση  ενός  αλγορίθμου● Ενδιαφερόμαστε   για  μια  γενική  μορφή  που  να  δείχνει  την  απόδοση  για  

μια  λίστα  οποιουδήποτε  μήκους  n● Καλύτερη  (best-­‐case),  χειρότερη (worst-­‐case) και  μέση  (average-­‐case)  

περίπτωση.● π.χ.  Είδαμε  την  μέση  περίπτωση  για  την  ακολουθιακή  αναζήτηση:  n/2 έλεγχοι

για  λίστα  μήκους  n και  ● χειρότερη  περίπτωση  log  (n)  για  την  δυαδική  αναζήτηση για  λίστα  μήκους  n

● Ο  συμβολισμός  με  Θ  προσδιορίζει   την  αποδοτικότητα   των  αλγορίθμων– Παράδειγμα  η  ταξινόμηση  με  εισαγωγή  αναπαριστάται  με  Θ(n2)– Θ:  σύμβολο  Landau

47

Ανάλυση  αλγορίθμου  ταξινόμησης  με  εισαγωγή• Επικεντρωνόμαστε   στο  πόσες  συγκρίσεις  χρειάζονται   στον  

αλγόριθμο– Επιλογή  μιας  καταχώρησης  σαν  οριακή  καταχώρηση   (pivot):  

2,3,...n– Σύγκριση  του  pivot  με  όλα  τα προηγούμενα  στοιχεία  

• Καλύτερη  περίπτωση:  Η  λίστα  είναι  ταξινομημένη  ήδη  αλφαβητικά– Οπότε  χρειάζεται  σύγκριση   του  pivot  με  ένα  στοιχείο κάθε  φορά– n-­‐1  συγκρίσεις

• Χειρότερη  περίπτωση:  Η  λίστα   είναι  σε  ανάποδη  αλφαβητική  σειρά– Χρειάζεται  σύγκριση   του  pivot  (που  είναι  σε  μια  θέση  k)  με  όλα  τα  

προηγούμενα  στοιχεία  1,2,...k-­‐1– Συνολικά  1+2+3+...+  (n-­‐1)  συγκρίσεις   =  (1/2)*(n2-­‐n)  συγκρίσεις

• Μέση  περίπτωση:   (1/4)*(n2-­‐1)   συγκρίσεις48

Σενάριο  χειρότερης  περίπτωσης  για  την  ταξινόμηση  με  εισαγωγή  

Χειρότερη  περίπτωση:  Η  λίστα  είναι  σε  ανάποδη  αλφαβητική  σειράΧρειάζεται  σύγκριση  του  pivot  (που  είναι  σε  μια  θέση  k)  με  όλα  τα  προηγούμενα  στοιχεία  1,2,...k-­‐1Συνολικά  1+2+3+...+  (n-­‐1)  συγκρίσεις  =  (1/2)*(n2-­‐n)  συγκρίσεις

49

Ορισμός  ταχύτητας  αύξησης  μιας  συνάρτησης:  Σύμβολα  Landau

φράγμα  άνω  όασυμπτωτικ      την  έχει      :))(()( gfngOnf ∈

kngnfn ⋅≤∞→ )()(    ,  όταν

φράγμα  κάτω  και  άνω  όασυμπτωτικ      την  έχει      :))(()( gfngnf Θ∈

21 )()()(    ,  όταν kngnfkngn ⋅≤≤⋅∞→

)log(510log2),(5102 22 nnnnnnnn Θ∈−+Θ∈−+

η  f “αυξάνεται” το  πολύ  όπως  η  g

η  f “αυξάνεται” σαν  τη  g, άρα  είναι  στην  οικογένεια  Θ(g)

50

Γράφημα  της  ανάλυσης  χειρότερης  περίπτωσης  του  αλγορίθμου  ταξινόμησης  με  εισαγωγή

f(n)  =  (1/2)*(n2-­‐n)

n

Ο  αλγόριθμος   ταξινόμησης  με  εισαγωγή  ανήκει  στην  κλάση  αλγορίθμων Θ(n2)  51

Γράφημα  της  ανάλυσης  χειρότερης  περίπτωσης  του  αλγορίθμου  δυαδικής  αναζήτησης

f(n)  =  ln(n)    

n

Ο  αλγόριθμος  δυαδικής  αναζήτησης  ανήκει  στην  κλάση  αλγορίθμων  O  (logn)  =  O(ln n)   52

Αύξηση  χρόνου  με  όλο  Και  μικρότερα  βήματα

Επαλήθευση  λογισμικού

● Απόδειξη  ορθότητας  αλγορίθμου– Ισχυρισμοί  (assertions)

●Προσυνθήκες (preconditions):  ισχύουν  πριν  ξεκινήσει   ο  αλγόριθμος

●Αμετάβλητοι  βρόχοι (loop  invariant):  ισχυρισμοί  που  είναι  σωστοί  κάθε  φορά  που  φτάνουμε  σε  ένα  σημείο  του  βρόχου

● Έλεγχοι  και  συνδυαστικοί  έλεγχοι

53

Παράδειγμα  προβλήματος:  Διαχωρισμός  αλυσίδας

● Ένας  ταξιδιώτης  έχει  μία  χρυσή  αλυσίδα  εφτά  κρίκων.● Πρέπει  να  μείνει  σε  ένα  απομονωμένο   ξενοδοχείο  για  

επτά  νύχτες.● Το  ενοίκιο  για  κάθε  νύχτα  είναι  ένας  κρίκος  από  την  

αλυσίδα  του.● Ποιος  είναι  ο  μικρότερος   αριθμός  κρίκων  που  πρέπει  να  

κοπούν  ώστε  ο  ταξιδιώτης   να  πληρώνει  στο  ξενοδοχείο  έναν  κρίκο  από  την  αλυσίδα  κάθε  πρωί  χωρίς  να  καταβάλει   προκαταβολικά   τη  διαμονή  του;

54

Λύση  1:  Διαχωρισμός  της  αλυσίδας  με  τρία  μόνο  κοψίματα

55

Διαχωρισμός  της  αλυσίδας  με  μόνο  ένα  κόψιμο :  Καλύτερη  λύση

56