GEO 6702: RESEARCH METHODS IN HUMAN GEOGRAPHY · • α εστιάσει σε...

Post on 10-Jul-2020

0 views 0 download

Transcript of GEO 6702: RESEARCH METHODS IN HUMAN GEOGRAPHY · • α εστιάσει σε...

Εισαγωγή

Νίκος Αθανάσης

e-mail: athanasis@geo.aegean.gr

ΓΕ0170 -Αλγόριθμοι και Προηγμένες

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

Συνοπτικά

• Σκοπός του μαθήματος

• Στόχοι του μαθήματος

• Αντικείμενο του μαθήματος

• Κανονισμός του μαθήματος

• Εισαγωγικές έννοιες

Σκοπός του μαθήματος

• Να εισάγει έννοιες και τεχνικές που σχετίζονται με το πεδίο των Αλγορίθμων

• Να εστιάσει σε τεχνολογίες σχεδιασμού και υλοποίησης εφαρμογών λογισμικού

• Να διδάξει μεθοδολογίες για την ανάπτυξη εφαρμογών λογισμικού, οι οποίες απαιτούν κατανόηση και δυνατότητα συγγραφής προγραμμάτων σε επίπεδο ανώτερο από το εισαγωγικό

• Να παρουσιάσει δεξιότητες για τη χρήση συγκεκριμένων αρχιτεκτονικών λύσεων στο σχεδιασμό λογισμικού μέσα από αξιοποίηση ποικίλων Δομών Δεδομένων

Σκοπός του μαθήματος

• Να διδάξει μεθοδολογίες για τη διεξαγωγή έρευνας στον τομέα των Αλγορίθμων και της Ανάπτυξης Λογισμικού μέσα από την εκμάθηση σύγχρονων γλωσσών προγραμματισμού όπως η Python

• Να μπορέσουν οι φοιτητές να υλοποιήσουν πλήθος από πραγματικές εφαρμογές που «τρέχουν» σε ένα σύγχρονο προγραμματιστικό περιβάλλον και συγκεντρώνουν τη λειτουργικότητα που παρέχεται από ένα φάσμα διαφορετικών APIs

Στόχοι του μαθήματος

Στο τέλος του εξαμήνου, θα είστε σε θέση να:

• Κατανοείτε βασικές αλγοριθμικές δομές και να αναπτύσσετε ολοκληρωμένα προγράμματα

• Αναλύετε ένα μεγάλο πλήθος αλγορίθμων μέσα από τη γλώσσα προγραμματισμού Python

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

Αντικείμενο του μαθήματος

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

τεχνικές ανάπτυξης αλγορίθμων με τη γλώσσα

Python

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

• Η προγραμματιστική τεχνική της Αναδρομής

• Συλλογές και πίνακες

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

Δεδομένων Ι (Ουρά, Στοίβες, Συνδεδεμένες

Λίστες)

Αντικείμενο του μαθήματος

• Δυαδικά Δένδρα

• Αλγόριθμοι Αναζήτησης

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

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

