Διάλεξη 2η: Αλγόριθμοι και Προγράμματαhy100/Lecture02.pdf ·...
Transcript of Διάλεξη 2η: Αλγόριθμοι και Προγράμματαhy100/Lecture02.pdf ·...
...
.
...........................
.
...
.
...
.
Διάλεξη 2η: Αλγόριθμοι και Προγράμματα
Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης
Εισαγωγή στην Επιστήμη Υπολογιστών
Βασίζεται σε διαφάνειες του Κ. Παναγιωτάκη
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 1 /14
...
.
...........................
.
...
.
...
.
Αλγόριθμοι
Αλγόριθμος είναι μια ακολουθία από βήματα ή ενέργειεςπου είναι:
▶ Καλώς (σαφώς) ορισμένα▶ Αποτελεσματικά (μπορούν να εκτελεστούν)▶ Πεπερασμένα (τερματισμός)▶ Συνήθως εφαρμόζονται πάνω σε δεδομένα
Παραδείγματα αλγορίθμων▶ Διαίρεση ακεραίων▶ Υπολογισμός τετραγωνικής ρίζας▶ Πολλαπλασιασμός ή αντιστροφή πινάκων▶ Αναζήτηση και ταξινόμηση▶ Εύρεση συντομότερης διαδρομής▶ Ανάλυση ιατρικών εικόνων
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 2 /14
...
.
...........................
.
...
.
...
.
Χαρακτηριστικά
Απαιτήσεις, Πρόβλημα, ΠροδιαγραφέςΣχεδίαση και ΟρθότηταΠολυπλοκότητα σε σχέση με το μέγεθος των δεδομένων(προαιρετικά για αυτό το μάθημα)
▶ Υπολογιστικό κόστος, χρόνος▶ Κόστος σε μνήμη, χώρος
Βελτιστοποίηση (προαιρετικά)Υλοποίηση
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 3 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα: Πρόσθεση N αριθμώνΑπαιτήσεις, Πρόβλημα, Προδιαγραφές
▶ Υπολογίστε το άθροισμαN∑i=1
i = 1 + 2 + 3 + . . .+N
Σχεδίαση και Ορθότητα▶ Ξεκινώ από το i = 1▶ Αρχικά, το άθροισμα “μέχρι τώρα” είναι Σ = 0▶ Για i = 1, 2, . . . ,N, προσθέτω i στο μέχρι τώρα Σ
Πολυπλοκότητα▶ Υπολογιστικό κόστος: 2N, ή O(N)▶ Κόστος σε μνήμη: 2, ή O(1)
Βελτιστοποίηση:Σ =
N(N+ 1)
2
▶ Υπολογιστικό κόστος: 3, ή O(1)▶ Κόστος σε μνήμη: 1, ή O(1)
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 4 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα: ΤαξινόμησηΑπαιτήσεις, Πρόβλημα, Προδιαγραφές
▶ Ταξινομήστε N φυσικούς αριθμούς, μικρότερους από 1000▶ a[1],a[2], . . .a[N] < 1000
Σχεδίαση και Ορθότητα▶ Βρίσκω το μικρότερο και τον βάζω πρώτο▶ Επαναλαμβάνω για τον επόμενο μικρότερο, κ.ο.κ.
Πιό τυπικάΓια κ = 1 έως NΓια λ = κ+ 1 έως NΑν a[λ] < a[κ]τότε άλλαξε θέση των a[κ],a[λ]
Πολυπλοκότητα▶ Υπολογιστικό κόστος:
T(N) = T(N− 1) +N⇒ T(N) = N(N+ 1)
2
ή O(N2)▶ Κόστος σε μνήμη: 2, ή O(1)
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 5 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα: Ταξινόμηση (2)Βελτιστοποίηση
ΒελτιστοποίησηΓια κ = 1 έως 1000θέτω h[κ] = 0
Για κ = 1 έως Nαυξάνω το h [a [κ]] κατά 1
Θέτω µ = 1Για κ = 1 έως 1000Για λ = 1 έως h[κ]Θέτω a[µ] = κΘέτω µ = µ+ 1
Πολυπλοκότητα▶ Υπολογιστικό κόστος: 1000 +N+ 1000 + 2N ή O(N)▶ Κόστος σε μνήμη: 1003, ή O(1)
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 6 /14
...
.
...........................
.
...
.
...
.
ΠρογραμματισμόςΠρόγραμμα: ένας αλγόριθμος σε συγκεκριμένη τυπικήγλώσσαΓλώσσα μηχανής: η γλώσσα που ερμηνεύει το hardware,μόνο λογικά 0 και 1 (ή οι αντίστοιχες τάσεις στοκύκλωμα)Επίπεδα γλωσσών προγραμματισμού
▶ Χαμηλού επιπέδου, κοντά στη γλώσσα μηχανής▶ Μεσαίου επιπέδου▶ Υψηλού επιπέδου, κοντά στα μαθηματικά (ή τηνκαθομιλουμένη)
Η επιλογή γλώσσας προγραμματισμού εξαρτάται από τηνεφαρμογήΣυνήθως:
▶ Χαμηλό επίπεδο ⇒ γρήγορο πρόγραμμα▶ Υψηλό επίπεδο ⇒ εύκολος προγραμματισμός, λιγότεραλάθη
▶ Πολύ βασικό: η ικανότητα και εμπειρία τουπρογραμματιστή
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 7 /14
...
.
...........................
.
...
.
...
.
Γλώσσες προγραμματισμούΑνάλογα με τον τρόπο περιγραφής του αλγορίθμου
▶ Προστακτικές (imperative): C, Pascal, Fortran⋆ Παραδοσιακός τρόπος προγραμματισμού⋆ Το πρόγραμμα είναι ακολουθία εντολών και ορισμός νέωνεντολών (ρουτίνες)
▶ Συναρτησιακές (functional): ML, Haskel, Lisp⋆ Μαθηματική περιγραφή υπολογισμών⋆ Το πρόγραμμα είναι ορισμοί μαθηματικών συναρτήσεων
▶ Δηλωτικές (declarative): Prolog, XML⋆ Δηλώσεις και ορισμοί⋆ Το πρόγραμμα είναι η λεπτομερής περιγραφή τουαποτελέσματος
Ανάλογα με τον τρόπο οργάνωσης του κώδικα▶ Διαδικαστικές (procedural): C, Pascal▶ Αντικειμενοστραφείς (Object-oriented): C++, Java
Ανάλογα με το χώρο των προβλημάτων που λύνουν▶ Παράλληλες, κατανεμημένες (parallel, distributed): CML,Erlang
▶ Διαδικτυακές: PHP, Javascript▶ . . .
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 8 /14
...
.
...........................
.
...
.
...
.
Προγράμματα σε C
Εντολές και δεδομέναΕντολές
▶ Μια σειρά από βασικές πράξεις, εντολές στον επεξεργαστή▶ Αποθηκεύονται στη μνήμη του υπολογιστή
Δεδομένα▶ Γράφονται και διαβάζονται από εντολές▶ Αποθηκεύονται στη μνήμη του υπολογιστή
Οι εντολές πρέπει να έχουν μια λογική αλληλουχίαΝα ακολουθούν συγκεκριμένα βήματαΑλγόριθμοι . . .
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 9 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα
Το πρώτο C πρόγραμμα
hello.c
#include <stdio.h>int main(){printf(”Hello, world!\n”);return 0;
}
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 10 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα
Το πρώτο C πρόγραμμα
hello.c
#include <stdio.h>int main(){printf(”Hello, world!\n”);return 0;
}
Βιβλιοθήκη Input/Output:χρειάζεται για την printf()
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 10 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα
Το πρώτο C πρόγραμμα
hello.c
#include <stdio.h>int main(){printf(”Hello, world!\n”);return 0;
}
Τύπος συνάρτησης:η main επιστρέφει ακέραιο
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 10 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα
Το πρώτο C πρόγραμμα
hello.c
#include <stdio.h>int main(){printf(”Hello, world!\n”);return 0;
}
Σε όλα τα προγράμματα C, ηεκτέλεση ξεκινάει από τη
συνάρτηση main
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 10 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα
Το πρώτο C πρόγραμμα
hello.c
#include <stdio.h>int main(){printf(”Hello, world!\n”);return 0;
}
Συνάρτηση εκτύπωσης:γράφει Hello, world! στηνοθόνη και πηγαίνει στην
επόμενη γραμμή
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 10 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα
Το πρώτο C πρόγραμμα
hello.c
#include <stdio.h>int main(){printf(”Hello, world!\n”);return 0;
}
Κάθε εντολή τελειώνει μεsemicolon “;”
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 10 /14
...
.
...........................
.
...
.
...
.
Παράδειγμα
Το πρώτο C πρόγραμμα
hello.c
#include <stdio.h>int main(){printf(”Hello, world!\n”);return 0;
}
Η συνάρτηση επιστρέφει 0
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 10 /14
...
.
...........................
.
...
.
...
.
Δομή προγράμματος
Στη C το πρόγραμμα είναι μια λίστα από συναρτήσειςmax.c
int max(int x, int y){int z;
if (x < y){z = y;
} else {z = x;
}return z;
}
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 11 /14
...
.
...........................
.
...
.
...
.
Δομή προγράμματος
Στη C το πρόγραμμα είναι μια λίστα από συναρτήσειςmax.c
int max(int x, int y){int z;
if (x < y){z = y;
} else {z = x;
}return z;
}
Όρισμα συνάρτησης: οι τιμέςτου x και του y καθορίζονταιόταν καλούμε τη συνάρτηση
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 11 /14
...
.
...........................
.
...
.
...
.
Δομή προγράμματος
Στη C το πρόγραμμα είναι μια λίστα από συναρτήσειςmax.c
int max(int x, int y){int z;
if (x < y){z = y;
} else {z = x;
}return z;
}
Δήλωση τοπικής μεταβλητής:θα χρειαστούμε τη z για να
αποθηκεύσουμε τοαποτέλεσμα
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 11 /14
...
.
...........................
.
...
.
...
.
Δομή προγράμματος
Στη C το πρόγραμμα είναι μια λίστα από συναρτήσειςmax.c
int max(int x, int y){int z;
if (x < y){z = y;
} else {z = x;
}return z;
}
Η εντολή if ελέγχει μιασυνθήκη
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 11 /14
...
.
...........................
.
...
.
...
.
Δομή προγράμματος
Στη C το πρόγραμμα είναι μια λίστα από συναρτήσειςmax.c
int max(int x, int y){int z;
if (x < y){z = y;
} else {z = x;
}return z;
}
Συνθήκη: είναι το xμικρότερο από το y;
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 11 /14
...
.
...........................
.
...
.
...
.
Δομή προγράμματος
Στη C το πρόγραμμα είναι μια λίστα από συναρτήσειςmax.c
int max(int x, int y){int z;
if (x < y){z = y;
} else {z = x;
}return z;
}
Αν ισχύει η συνθήκη,εκτελούνται οι εντολές του
πρώτου block
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 11 /14
...
.
...........................
.
...
.
...
.
Δομή προγράμματος
Στη C το πρόγραμμα είναι μια λίστα από συναρτήσειςmax.c
int max(int x, int y){int z;
if (x < y){z = y;
} else {z = x;
}return z;
}
Αν δεν ισχύει η συνθήκη,εκτελούνται οι εντολές του
else block
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 11 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
π.χ. Bubble Sort
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
π.χ. bubblesort.c
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
π.χ. bubblesort.o
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
π.χ. bubblesort.exe
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
Στο LinuxCompile & Link:$ gcc -Wall -g bubblesort.c -o bubblesortExecute:$ ./bubblesort
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
Συντακτικά λάθη
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
Συντακτικά λάθη
Λάθη συμβόλων
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
Συντακτικά λάθη
Λάθη συμβόλων
Run-time λάθη
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Δημιουργία προγράμματος
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Compiler
Ενδιάμεσος κώδικας
Linker
Τελικό εκτελέσιμο
Συντακτικά λάθη
Λάθη συμβόλων
Run-time λάθη
Λογικά λάθη
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 12 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
π.χ. Bubble Sort
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Προγραμματιστής
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
π.χ. bubblesort.c
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Προγραμματιστής
Γλώσσα προγραμματισμού
Interpreter
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διερμηνευόμενες Γλώσσες
Αλγόριθμος
Εκτελέσιμο
Προγραμματιστής
Γλώσσα προγραμματισμού
Interpreter
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 13 /14
...
.
...........................
.
...
.
...
.
Διαδικασία εκτέλεσης
Φόρτωμα του κώδικα στη μνήμηΔέσμευση χώρου στη μνήμη για τις καθολικέςμεταβλητέςΕκτέλεση της συνάρτησης main()
Οι τοπικές μεταβλητές;▶ On-the-fly: Κάθε συνάρτηση δεσμεύει όση μνήμηχρειάζεται όταν αρχίζει
▶ Τελειώνοντας, απελευθερώνει ξανά τη μνήμη των τοπικώνμεταβλητών
Πρατικάκης (CSD) Αλγόριθμοι και Προγράμματα CS100, 2019-2020 14 /14