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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 1. Πράξεις Τελεστές Έλεγχος Ροής

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

Εισαγωγή στην Πληροφορική Προγραμματισμός-Λειτουργικά

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

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

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

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

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

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

Κεφάλαιο 6 Εισαγωγή στον Προγραμματισμό. 26-Jun-15 ΑΕΠΠ - Καραμαούνας Π. 1

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

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

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

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

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

ΔΙΔΑΚΤΙΚΗ της ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

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

ΑΕΠΠ ΚΕΦΑΛΑΙΟ 6 ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. 6.3 Φυσικές και Τεχνιτές Γλώσσες 6.4 Τεχνικές Σχεδίασης Προγραμμάτων

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

Κεφάλαιο 6 ο Εισαγωγή στον Προγραμματισμό 1

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

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

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

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

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

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Transcript:

ΚΕΦΑΛΑΙΟ 5: Αλγόριθμοι Αρχικές έννοιες Αναπαράσταση αλγορίθμων Διαγράμματα ροής και δομές επανάληψης Αλγόριθμος σειριακής αναζήτησης Αλγόριθμος αλφαβητικής ταξινόμησης Αναδρομικοί αλγόριθμοι Αλγόριθμος δυαδικής ταξινόμησης Εισαγωγή στην αλγοριθμική πολυπλοκότητα Οι διαφάνειες βασίζονται σε μεγάλο βαθμό σε αυτές που συνοδεύονται με το προτεινόμενο σύγγραμμα, καθώς και στις διαφάνειες προηγούμενων ετών του κ. Κουρκουμπέτη. 1

Αλγόριθμος: Ορισμός Ένας αλγόριθμος είναι ένα διατεταγμένο σύνολο, πεπερασμένων, σαφώς ορισμένων, εκτελέσιμων βημάτων, το οποίο ορίζει μία τερματιζόμενη διαδικασία. Έχουμε ήδη δει αλγορίθμους για: Μετατροπή δεκαδικής αναπάραστασης αριθμού σε δυαδική Ανίχνευση και διόρθωση σφαλμάτων Χρονοδρομολόγηση πολλών διεργασιών από το λειτουργικό σύστημα Τον κύκλο μηχανής μιας CPU: 2

Αλγόριθμος: Ορισμός (2) Διατεταγμένο (ordered) σύνολο βημάτων: που να ξεχωρίζουν Όχι απαραίτητα να εκτελούνται με τη σειρά (π.χ. παράλληλοι αλγόριθμοι για πολλούς επεξεργαστές ή για πολλαπλά threads) Πεπερασμένα (finite) Σαφώς ορισμένα (unambiguous) Eκτελέσιμα βήματα: π.χ. όχι κάτι σαν το οποίο ορίζει μία τερματιζόμενη διαδικασία Αν και ορίζονται και αλγόριθμοι για ατέρμονες διεργασίες, π.χ. Διαίρεση του 1 με το 3 3

Αλγόριθμοι, προγράμματα και γλώσσες είσοδος Αλγόριθμος έξοδος Aλγόριθμοι που τερματίζουν ή δεν τερματίζουν πως να περιγράψουμε έναν αλγόριθμο; φυσική γλώσσα (ελληνικά, αγγλικά) είναι ασαφής «μαζεύετε τριαντάφυλλα όσο σας επιτρέπεται» Γλώσσα προγραμματισμού: εύκολη και περιεκτική έκφραση αλγορίθμων άμεσα κατανοητή από υπολογιστές και ανθρώπους 4

Αλγόριθμοι : επίπεδα αφαίρεσης Ένα πρόβλημα αποτελεί το κίνητρο για την επινόηση ενός αλγόριθμου Ο αλγόριθμος είναι μια διαδικασία επίλυσης του προβλήματος Συνήθως, μία διαδικασία, από πολλές πιθανές Αναπαράσταση: είναι η επαρκής περιγραφή ενός αλγορίθμου μία περιγραφή από πολλές πιθανές Πρόγραμμα (program): είναι μια αναπαράσταση ενός αλγορίθμου Η επίσημη αναπαράσταση, γραμμένη για εκτέλεση από υπόλογιστή Διεργασία (process): η διαδικασία εκτέλεσης ενός προγράμματος (και συνεπώς και του αλγορίθμου) 5

Αρχέτυπα Αρχέτυπα (primitives): Καλά ορισμένα σύνολα από δομικά μπλοκ από τα οποία μπορεί να κατασκευαστούν αναπαραστάσεις αλγορίθμων Μια συλλογή αρχετύπων μαζί με μια συλλογή κανόνων με το πως αυτά μπορούν να συνδυαστούν για να αναπαραστήσουν περίπλοκες ιδέες, συνιστά μια γλώσσα προγραμματισμού Κάθε αρχέτυπο έχει τη δική του σύνταξη (syntax) και σημασιολογία (semantics) Σύνταξη: συμβολική αναπαράσταση Σημασιολογία: Σημασία του αρχέτυπου Τα αρχέτυπα είναι σε πιο υψηλό επίπεδο από αυτό των εντολών της γλώσσας μηχανής (που είδαμε στον Κεφ. 2) 6