(Άπληστη Μέθοδος, Διαίρει και Βασίλευε,

Δυναμικός Προγραμματισμό, Οπισθοδρόμηση,

Τοποθέτηση 8 Βασιλισσών, Περιοδεύων Πωλητής

• Προγραμματιστικές Τεχνικές και Διαλειτουργικά

Προγραμματιστικά Περιβάλλοντα

Κανονισμός του μαθήματος

• 10% Συμμετοχή

• 20% Πρόοδος

• 25% Ατομική εργασία

• 45% Τελική εξέταση

• Μέγιστος αριθμός απουσιών = 3

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

• Τσίχλας, Κ., Γούναρης, Α., Μανωλόπουλος, Ι. Σχεδίαση

και ανάλυση αλγορίθμων, ISBN 978-960-603-465-7

• Γεωργιάδης, Λ., Νικολόπουλος, Σ., Παληός, Λ. Δομές

δεδομένων. ISBN 978-960-603-477-0

• ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ ΣΤΟ ΔΙΑΔΙΚΤΥΟ,

Κωδικός Βιβλίου στον Εύδοξο: 320302

• ΤΕΧΝΟΛΟΓΙΑ ΛΟΓΙΣΜΙΚΟΥ: ΘΕΩΡΙΑ ΚΑΙ ΠΡΑΞΗ,

Κωδικός Βιβλίου στον Εύδοξο: 13009253

Η έννοια του αλγορίθμου

• Αποτελεί την πρώτη ύλη για την εμβάθυνση στα

επιμέρους αντικείμενα Θεωρητικής Πληροφορικής

– Γλώσσες και Αυτόματα

– Υπολογιστική Πολυπλοκότητα

– Κρυπτογραφία

• Βασικές γνωστικές περιοχές της Πληροφορικής

– Βάσεις Δεδομένων

– Δίκτυα

– Επεξεργασία Εικόνας

– Τεχνητή Νοημοσύνη

– Παγκόσμιο Ιστός

Η έννοια του αλγορίθμου

• Προέρχεται από το όνομα του Πέρση μαθηματικού Abu

Ja’far Mohammed ibn Musa al Khowarizmi, που έζησε

τον 9ο αιώνα μ.Χ.

• Η λέξη «al Khowarizmi» σημαίνει «από το

Khowarazm», που είναι η σημερινή πόλη Khiva του

Ουζμπεκιστάν.

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

• Κόσκινο του Ερατοσθένη για την

εύρεση πρώτων αριθμών

• Μέθοδο του Ευκλείδη για την

εύρεση του μέγιστου κοινού

διαιρέτη δύο αριθμών

Η έννοια του αλγορίθμου

• Κάθε ενέργεια στην καθημερινή μας ζωή

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

– Μία συνταγή μαγειρικής

– Η διαδικασία ανάληψης χρημάτων από μία

αυτόματη ταμειακή μηχανή σε μία τράπεζα,

– Η διαδικασία πολλαπλασιασμού δύο ακεραίων

Η έννοια του αλγορίθμου

• Αλγόριθμος είναι ένα πεπερασμένο σύνολο εντολών,

αυστηρά καθορισμένων και εκτελέσιμων σε

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

επιτυγχάνεται ένα επιθυμητό αποτέλεσμα ή επιλύεται

ένα συγκεκριμένο πρόβλημα.

• Ο όρος αυτός χρησιμοποιείται, για να δηλώσει ένα

συγκεκριμένο σύνολο βημάτων-ενεργειών για την

επίλυση προβλημάτων

Κριτήρια Αλγορίθμων

• Είσοδος (input). Καμία, μία ή περισσότερες

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

• Έξοδος (output). Ο αλγόριθμος να δημιουργεί

τουλάχιστον μία ποσότητα ως αποτέλεσμα.

• Καθοριστικότητα (definiteness). Κάθε εντολή να

καθορίζεται χωρίς καμία αμφιβολία για τον τρόπο

εκτέλεσής της. Δηλαδή η μηχανή επεξεργασίας

δεδομένων που θα κλιθεί να τη διεκπεραιώσει να

καταλάβει τι ζητάμε να γίνει. Μπορούμε να το

συνδέσουμε με τη σωστή σύνταξη.

Κριτήρια Αλγορίθμων

• Περατότητα (finiteness). Ο αλγόριθμος να

τελειώνει μετά από πεπερασμένα βήματα

εκτέλεσης των εντολών του.

Κριτήρια Αλγορίθμων

• Αποτελεσματικότητα (effectiveness). Κάθε μεμονωμένη

εντολή του αλγορίθμου να είναι επαρκώς απλή, έτσι ώστε

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

και μολυβιού.

• Δεν αρκεί δηλαδή να είναι ορισμένη (κριτήριο 3), αλλά

πρέπει να είναι και εκτελέσιμη.

• Η αποτελεσματικότητα έχει να κάνει με την

εκτελεσιμότητα. Αν εκτελείται μια σαφώς ορισμένη

εντολή. Για παράδειγμα στην εντολή x=1/y όπου ψ=0, το

πρόγραμμα καταλαβαίνει τι πρέπει να κάνει, αλλά δεν

μπορεί να το εκτελέσει. Άρα η εντολή είναι μη

αποτελεσματική γιατί δεν παράγει αποτέλεσμα.

Η εξίσωση των Αλγορίθμων

• Από τον Niklaus Wirth (που παρουσίασε

την πρώτη δομημένη γλώσσα προ-

γραμματισμού, την Pascal) διατυπώθηκε το

1976 η εξής εξίσωση:

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

Προγράμματα

Η εξίσωση των Αλγορίθμων

• Δηλώνει ότι οι αλγόριθμοι συνυφασμένοι

με τις απαραίτητες δομές σε μία

αδιάσπαστη ενότητα αποτελούν τη βάση

κάθε προγράμματος, ουσιαστικά δηλαδή τη

βάση κάθε εφαρμογής.

• Η ανάλυση των αλγορίθμων μπορεί να

διεκπεραιωθεί μόνο έχοντας στο υπόβαθρο

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

συγκεκριμένες δομές δεδομένων.

Δομές Δεδομένων

• Ένα σύνολο αποθηκευμένων δεδομένων

που υφίστανται επεξεργασία από ένα

σύνολο λειτουργιών

• Στατικές Δομές Δεδομένων

• Δυναμικές Δομές Δεδομένων

Στατικές δομές δεδομένων

• Το μέγεθος της μνήμης που απαιτείται

καθορίζεται από την αρχή του

προγραμματισμού και όχι κατά την

εκτέλεση του προγράμματος

• Στις στατικές δομές δεδομένων αφού

γνωρίζουμε εκ των προτέρων το μέγεθός

τους, τα στοιχεία αποθηκεύονται σε

συνεχόμενες θέσεις μνήμης

Δυναμικές δομές δεδομένων

• Δεν έχουν σταθερό μέγεθος

• Ο αριθμός των κόμβων τους αυξομειώνεται

ανάλογα με το αν εισάγουμε ή διαγράφουμε

δεδομένα

• Δεν αποθηκεύονται σε συνεχόμενες θέσεις

μνήμης

Αλγόριθμοι και Προγράμματα

• Η έννοια του αλγόριθμου δεν ταυτίζεται με την

έννοια του προγράμματος.

• Το δεύτερο είναι μία υλοποίηση του πρώτου με τη

βοήθεια των εντολών και των εργαλείων ενός

προγραμματιστικού περιβάλλοντος.

• Σε σχέση με τα ανωτέρω κριτήρια, ένα

πρόγραμμα δεν ικανοποιεί αναγκαστικά το 4ο

κριτήριο της περατότητας (για παράδειγμα, ένα

λειτουργικό σύστημα εκτελεί διαρκώς έναν

ατέρμονα βρόχο περιμένοντας εντολές να

εισέλθουν στο σύστημα).

Τρόποι παρουσίασης των

αλγορίθμων • Με την περιγραφή του αλγόριθμου σε

φυσική γλώσσα (natural language)

• Με ελεύθερο κείμενο (free text). Μπορεί

να παραβιασθεί το τρίτο κριτήριο του

ορισμού.

• Με τη χρήση ενός διαγράμματος ροής

(flow chart).

• Με κωδικοποίηση (coding), δηλαδή με

ένα πρόγραμμα που, όταν εκτελεσθεί,

θα δώσει τα ίδια αποτελέσματα με τον

αλγόριθμο.

Γλώσσα μηχανής Το πρόγραμμα περιέχει εντολές που είναι σε δυαδική μορφή, άμεσα

κατανοητή από τον Η/Υ (όχι όμως από τον άνθρωπο). Δηλαδή, το πρόγραμμα

αποτελείται από ακολουθίες 0 και 1 π.χ.

10101000 00001010

11000000 00000001

……………………

Πλεονεκτήματα :

Ταχύτατη εκτέλεση των εντολών.

Δεν απαιτείται μεταφραστικό πρόγραμμα.

Μειονεκτήματα :

Το γράψιμο του προγράμματος είναι μία ιδιαίτερα επίπονη και χρονοβόρα

διαδικασία.

Απαιτείται βαθιά γνώση της αρχιτεκτονικής του Η/Υ.

Το πρόγραμμα «τρέχει» μόνο στο συγκεκριμένο τύπο του Η/Υ.

Γλώσσες χαμηλού επιπέδου ή

Συμβολικές γλώσσες Οι εντολές που είναι σε μορφή 0 και 1 αντικαθίστανται από μνημονικά (συμβολικά) ονόματα. Για παράδειγμα,

η εντολή 100001100 αντικαθίστανται από το ADD. Ένα δείγμα χρήσης θα ήταν :

INDEX =$01 {βάλε στην INDEX την τιμή 1}

ADD INDEX {πρόσθεσε την τιμή της INDEX στον συσσωρευτή}

LDA #10 {φόρτωσε στο συσσωρευτή την τιμή 10}

CLA {καθάρισε το συσσωρευτή}

………………..

Πλεονεκτήματα :

Ταχύτατη εκτέλεση των εντολών.

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

μηχανής.

Μειονεκτήματα :

Η αντιστοιχία 1 προς 1 με τις εντολές της γλώσσας παρέμενε.

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

αντίστοιχες δυαδικές. Το ειδικό αυτό πρόγραμμα ονομάζεται συμβολομεταφραστής (assembler).

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

Απαιτείται βαθιά γνώση της αρχιτεκτονικής του Η/Υ.

Το πρόγραμμα «τρέχει» μόνο στο συγκεκριμένο τύπο του Η/Υ.

Γλώσσες υψηλού επιπέδου Λέγονται έτσι διότι τα προγράμματα διατυπωμένα σε μία τέτοια γλώσσα είναι άμεσα κατανοητά από τον άνθρωπο

(αλλά όχι από τον Η/Υ) αφού χρησιμοποιείται μία γλώσσα που είναι αρκετά περιγραφική όπως μία φυσική γλώσσα.

Παράδειγμα,

INPUT “Δώσε την τελική τιμή’’ ; N

SUM = 0

For INDEX = 1 to N

SUM = SUM + INDEX

Next

Πλεονεκτήματα :

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

συμβολική γλώσσα.

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

τη γλώσσα μηχανής ή τη συμβολική γλώσσα.

Δεν απαιτείται σχεδόν καμία γνώση της αρχιτεκτονικής του Η/Υ. Συνεπώς, είναι ανεξάρτητα από την

αρχιτεκτονική του Η/Υ.

Το πρόγραμμα «τρέχει» σε όλους τους τύπους Η/Υ αρκεί να υπάρχει το κατάλληλο μεταφραστικό πρόγραμμα.

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

εκτελείται, με ελάχιστες μετατροπές, σε πολλούς τύπους Η/Υ.

Η εκμάθηση της γλώσσας είναι εύκολη.

Η διόρθωση λαθών και η συντήρηση των προγραμμάτων είναι ευκολότερη.

Μειονεκτήματα :

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

εντολές (δεν έχουμε εδώ αντιστοιχία 1 προς 1). Έχουμε δύο ειδών μεταφραστικά προγράμματα: τους

μεταγλωττιστές (compilers) και τους διερμηνείς (interpreters).

Το πρόγραμμα «τρέχει» πιο αργά σε σχέση με τα προγράμματα των συμβολικών γλωσσών ή της γλώσσας

μηχανής.

Μεταφραστικά Προγράμματα

• Ο προγραμματισμός είναι η διατύπωση του αλγορίθμου

σε μορφή κατανοητή από τον Η/Υ ώστε να τον εκτελέσει

(«τρέξει» όπως λέμε στην ορολογία της Πληροφορικής).

• Ένα πρόγραμμα που φτιάχνεται σε μία γλώσσα υψηλού

επιπέδου δεν είναι άμεσα κατανοητό από τον Η/Υ.

• Θα πρέπει να μεταφραστεί σε ισοδύναμο πρόγραμμα σε

γλώσσα μηχανής (δυαδική μορφή). Την διαδικασία

μετάφρασης την πραγματοποιούν τα μεταφραστικά

προγράμματα. Είναι δύο ειδών:

– Μεταγλωττιστές (Compilers)

– Διερμηνευτές (Interpreters)

Μεταφραστικά Προγράμματα

• Μεταγλωττιστής : Παίρνει, ως είσοδο, το πηγαίο

πρόγραμμα και αναλαμβάνει να το μεταφράσει εξ’

ολοκλήρου παράγοντας το αντικείμενο πρόγραμμα.

Μεταφραστικά Προγράμματα

• Διερμηνευτής : Παίρνει, ως είσοδο, μία-μία εντολή του

πηγαίου, την μεταφράζει και την εκτελεί αμέσως. Η

λειτουργία του μοιάζει με τον άνθρωπο-διερμηνέα που

μεταφράζει επί τόπου κάθε πρόταση.