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

Σχετικά έγγραφα
ΚΕΦΑΛΑΙΟ 5: Αλγόριθμοι

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

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

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι. 5.1 Αλγόριθµος: Ορισµός. Αλγόριθµοι : επίπεδα αφαίρεσης

Εισαγωγή στην επιστήμη των Υπολογιστών & Τηλεπικοινωνιών

Εισαγωγή στην πληροφορική

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

Εισαγωγή στην επιστήμη των υπολογιστών. Λογισμικό Υπολογιστών Κεφάλαιο 8ο Αλγόριθμοι

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

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

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

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

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

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

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

ΕΠΛ 003: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

ΛΟΓΙΚΑ ΔΙΑΓΡΑΜΜΑΤΑ. Γ Λυκείου Κατεύθυνσης Mike Trimos

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

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

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

Πρόβλημα 37 / σελίδα 207

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

Εισαγωγή στον Προγραμματισμό

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

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

Ψευδοκώδικας. November 7, 2011

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

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL)

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

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

Computing. Νοέμβριος Έκδοση 1.0

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

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

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

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

ΑΛΓΟΡΙΘΜΟΙ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ

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

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

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

Εισαγωγή στην πληροφορική

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

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

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

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

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

1. Πότε χρησιμοποιούμε την δομή επανάληψης; Ποιες είναι οι διάφορες εντολές (μορφές) της;

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

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

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

Μεταγλωττιστές Βελτιστοποίηση

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2. Α1. Ο αλγόριθμος είναι απαραίτητος μόνο για την επίλυση προβλημάτων πληροφορικής

Α2. Να γράψετε στο τετράδιο σας τον αριθμό 1-4 κάθε πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

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

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

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

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο 2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

Πληροφορική ΙΙ Ενότητα 1

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

ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΑΡΧΕΣ ΤΗΣ ΕΠΙΣΤΗΜΗΣ ΤΩΝ Η/Υ

8 Τεχνικός Εφαρμογών Πληροφορικής με Πολυμέσα

ΠαράδειγµαΠρογραµµατισµού

Διαδικαστικός Προγραμματισμός

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

Μεταγλωττιστές Βελτιστοποίηση

I. ΑΛΓΟΡΙΘΜΟΣ II. ΠΡΑΞΕΙΣ - ΣΥΝΑΡΤΗΣΕΙΣ III. ΕΠΑΝΑΛΗΨΕΙΣ. 1. Τα πιο συνηθισμένα σενάρια παραβίασης αλγοριθμικών κριτηρίων είναι:

Προτεινόμενος τρόπος διδασκαλίας του μαθήματος με ενδεικτικό χρονοπρογραμματισμό. Α/Α Ενότητες Περιγραφή Ώρες 1 Εισαγωγικό μάθημα 1

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

Υπολογισμός - Εντολές Επανάληψης

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ

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

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

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

Κεφάλαιο : Εισαγωγή Στον Προγραμματισμό. (Διάλεξη 2) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ. Περιεχόμενα

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

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

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

Διορθώσεις σελ

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

Προγραµµατισµός Η/Υ. Μέρος2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΙΓΑΙΟΥ ΤΜΗΜΑ ΠΟΛΙΤΙΣΜΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΑΣ. Διδάσκουσα Δρ Β. Καβακλή. Χειμερινό Εξάμηνο 2001

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #2

ΕΠΛ 003: ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΑ ΣΥΣΤΗΜΑΤΑ

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Πληρουορική Γ Γσμμασίοσ

Transcript:

ΚΕΦΑΛΑΙΟ 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) βράσε νερό φτιάξε στιγμιαίο καφέ (1.1) γέμισε χύτρα (1.1.1) βάλε χύτρα κάτω από βρύση (1.1.2) άνοιξε βρύση (1.2) άναψε το μάτι (1.3) περίμενε να βράσει (1.4) σβήσε το μάτι (1.1.3) περίμενε να γεμίσει η χύτρα (1.1.4) κλείσε βρύση (1.3.1) περίμενε να σφυρίξει η χύτρα (2) βάλε καφέ στο φλιτζάνι (3) πρόσθεσε νερό στο φλιτζάνι (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

Διαγράμματα ροής Διαγράμματα ροής (flow charts): γραφικός τρόπος περιγραφής δομής αλγορίθμων Ορίζουμε τα βασικά συστατικά διαγραμμάτων ροής - - ακολουθία - - δοκιμή (διάφοροι τύποι) - - επανάληψη (διάφοροι τύποι) ακολουθία βάλε την χύτρα κάτω από βρύση άνοιξε την βρύση περίμενε να γεμίσει η χύτρα κλείσε την βρύση άναψε το μάτι περίμενε να σφυρίξει η χύτρα σβήσε το μάτι πάρε το δοχείο του καφέ από το ντουλάπι δοκιμή (test) συνθήκη = false συνθήκη = false συνθήκη = true 19

Σύνθεση βασικών διαγραμμάτων Αλγόριθμος: σύνθεση βασικών διαγραμμάτων ακολουθία δοκιμή (test) false true ακολουθία ακολουθία 20

Η δομή ελέγχου επιλογής δοκιμή συνθήκης false if condition then P1 true δοκιμή συνθήκης false P1 P2 true P1 if condition then P1 else P2 if x>3 then z:=1 else y:=8 21

Παράδειγμα φωλιασμένων επιλογών δοκιμή συνθήκης false δοκιμή συνθήκης false P2 true true P1 δοκιμή συνθήκης false P1 P2 true P3 P4 if condition then P1 else if condition then P3 else 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

Αλγόριθμος Αλφαβητικής ταξινόμησης λίστας Αλγόριθμος Ταξινόμησης με Εισαγωγή (InsertionSort) Αριθμός βημάτων στην χειρότερη περίπτωση για μια λίστα μήκους n 1+ 2+ 3+! + ( n 1) = 1 n( n 1) 2 = 1 ( n 2 2 n) 32

Ο αλγόριθμος ταξινόμησης με εισαγωγή (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=1 then answer = 1 else answer = N * factorial(n-1) 3 2 1 3 * 2 * 1 36

Αναδρομικές διαδικασίες Η διαδικασία καλεί τον εαυτό της Κάθε αντίτυπο της διαδικασίας καλεί τον εαυτό της (με διαφορετικές παραμέτρους) Π.χ. Η διαδικασία για το n! (n παραγοντικό) Κάθε κλήση της διαδικασίας λέγεται ενεργοποίηση (activation) Σε μια χρονική στιγμή μόνο ένα αντίτυπο της διαδικασίας εκτελείται, τα υπόλοιπα (που έχουν κληθεί πριν) περιμένουν το αποτέλεσμα αυτού του αντιτύπου Κάθε αναδρομική διεργασία περιέχει συνθήκη τερματισμού - λέγεται περίπτωση βάσης (base case) ή εκφυλισμένη περίπτωση (degenerate case) Αν η συνθήκη δεν ικανοποιείται, καλείται και πάλι η διαδικασία με άλλες παραμέτρους, που πλησιάζουν στην συνθήκη τερματισμού module factorial(n) if N=1 then answer = 1 else answer = N * factorial(n-1) 37

Αναδρομική στρατηγική (Δυαδική Αναζήτηση) για αναζήτηση της καταχώρισης Κώστας σε μια ταξινομημένη λίστα Είσοδος: Μια λίστα που είναι ταξινομημένη αλφαβητικά 38

Εφαρμογή της δυαδικής αναζήτησης για την καταχώριση Κώστας σε μία ταξινομημένη λίστα Αριθμός βημάτων χειρότερης περίπτωσης Log 2 n = πόσες φορές διαιρείται το n με το 2 2 logn = n 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 Ο συμβολισμός με Θ προσδιορίζει την αποδοτικότητα των αλγορίθμων Παράδειγμα η ταξινόμηση με εισαγωγή αναπαριστάται με Θ(n 2 ) Θ: σύμβολο Landau 47

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

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

Ορισμός ταχύτητας αύξησης μιας συνάρτησης: Σύμβολα Landau f ( n) O( g( n)): f έχει την g ασυμπτωτικό άνω φράγμα όταν n, f ( n) g( n) k η f αυξάνεται το πολύ όπως η g f ( n) Θ( g( n)): f έχει την g ασυμπτωτικό άνω και κάτω φράγμα η f αυξάνεται σαν τη g, άρα είναι στην οικογένεια Θ(g) όταν n, g( n) k f( n) g( n) 1 k 2 2n 2 + 10n 5 Θ( n 2 ),2nlogn + 10n 5 Θ( nlogn) 50

Γράφημα της ανάλυσης χειρότερης περίπτωσης του αλγορίθμου ταξινόμησης με εισαγωγή f(n) = (1/2)*(n 2 - n) n Ο αλγόριθμος ταξινόμησης με εισαγωγή ανήκει στην κλάση αλγορίθμων Θ(n 2 ) 51

Γράφημα της ανάλυσης χειρότερης περίπτωσης του αλγορίθμου δυαδικής αναζήτησης f(n) = ln(n) Αύξηση χρόνου με όλο Και μικρότερα βήματα n Ο αλγόριθμος δυαδικής αναζήτησης ανήκει στην κλάση αλγορίθμων O (logn) = O(ln n) 52

Επαλήθευση λογισμικού Απόδειξη ορθότητας αλγορίθμου Ισχυρισμοί (assertions) Προσυνθήκες (preconditions): ισχύουν πριν ξεκινήσει ο αλγόριθμος Αμετάβλητοι βρόχοι (loop invariant): ισχυρισμοί που είναι σωστοί κάθε φορά που φτάνουμε σε ένα σημείο του βρόχου Έλεγχοι και συνδυαστικοί έλεγχοι 53

Παράδειγμα προβλήματος: Διαχωρισμός αλυσίδας Ένας ταξιδιώτης έχει μία χρυσή αλυσίδα εφτά κρίκων. Πρέπει να μείνει σε ένα απομονωμένο ξενοδοχείο για επτά νύχτες. Το ενοίκιο για κάθε νύχτα είναι ένας κρίκος από την αλυσίδα του. Ποιος είναι ο μικρότερος αριθμός κρίκων που πρέπει να κοπούν ώστε ο ταξιδιώτης να πληρώνει στο ξενοδοχείο έναν κρίκο από την αλυσίδα κάθε πρωί χωρίς να καταβάλει προκαταβολικά τη διαμονή του; 54

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

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