Αρχέτυπα ψευδοκώδικα Ψευδοκώδικας (pseudo- code): ένα λιγότερο επίσημο (από την γλώσσα προγραμματισμού) σύστημα από συμβολισμούς το οποίο μπορεί να αναπαραστήσει τις ιδέες που διέπουν έναν αλγόριθμο Ανάθεση: όνομα ß έκφραση name ß expression Επιλογή συνθήκης: αν (συνθήκη) τότε (ενέργεια 1) αλλιώς (ενέργεια 2) if (συνθήκη) then (ενέργεια 1) else (ενέργεια 2) 7

Αρχέτυπα ψευδοκώδικα (2) Επαναλαμβανόμενη εκτέλεση: όσο (συνθήκη) κάνε (ενέργεια) while (συνθήκη) do (ενέργεια) Διαδικασία (procedure): Μπλοκ από εντολές που εκτελούν μια αυτόνομη λειτουργία Λέγεται και υπο- πρόγραμμα (subprogram) υπορουτίνα (subroutine), διαδικασία (procedure), συνάρτηση (function) διαδικασία όνομα procedure name 8

Διαδικασία Η διαδικασία (procedure) πρέπει να είναι γενική και εφαρμόσιμη σε κάθε περίπτωση Π.χ. η περιγραφή μιας διαδικασίας για ταξινόμηση μιας λίστας ονομάτων κατά αλφαβητική σειρά πρέπει να εφαρμόζεται σε οποιαδήποτε λίστα ονομάτων και όχι σε μια συγκεκριμένη μόνο Παράμετροι (parameters): στην προκειμένη περίπτωση η λίστα προς ταξινόμηση Π.χ. Procedure Sort (List) 9

Παραδείγματα στοίχισης Η ανάγνωση ψευδο- κώδικα διευκολύνεται αν κάνουμε καλή στοίχιση και περιγραφή των βρόχων και του τέλος των if, while, 10

Βήματα επίλυσης προβλήματος Βήματα κατά τον Polya (1945) 1. Κατανόηση του προβλήματος. 2. Σχηματισμός (στο νου μας) μιας ιδέας για το πώς μπορεί να λυθεί το πρόβλημα από μία αλγοριθμική διαδικασία. 3. Συγκρότηση του αλγορίθμου και αναπαράσταση του ως πρόγραμμα. 4. Αξιολόγηση του προγράμματος όσον αφορά την ακρίβεια του και τη δυνατότητα να χρησιμοποιηθεί ως εργαλείο για την επίλυση άλλων προβλημάτων. Όχι απαραίτητο (και πολλές φορές όχι αποδοτικό) να τηρείται αυστηρή αλληλουχία στα βήματα αυτά 11

Τεχνικές για το πρώτο βήμα Επίλυση ενός πιο εύκολου, σχετικού προβλήματος: «Χαλαρώνει» κάποιους από τους (πολλούς) περιορισμούς του προβλήματος. Επιλύει πρώτα κάποια επιμέρους τμήματα του προβλήματος - συνθετική μεθοδολογία. Λέγεται και τεχνική από- κάτω- προς- τα- πάνω (bottom- up) Βηματική εκλέπτυνση (step- wise refinement) Δημοφιλής τεχνική επειδή παράγει τμηματικά προγράμματα Απλοποίηση βήματων σε πολλά απλούστερα Λέγεται και τεχνική από πάνω- προς- τα- κάτω (top- down) 12

Βηματική εκλέπτυνση Αλγόριθμος: (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) βαλε το δοχείο στο ντουλάπι 13

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

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

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

Η δομή ελέγχου επιλογής δοκιμή συνθήκης 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 17

Παράδειγμα φωλιασμένων επιλογών δοκιμή συνθήκης false δοκιμή συνθήκης false P2 true true P1 δοκιμή συνθήκης false P1 P2 true P3 P4 if condition then P1 else if condition then P3 else P4 P2 18

Δομές Επανάληψης Βρόχος προ- ελέγχου (pro- test loop): όσο (συνθήκη) κάνε (σώµα βρόχου) while (condition) do () Βρόχος μετα- ελέγχου (post- test loop): επανάλαβε (σώµα βρόχου) µέχρι(συνθήκη) repeat (loop body) until(condition) 19

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

Η δομή ελέγχου επανάληψης Η δομή βρόχου όσο (while) 21

Άλλο παράδειγμα δομής επανάληψης Η δομή βρόχου επανέλαβε(repeat) 22

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

Επανάληψη: Αρχέτυπα (εντολές) ψευδοκώδικα Ανάθεση όνομα ß έκφραση Επιλογή συνθήκης αν (συνθήκη) τότε (ενέργεια) Επαναλαμβανόμενη εκτέλεση όσο (συνθήκη) κάνε (ενέργεια) Διαδικασία διαδικασία όνομα (συγκεκριμένο όνομα της μονάδας) 24

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

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

Sequential Search Ερώτηση: Πόσοι έλεγχοι χρειάζονται κατά μέσο όρο για σειριακή αναζήτηση ενός ονόματος σε μια λίστα μήκους n; Στη χειρότερη περίπτωση; 27

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

Ο αλγόριθμος ταξινόμησης με εισαγωγή (insertion sort) σε ψευδοκώδικα διαδικασία Ταξινόμηση (Λίστα) Νß 2 όσο (η τιμή του Ν δεν υπερβαίνει το μήκος της Λίστας) κάνε (επίλεξε την Ν- οστή καταχώρηση της Λίστας ως οριακή καταχώρηση. Μετακίνησε την οριακή καταχώριση σε μία προσωρινή θέση, αφήνοντας ένα κενό στη Λίστα. όσο (υπάρχει κάποιο όνομα επάνω από το κενό, και το όνομα αυτό είναι «μετά αλφαβητικά» από την οριακή καταχώριση) κάνε (μετακίνησε το όνομα που βρίσκεται επάνω από το κενό προς τα κάτω, αφήνοντας ένα κενό από πάνω του) Τοποθέτησε την οριακή καταχώριση στο κενό της Λίστας. Ν ß Ν + 1 ) 29

Insertion Sort 30

Αναδρομή (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 3 * 2 1 2 * 1 31

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

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

Δυαδική αναζήτηση σε ταξινομημένη λίστα Αριθμός βημάτων το πολύ (δηλ. στη χειρότερη περίπτωση ) Log 2 n = πόσες φορές διαιρείται το n με το 2 2 logn = n 34

Ο αλγόριθμος της δυαδικής αναζήτησης σε ψευδοκώδικα Διαδικασία Αναζήτηση (Λίστα, ΤιμήΣτόχος) αν ( Η Λίστα είναι άδεια) τότε (Ανάφερε ότι η αναζήτηση απέτυχε) αλλιώς [Επίλεξε τη μεσαία καταχώριση της Λίστας ως την ΚαταχώρισηΠροςΈλεγχο. Εκτέλεσε το παρακάτω μπλοκ εντολών που αντιστοιχεί στην κατάλληλη περίπτωση. περίπτωση 1: ΤιμήΣτόχος=ΚαταχώρισηΠροςΈλεγχο (Ανέφερε ότι η αναζήτηση είναι επιτυχής.) περίπτωση 2: ΤιμήΣτόχος<ΚαταχώρισηΠροςΈλεγχο (Εφάρμοσε τη διαδικασία Αναζήτηση για να δεις αν η ΤιμήΣτόχος βρίσκεται στο τμήμα της λίστα που προηγείται της ΚαταχώρισηΠροςΈλεγχο, και ανέφερε το αποτέλεσμα αυτής της αναζήτησης.) περίπτωση3: ΤιμήΣτόχος> ΚαταχώρισηΠροςΈλεγχο (Εφάρμοσε τη διαδικασία Αναζήτηση για να δεις αν η ΤιμήΣτόχος βρίσκεται στο τμήμα της λίστα μετά την ΚαταχώρισηΠροςΈλεγχο, και ανέφερε το αποτέλεσμα αυτής της αναζήτησης.) ] τέλος αν 35

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

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

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

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

Ψευδοκώδικας Δυαδικής Αναζήτησης για έναν αριθμό σε μια ταξινομημένη λίστα αριθμών 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 } 40

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

Αποδοτικότητα Μετράται ως πλήθος των εκτελούμενων εντολών του αλγορίθμου Συνήθως θεωρούμε τις πιο σημαντικές (από άποψη υπολογιστικού φόρτου) εντολές Αυτές κυρίως επιδρούν στο χρόνο που απαιτείται για εκτέλεση ενός αλγορίθμου Ενδιαφερόμαστε για μια λίστα οποιουδήποτε μήκους n Καλύτερη (best- case), χειρότερη (worst- case) και μέση (average- case) περίπτωση. Είδαμε την μέση περίπτωση για την ακολουθιακή αναζήτηση: n/2 έλεγχοι για λίστα μήκους n (χειρότερη περίπτωση είναι n έλεγχοι) χειρότερη περίπτωση log n για την δυαδική αναζήτηση για λίστα μήκους n Ο συμβολισμός Θ προσδιορίζει την αποδοτικότητα των αλγορίθμων Παράδειγμα η ταξινόμηση με εισαγωγή αναπαριστάται με Θ(n 2 ) Θ: σύμβολο Landau 42

Ανάλυση αλγορίθμου ταξινόμησης με εισαγωγή Επικεντρωνόμαστε στο πόσες συγκρίσεις χρειάζονται στον αλγόριθμο Επιλογή μιας καταχώρησης σαν οριακή καταχώρηση (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) συγκρίσεις 43

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

Ορισμός ταχύτητας αύξησης μιας συνάρτησης: Σύμβολα 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) 45

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

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