1) Διαίρει και Βασίλευε
1.1) Ο αλγόριθμος MergeSort (Ταξινόμηση με Συγχώνευση)
1.2) Ο αλγόριθμος QuickSort (Γρήγορη Ταξινόμηση)
1.3) Ο αλγόριθμος QuickSelect (Γρήγορη Επιλογή)
1.4) Ο αλγόριθμος Strassen για τον πολλαπλασιασμό πινάκων
Ασκήσεις
1) Απληστοι Αλγόριθμοι
1.1) Συντομότερο Μονοπάτι σε Γράφο
1.1.1) Ο αλγόριθμος του Dijkstra
1.2) Ελάχιστο Συνδετικό Δένδρο
1.2.1) Ο αλγόριθμος του Prim
1.2.2) Ο αλγόριθμος του Kruskal
1.3) Ελαχιστοποίηση Νομισμάτων με Ρέστα
Εφαρμογές
1) Επιστροφή χρηματικού ποσού για ρέστα
2) Άπληστος Αλγόριθμος για Χρωματισμό Γραφήματος
1) Εισαγωγή
1.1) Είδη Προβλημάτων
1.2) Μοντέλα Υπολογισμού
2) Το πρόβλημα της ικανοποιησιμότητας - SAT
2.1) Διατυπωση του προβλήματος
2.2) To SAT λύνεται σε ντετερμιιστικό εκθετικό χρόνο.
2.3) To SAT λύνεται σε ντετερμινιστικό πολυωνυμικό χρόνο?
2.4) Το SAT λύνεται σε μη ντετερμινιστικό πολυωνυμικό χρόνο.
2.5) Σύνοψη για το πρόβλημα SAT
3) Θεωρία Πολυπλοκότητας
3.1) Η κλάση P
3.2) Η κλάση NP
3.3) Η κλάση EXP
3.4) P ⊆푵NP푷⊆퐄EXP퐗퐏
3.5) NP-πληρότητα
4) NP-πληρότητα
4.1) Αποδείξεις NP-πληρότητας
4.2) Ιδιότητες NP-Complete προβλημάτων
4.3) Το ανοικτό πρόβλημα P=NP
4.4) Η κλάση NP-Complete
4.5) Ιεραρχία κλάσεων αν P ≠ NP푷
4.6) Ιεραρχία κλάσεων αν P = NP푷
Ασκήσεις
1) Η αναδρομή Τ(n)=aT(n-b)+c
1.1) Επίλυση με την Μέθοδο της Επανάληψης
2) Η αναδρομή Τ(n)=T(n-1)+f(n)
2.1) Επίλυση με την Μέθοδο της Επανάληψης
3) Η αναδρομή T(n)=T(n/a)+T(n/b)+f(n)
3.1) Επίλυση με τη Μέθοδο των Φραγμάτων
3.2) Επίλυση με το Δένδρο Αναδρομής
3.3) Επίλυση με τη Δραστηριότητα 3.6
Ασκήσεις
1) ΑΣΥΜΠΤΩΤΙΚΟΙ ΣΥΜΒΟΛΙΣΜΟΙ
1.1) Ο ασυμπτωτικός συμβολισμός ο
1.2) Ο ασυμπτωτικός συμβολισμός Ο
1.3) Ο ασυμπτωτικός συμβολισμός Θ
1.4) Ο ασυμπτωτικός συμβολισμός Ω
1.5) Ο ασυμπτωτικός συμβολισμός ω
2) ΧΡΗΣΗ ΟΡΙΩΝ ΓΙΑ ΤΗΝ ΑΠΟΔΕΙΞΗ ΑΣΥΜΠΤΩΤΙΚΩΝ ΣΥΜΒΟΛΙΣΜΩΝ
3) ΛΗΜΜΑΤΑ ΣΤΟΥΣ ΑΣΥΜΠΤΩΤΙΚΟΥΣ ΣΥΜΒΟΛΙΣΜΟΥΣ
Ασκήσεις
1) Διαίρει και Βασίλευε
1.1) Ο αλγόριθμος MergeSort (Ταξινόμηση με Συγχώνευση)
1.2) Ο αλγόριθμος QuickSort (Γρήγορη Ταξινόμηση)
1.3) Ο αλγόριθμος QuickSelect (Γρήγορη Επιλογή)
1.4) Ο αλγόριθμος Strassen για τον πολλαπλασιασμό πινάκων
Ασκήσεις
1) Απληστοι Αλγόριθμοι
1.1) Συντομότερο Μονοπάτι σε Γράφο
1.1.1) Ο αλγόριθμος του Dijkstra
1.2) Ελάχιστο Συνδετικό Δένδρο
1.2.1) Ο αλγόριθμος του Prim
1.2.2) Ο αλγόριθμος του Kruskal
1.3) Ελαχιστοποίηση Νομισμάτων με Ρέστα
Εφαρμογές
1) Επιστροφή χρηματικού ποσού για ρέστα
2) Άπληστος Αλγόριθμος για Χρωματισμό Γραφήματος
1) Εισαγωγή
1.1) Είδη Προβλημάτων
1.2) Μοντέλα Υπολογισμού
2) Το πρόβλημα της ικανοποιησιμότητας - SAT
2.1) Διατυπωση του προβλήματος
2.2) To SAT λύνεται σε ντετερμιιστικό εκθετικό χρόνο.
2.3) To SAT λύνεται σε ντετερμινιστικό πολυωνυμικό χρόνο?
2.4) Το SAT λύνεται σε μη ντετερμινιστικό πολυωνυμικό χρόνο.
2.5) Σύνοψη για το πρόβλημα SAT
3) Θεωρία Πολυπλοκότητας
3.1) Η κλάση P
3.2) Η κλάση NP
3.3) Η κλάση EXP
3.4) P ⊆푵NP푷⊆퐄EXP퐗퐏
3.5) NP-πληρότητα
4) NP-πληρότητα
4.1) Αποδείξεις NP-πληρότητας
4.2) Ιδιότητες NP-Complete προβλημάτων
4.3) Το ανοικτό πρόβλημα P=NP
4.4) Η κλάση NP-Complete
4.5) Ιεραρχία κλάσεων αν P ≠ NP푷
4.6) Ιεραρχία κλάσεων αν P = NP푷
Ασκήσεις
1) Η αναδρομή Τ(n)=aT(n-b)+c
1.1) Επίλυση με την Μέθοδο της Επανάληψης
2) Η αναδρομή Τ(n)=T(n-1)+f(n)
2.1) Επίλυση με την Μέθοδο της Επανάληψης
3) Η αναδρομή T(n)=T(n/a)+T(n/b)+f(n)
3.1) Επίλυση με τη Μέθοδο των Φραγμάτων
3.2) Επίλυση με το Δένδρο Αναδρομής
3.3) Επίλυση με τη Δραστηριότητα 3.6
Ασκήσεις
1) ΑΣΥΜΠΤΩΤΙΚΟΙ ΣΥΜΒΟΛΙΣΜΟΙ
1.1) Ο ασυμπτωτικός συμβολισμός ο
1.2) Ο ασυμπτωτικός συμβολισμός Ο
1.3) Ο ασυμπτωτικός συμβολισμός Θ
1.4) Ο ασυμπτωτικός συμβολισμός Ω
1.5) Ο ασυμπτωτικός συμβολισμός ω
2) ΧΡΗΣΗ ΟΡΙΩΝ ΓΙΑ ΤΗΝ ΑΠΟΔΕΙΞΗ ΑΣΥΜΠΤΩΤΙΚΩΝ ΣΥΜΒΟΛΙΣΜΩΝ
3) ΛΗΜΜΑΤΑ ΣΤΟΥΣ ΑΣΥΜΠΤΩΤΙΚΟΥΣ ΣΥΜΒΟΛΙΣΜΟΥΣ
Ασκήσεις
1) Εισαγώγή
1.1) Σχήμα Απόδειξης Αναγωγής
1.2) Αναγωγές της Προτασιακής Λογικής
2) Το πρόβλημα INDEPENDENT-SET είναι NP-πλήρες
2.1) INDEPENDENT-SET ανήκει στο NP
2.2) 3SAT ανάγεται στο INDEPENDENT-SET
3) Το πρόβλημα CLIQUE είναι NP-πλήρες
3.1) CLIQUE ανήκει στο NP
3.2) INDEPENDENT-SET ανάγεται στο CLIQUE
4) Το πρόβλημα VERTEX-COVER είναι NP-πλήρες
4.1) VERTEX-COVER ανήκει στο NP
4.2) INDEPENDENT-SET ανάγεται στο VERTEX-COVER
5) Το πρόβλημα SUBGRAPH-ISOMORPHISM είναι NP-πλήρες
5.1) SUBGRAPH-ISOMORPHISM ανήκει στο NP
5.2) CLIQUE ανάγεται στο SUBGRAPH-ISOMORPHISM
Ασκήσεις
1) To (n/2)-CLIQUE είναι NP-πλήρες
2) Το KITE είναι NP-πλήρες
3) Το k-DENSEST-SUBGRAPH είναι NP-πλήρες
4) Το k-LIGHTEST-SUBGRAPH είναι NP-πλήρες
1) Κλειστότητα των Κανονικών Γλωσσών
1.1) Κλειστότητα στην Ένωση
1.2) Κλειστότηα στην Παράθεση
1.3) Κλειστότητα στο Αστέρι Kleene
1.4) Κλειστότητα στο Συμπλήρωμα
1.5) Κλειστότητα στην Τομή
1.5.1) Απλοποίηση ΝΠΑ
2) Επιπλέον Κατασκευές
2.1) Κατασκευή ΝΠΑ για την Ένωση
2.2) Κατασκευή ΝΠΑ για την Διαφορά
1) Εισαγωγικοί Ορισμοί
1.1) Μη Κατευθυνόνομενο Γράφημα
2) Ορισμοί στα Μη Κατευθυνόμενα Γραφήματα
2.1) Η Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
2.1) Η Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
2.2) Ερμηνείες στην Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
3) Ασκήσεις στην Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
3.1) Μετάφραση στα Ελληνικά
3.2) Μετάφραση στα Κατηγορηματικά
3.3) Εύρεση Αλήθειας Προτάσεων
3.4) Εύρεση Ερμηνείας που ικανοποιεί δεδομένη πρόταση
3.5) Συντομογραφίες στην Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων.
Ασκήσεις
1) Η αποδεικτική διαδικασία της αναγωγής
1.1) Σκεπτικό: Η γλώσσα Halting
1.2) Το Θεώρημα Αναγωγής
1.3) Σχήμα Απόδειξης Αναγωγής
2) Παραδείγματα Αναγωγών
2.1) Ο πιο συχνά χρησιμοποιούμενος μετασχημαισμός
2.2) Τερματίζει ένα πρόγραμμα με οποιαδήποτε είσοδο;
2.3) Τερματίζει ένα πρόγραμμα με είσοδο την κενή συμβολοσειρά;
2.4) Τερματίζει ένα πρόγραμμα με είσοδο έστω μία συμβολοσειρά;
2.5) Είναι δύο προγράμματα ισοδύναμα;
2.6) Το πρόγραμμα δεν τερματίζει για καμία είσοδο
3) Άλλες Μη Επιλύσιμες Γλώσσες
3.1) Αναγνώριση συνόλου γλώσσας
3.2) Ασκ.Αυτ.2.2 και Δραστ.2.2
3.3) Μη Επιλύσιμες Γλώσσες για Γλώσσες Χωρίς Συμφραζόμενα
1) Εισαγωγικοί Ορισμοί
1.1) Κατευθυνόνομενο Γράφημα
1.2) Μονοπάτια
1.3) Κύκλοι
1.4) Έσω και Έξω Βαθμός Κορυφής
1.5) Απομονωμένη Κορυφή
1.6) Πλήρες Γράφημα
2) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.1) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.2) Ερμηνείες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3) Ασκήσεις στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3.1) Μετάφραση στα Ελληνικά
3.2) Μετάφραση στα Κατηγορηματικά
3.3) Εύρεση Αλήθειας Προτάσεων
3.4) Εύρεση Ερμηνείας που ικανοποιεί δεδομένη πρόταση
3.5) Συντομογραφίες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
Ασκήσεις
1) Εισαγώγή
1.1) Σχήμα Απόδειξης Αναγωγής
1.2) Αναγωγές της Προτασιακής Λογικής
2) Το πρόβλημα PARTITION είναι NP-πλήρες
3) Το πρόβλημα KNAPSACK είναι NP-πλήρες
3.1) KNAPSACK ανήκει στο NP
3.2) PARTITION ανάγεται στο KNAPSACK
4) Το πρόβλημα 3PM είναι NP-πλήρες
5) Το πρόβλημα x3C είναι NP-πλήρες
5.1) X3C ανήκει στο NP
5.2) 3PM ανάγεται στο X3C
6) Το πρόβλημα EXACT-COVER είναι NP-πλήρες
7) Το πρόβλημα SET-COVER είναι NP-πλήρες
7.1) SET-COVER ανήκει στο NP
7.2) EXACT-COVER ανάγεται στο SET-COVER
1) Ορισμός Συνδετικού Δένδρου
1.1) Διάσχιση Πρώτα Κατά Πλάτος
1.2) Διάσχιση Πρώτα Κατά Βάθος
2) Ελάχιστο Συνδετικό Δένδρο
2.1) Ορισμός Ελάχιστου Συνδετικού Δένδρου
2.2) Ο αλγόριθμος του Prim
3) Σύνοψη για τους Αλγόριθμους
3.1) Συντομότερα Μονοπάτια
3.2) Συνδετικό Δένδρο
3.3) Ελάχιστο Συνδετικό Δένδρο
1) Εισαγώγή
1.1) Σχήμα Απόδειξης Αναγωγής
1.2) Αναγωγές της Προτασιακής Λογικής
2) Το πρόβλημα INDEPENDENT-SET είναι NP-πλήρες
2.1) INDEPENDENT-SET ανήκει στο NP
2.2) 3SAT ανάγεται στο INDEPENDENT-SET
3) Το πρόβλημα CLIQUE είναι NP-πλήρες
3.1) CLIQUE ανήκει στο NP
3.2) INDEPENDENT-SET ανάγεται στο CLIQUE
4) Το πρόβλημα VERTEX-COVER είναι NP-πλήρες
4.1) VERTEX-COVER ανήκει στο NP
4.2) INDEPENDENT-SET ανάγεται στο VERTEX-COVER
5) Το πρόβλημα SUBGRAPH-ISOMORPHISM είναι NP-πλήρες
5.1) SUBGRAPH-ISOMORPHISM ανήκει στο NP
5.2) CLIQUE ανάγεται στο SUBGRAPH-ISOMORPHISM
Ασκήσεις
1) To (n/2)-CLIQUE είναι NP-πλήρες
2) Το KITE είναι NP-πλήρες
3) Το k-DENSEST-SUBGRAPH είναι NP-πλήρες
4) Το k-LIGHTEST-SUBGRAPH είναι NP-πλήρες
1) Κλειστότητα των Κανονικών Γλωσσών
1.1) Κλειστότητα στην Ένωση
1.2) Κλειστότηα στην Παράθεση
1.3) Κλειστότητα στο Αστέρι Kleene
1.4) Κλειστότητα στο Συμπλήρωμα
1.5) Κλειστότητα στην Τομή
1.5.1) Απλοποίηση ΝΠΑ
2) Επιπλέον Κατασκευές
2.1) Κατασκευή ΝΠΑ για την Ένωση
2.2) Κατασκευή ΝΠΑ για την Διαφορά
1) Εισαγωγικοί Ορισμοί
1.1) Μη Κατευθυνόνομενο Γράφημα
2) Ορισμοί στα Μη Κατευθυνόμενα Γραφήματα
2.1) Η Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
2.1) Η Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
2.2) Ερμηνείες στην Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
3) Ασκήσεις στην Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων
3.1) Μετάφραση στα Ελληνικά
3.2) Μετάφραση στα Κατηγορηματικά
3.3) Εύρεση Αλήθειας Προτάσεων
3.4) Εύρεση Ερμηνείας που ικανοποιεί δεδομένη πρόταση
3.5) Συντομογραφίες στην Γλώσσα των Μη Κατευθυνόμενων Γραφημάτων.
Ασκήσεις
1) Η αποδεικτική διαδικασία της αναγωγής
1.1) Σκεπτικό: Η γλώσσα Halting
1.2) Το Θεώρημα Αναγωγής
1.3) Σχήμα Απόδειξης Αναγωγής
2) Παραδείγματα Αναγωγών
2.1) Ο πιο συχνά χρησιμοποιούμενος μετασχημαισμός
2.2) Τερματίζει ένα πρόγραμμα με οποιαδήποτε είσοδο;
2.3) Τερματίζει ένα πρόγραμμα με είσοδο την κενή συμβολοσειρά;
2.4) Τερματίζει ένα πρόγραμμα με είσοδο έστω μία συμβολοσειρά;
2.5) Είναι δύο προγράμματα ισοδύναμα;
2.6) Το πρόγραμμα δεν τερματίζει για καμία είσοδο
3) Άλλες Μη Επιλύσιμες Γλώσσες
3.1) Αναγνώριση συνόλου γλώσσας
3.2) Ασκ.Αυτ.2.2 και Δραστ.2.2
3.3) Μη Επιλύσιμες Γλώσσες για Γλώσσες Χωρίς Συμφραζόμενα
1) Εισαγωγικοί Ορισμοί
1.1) Κατευθυνόνομενο Γράφημα
1.2) Μονοπάτια
1.3) Κύκλοι
1.4) Έσω και Έξω Βαθμός Κορυφής
1.5) Απομονωμένη Κορυφή
1.6) Πλήρες Γράφημα
2) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.1) Η Γλώσσα των Κατευθυνόμενων Γραφημάτων
2.2) Ερμηνείες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3) Ασκήσεις στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
3.1) Μετάφραση στα Ελληνικά
3.2) Μετάφραση στα Κατηγορηματικά
3.3) Εύρεση Αλήθειας Προτάσεων
3.4) Εύρεση Ερμηνείας που ικανοποιεί δεδομένη πρόταση
3.5) Συντομογραφίες στην Γλώσσα των Κατευθυνόμενων Γραφημάτων
Ασκήσεις
1) Εισαγώγή
1.1) Σχήμα Απόδειξης Αναγωγής
1.2) Αναγωγές της Προτασιακής Λογικής
2) Το πρόβλημα PARTITION είναι NP-πλήρες
3) Το πρόβλημα KNAPSACK είναι NP-πλήρες
3.1) KNAPSACK ανήκει στο NP
3.2) PARTITION ανάγεται στο KNAPSACK
4) Το πρόβλημα 3PM είναι NP-πλήρες
5) Το πρόβλημα x3C είναι NP-πλήρες
5.1) X3C ανήκει στο NP
5.2) 3PM ανάγεται στο X3C
6) Το πρόβλημα EXACT-COVER είναι NP-πλήρες
7) Το πρόβλημα SET-COVER είναι NP-πλήρες
7.1) SET-COVER ανήκει στο NP
7.2) EXACT-COVER ανάγεται στο SET-COVER
1) Ορισμός Συνδετικού Δένδρου
1.1) Διάσχιση Πρώτα Κατά Πλάτος
1.2) Διάσχιση Πρώτα Κατά Βάθος
2) Ελάχιστο Συνδετικό Δένδρο
2.1) Ορισμός Ελάχιστου Συνδετικού Δένδρου
2.2) Ο αλγόριθμος του Prim
3) Σύνοψη για τους Αλγόριθμους
3.1) Συντομότερα Μονοπάτια
3.2) Συνδετικό Δένδρο
3.3) Ελάχιστο Συνδετικό Δένδρο
The document discusses algorithms and their analysis. It introduces common algorithms like selection sort and nested for loops. It also covers big O notation for analyzing algorithms and describes how selection sort runs in O(n^2) time. Procedures and pseudocode are provided as examples.
1) Πρόσθεση στα Συστήματα Αρίθμησης
1.1) Πρόσθεση στο Δεκαδικό Σύστημα
1.2) Πρόσθεση στο Δυαδικό Σύστημα
1.3) Πρόσθεση στο Οκταδικό Σύστημα
1.4) Πρόσθεση στο Δεκαεξαδικό Σύστημα
1.5) Πρόσθεση σε Άλλα Συστήματα
2) Αφαίρεση στα Συστήματα Αρίθμησης
2.1) Αφαίρεση στο Δεκαδικό Σύστημα
2.2) Αφαίρεση στο Δυαδικό Σύστημα
2.3) Αφαίρεση στο 8δικό και 16δικό Σύστημα
2.4) Αφαίρεση σε Άλλα Συστήματα
3) Πολλαπλασιασμός και Διαίρεση
3.1) Πολλαπλασιασμός στα Συστήματα Αρίθμησης
3.2) Διαίρεση στα Συστήματα Αρίθμησης
4) Αναπαράσταση Αριθμών στην Μνήμη του Υπολογιστή
4.1) Bits, Bytes και Απεικόνιση στη Μνήμη
4.2) Μήκος Λέξης
4.3) Αναπαράσταση Αρνητικών με Μέτρο
4.4) Αναπαράσταση Αρνητικών με Συμπλήρωμα ως Προς 1
4.5) Αναπαράσταση Αρνητικών με Συμπλήρωμα ως Προς 2
5) Αφαίρεση με Τεχνική Συμπληρώματος
5.1) Αφαίρεση στο Δυαδικό Σύστημα Αρίθμησης με συμπλήρωμα ως προς 2
5.2) Αφαίρεση σε Άλλα Σύστημα Αρίθμησης με την τεχνική συμπληρώματος
ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 3 - ΚΛΑΣΕΙΣ ΚΑΙ ΔΕΙΚΤΕΣ (4δ)Dimitris Psounis
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1.Διαχείριση Μνήμης
1.1.Στατική Δέσμευση Μνήμης
1.2.Στατική Δέσμευση Μνήμης για Συνήθεις Μεταβλητές
1.3.Στατική Δέσμευση Μνήμης για Αντικείμενα
2.Δυναμική Δέσμευση Μνήμης
2.1.Δείκτες (Υπενθύμιση από C)
2.2.Οι τελεστές new και delete
2.3.Δυναμική Δέσμευση για Συνήθεις Μεταβλητές
2.4.Δυναμική Δέσμευση για Αντικείμενα
2.5.Δυναμική Δέσμευση και Κατασκευαστές
3.Κλάσεις που περιέχουν δείκτες
3.1.Παράδειγμα κλάσης που περιέχει δείκτες
3.2.…και ένα πρόβλημα (χωρίς λύση για την ώρα)
4..Δυναμική Δέσμευση Μνήμης για Πίνακες
4.1.Μονοδιάστατοι πίνακες
4.2.Παράδειγμα δέσμευσης μνήμης για μονοδιάστατους πίνακες
4.3.Διδιάστατοι πίνακες
4.4.Παράδειγμα δέσμευσης μνήμης για διδιάστατους πίνακες
B. Ασκήσεις
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1.Διαχείριση Μνήμης
1.1.Στατική Δέσμευση Μνήμης
1.2.Στατική Δέσμευση Μνήμης για Συνήθεις Μεταβλητές
1.3.Στατική Δέσμευση Μνήμης για Αντικείμενα
2.Δυναμική Δέσμευση Μνήμης
2.1.Δείκτες (Υπενθύμιση από C)
2.2.Οι τελεστές new και delete
2.3.Δυναμική Δέσμευση για Συνήθεις Μεταβλητές
2.4.Δυναμική Δέσμευση για Αντικείμενα
2.5.Δυναμική Δέσμευση και Κατασκευαστές
3.Κλάσεις που περιέχουν δείκτες
3.1.Παράδειγμα κλάσης που περιέχει δείκτες
3.2.…και ένα πρόβλημα (χωρίς λύση για την ώρα)
4..Δυναμική Δέσμευση Μνήμης για Πίνακες
4.1.Μονοδιάστατοι πίνακες
4.2.Παράδειγμα δέσμευσης μνήμης για μονοδιάστατους πίνακες
4.3.Διδιάστατοι πίνακες
4.4.Παράδειγμα δέσμευσης μνήμης για διδιάστατους πίνακες
B. Ασκήσεις
Α. Θεωρία
1. Κλάσεις
1.1 Γενικά
1.2 Ορισμός Κλάσης
1.3 Δημόσια (public) στοιχεία της κλάσης
1.4 Ιδιωτικά (private) στοιχεία της κλάσης
1.5 Παράδειγμα (προδιαγραφές)
2 Περισσότερα για τις κλάσεις
2.1 Ορισμός Συναρτήσεων έξω από την Κλάση
2.2 Παρουσίαση Ιδιωτικών – Δημόσιων Μέλων μιας κλάσης
2.3 Χωρισμός σε Αρχεία
3. Ειδικές Μεθόδοι Κλάσεων
3.1 Γενικά
3.2 Κατασκευαστής (constructor)
3.3 Καταστροφέας (destructor)
3.4 Ελεγκτές Πρόσβασης (accessors)
B. Ασκήσεις
Η ΓΛΩΣΣΑ C++ - ΜΑΘΗΜΑ 2 - ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΚΛΑΣΕΙΣ (4 διαφ)Dimitris Psounis
Α. Θεωρία
1. Κλάσεις
1.1 Γενικά
1.2 Ορισμός Κλάσης
1.3 Δημόσια (public) στοιχεία της κλάσης
1.4 Ιδιωτικά (private) στοιχεία της κλάσης
1.5 Παράδειγμα (προδιαγραφές)
2 Περισσότερα για τις κλάσεις
2.1 Ορισμός Συναρτήσεων έξω από την Κλάση
2.2 Παρουσίαση Ιδιωτικών – Δημόσιων Μέλων μιας κλάσης
2.3 Χωρισμός σε Αρχεία
3. Ειδικές Μεθόδοι Κλάσεων
3.1 Γενικά
3.2 Κατασκευαστής (constructor)
3.3 Καταστροφέας (destructor)
3.4 Ελεγκτές Πρόσβασης (accessors)
B. Ασκήσεις
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1. Η Γλώσσα C++
1.1. Γενικά
1.2. Ιστορία – Εκδόσεις
1.3. Η αναγκαιότητα της C
1.4. Μεταγλωττιστές
2. Hello World!
2.1. Πηγαίος Κώδικας
2.2. Σχόλια
2.3. Βιβλιοθήκη iostream
2.4. main, block κώδικα, return
2.5 Είσοδος/Έξοδος
2.5.1. Έξοδος με την cout
2.5.2. Οδηγία using
2.5.3. Περισσότερα για την cout
2.5.4. Είσοδος με την cin
3. Στοιχεία της C
3.1. Μεταβλητές
3.2. Σταθερές
3.3. Τελεστές και η Δομή Ελέγχου
3.4. Δομές Επανάληψης
3.5. Συναρτήσεις
3.5.1. Πολυμορφισμός Συναρτήσεων
3.6. Πίνακες
3.7. Συμβολοσειρές
3.8. Δείκτες
B.Ασκήσεις
Εφαρμογή 1
Εφαρμογή 2
Εφαρμογή 3
C++ - ΜΑΘΗΜΑ 1 - ΕΙΣΑΓΩΓΗ ΚΑΙ ΣΧΕΣΗ ΜΕ ΤΗ C (4sl/p)Dimitris Psounis
ΠΕΡΙΕΧΟΜΕΝΑ ΜΑΘΗΜΑΤΟΣ
Α. Θεωρία
1. Η Γλώσσα C++
1.1. Γενικά
1.2. Ιστορία – Εκδόσεις
1.3. Η αναγκαιότητα της C
1.4. Μεταγλωττιστές
2. Hello World!
2.1. Πηγαίος Κώδικας
2.2. Σχόλια
2.3. Βιβλιοθήκη iostream
2.4. main, block κώδικα, return
2.5 Είσοδος/Έξοδος
2.5.1. Έξοδος με την cout
2.5.2. Οδηγία using
2.5.3. Περισσότερα για την cout
2.5.4. Είσοδος με την cin
3. Στοιχεία της C
3.1. Μεταβλητές
3.2. Σταθερές
3.3. Τελεστές και η Δομή Ελέγχου
3.4. Δομές Επανάληψης
3.5. Συναρτήσεις
3.5.1. Πολυμορφισμός Συναρτήσεων
3.6. Πίνακες
3.7. Συμβολοσειρές
3.8. Δείκτες
B.Ασκήσεις
Εφαρμογή 1
Εφαρμογή 2
Εφαρμογή 3
3. Α. Σκοπός του Μαθήµατος
Οι στόχοι του µαθήµατος είναι:
Επίπεδο Α
(-)
Επίπεδο Β
Η τεχνική σχεδίασης αλγόριθµων ∆υναµικός Προγραµµατισµός
3∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Η τεχνική σχεδίασης αλγόριθµων ∆υναµικός Προγραµµατισµός
Ο αλγόριθµος ∆.Π. για την ακολουθία Fibonacci
Επίπεδο Γ
Ο αλγόριθµος ∆.Π. για τον αλυσιδωτό πολλαπλασιασµό πινάκων
Ο αλγόριθµος ∆.Π. για την εύρεση της Μέγιστης Κοινής Υπακολουθίας
4. B. Θεωρία
Τεχνικές Σχεδίασης Αλγορίθµων
4∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Στην 2η ενότητα του µαθήµατος ασχολούµαστε µε τεχνικές που έχουν
αναπτυχθεί, ως γενικές µεθοδολογίες για την κατασκευή ενός αλγορίθµου:
Η τεχνική ∆ιαίρει και Βασίλευε (Μάθηµα 2.1)
Η τεχνική του ∆υναµικού Προγραµµατισµού (Μάθηµα 2.2)
Η κατασκευή των Άπληστων Αλγόριθµων (Μάθηµα 2.3)
Υπάρχουν ακόµη δεκάδες τεχνικές κατασκευής αλγορίθµων που είναι εκτός
ύλης.
5. B. Θεωρία
1. ∆υναµικός Προγραµµατισµός
5∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Όταν έχουµε ένα πρόβληµα που έχει τις εξής ιδιότητες:
Ιδιότητα των Βέλτιστων Επιµέρους ∆οµών: Οτί για να λύσουµε το πρόβληµα
αρκεί να υπολογίσουµε την βέλτιστη λύση σε κάποια υποπροβλήµατα,
συνήθως µε αναδροµή.
Μικρός Αριθµός Υποπροβληµάτων: Το πλήθος των υποπροβληµάτων πουΜικρός Αριθµός Υποπροβληµάτων: Το πλήθος των υποπροβληµάτων που
πρέπει να λύσουµε είναι µικρό (δηλαδή πολυωνυµικό ως προς το µέγεθος
του προβλήµατος)
Επικαλυπτόµενα Επιµέρους Προβλήµατα: Ότι λύνουµε πολλές φορές τα ίδια
υποπροβλήµατα µε αποτέλεσµα να χάνουµε χρόνο
Ο ∆υναµικός προγραµµατισµός είναι η λύση!
Αντί να λύνουµε από το µεγαλύτερο όλο και µικρότερα προβλήµατα
Ξεκινάµε από το µικρότερο και υπολογίζουµε όλο και µεγαλύτερα προβλήµατα!!
Αποθηκεύοντας τις ενδιάµεσες λύσεις για να τις αξιοποιήσουµε αργότερα!
6. B. Θεωρία
1. ∆υναµικός Προγραµµατισµός
6∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Για να κατασκευάσουµε έναν αλγόριθµο ∆υναµικού Προγραµµατισµού κάνουµε τα εξής
βήµατα:
1. Περιγράφουµε έναν αναδροµικό αλγόριθµο που λύνει το πρόβληµα
2. ∆ίνουµε την αναδροµική σχέση που υπολογίζει την βέλτιστη λύση (επίλυση από
πάνω προς τα κάτω)πάνω προς τα κάτω)
3. ∆ιαπιστώνουµε ότι ισχύουν οι τρεις συνθήκες για την κατασκευή του αλγορίθµου
δυναµικού προγραµµατισµού.
4. Με βάση την αναδροµική σχέση, κατασκευάζουµε την διαδικασία επίλυσης από
τα µικρά προβλήµατα σε όλο και µεγαλύτερα (επίλυση από κάτω προς τα πάνω)
5. ∆ίνουµε τον επαναληπτικό αλγόριθµο που κάνει την επίλυσή του προβλήµατος
6. Υπολογίζουµε την πολυπλοκότητα του επαναληπτικού αλγορίθµου
7. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci
7∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
ΠΡΟΒΛΗΜΑ: ∆ίνεται ένας φυσικός αριθµός n. Να υπολογιστεί ο n-ός
αριθµός Fibonacci.
Οι πρώτοι 15 αριθµοί Fibonacci:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
Και τυπικά η ακολουθία ορίζεται µέσω της αναδροµικής σχέσης:
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610
>+
==
=
−− 2,
21,1
21 nff
nήn
f
nn
n
8. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci (1.∆ιατύπωση Αναδροµικού Αλγορίθµου)
8∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ένας αναδροµικός αλγόριθµος που υλοποιεί την παραπάνω διαδικασία είναι
ο εξής:
procedure FibRec(n)
if n=1 or n=2 then
return 1
else
O αλγόριθµος έχει πολυπλοκότητα που περιγράφεται από την
αναδροµική σχέση:
a=FibRec(n-1)
b=FibRec(n-2)
c=a+b
return c
end if
end procedure
(1), 1 2
( )
( 1) ( 2) (1), 2
n ή n
T n
T n T n n
Θ = =
=
− + − +Θ >
9. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci (1.∆ιατύπωση Αναδροµικού Αλγορίθµου)
9∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Η αναδροµική σχέση T’(n)=T’(n-1)+T’(n-2)+1 µπορεί να προσεγγιστεί µέσω
φραγµάτων
ΥΠΟΛΟΓΙΣΜΟΣ ΑΝΩ ΦΡΑΓΜΑΤΟΣ
Ισχύει '( ) '( 1) '( 2) 1 '( 1) '( 1) 1T n T n T n T n T n= − + − + ≤ − + − +
1)1(2)( +−= nAnAΣυνεπώς λύνουµε την αναδροµή
άρα
1)1(2)( +−= nAnA
)2(
12
12
)1(2
122...2)0(2
...
122...2)(2
...
122)3(2
12)2(2
1)1(2)(
11
21
21
23
2
n
n
n
nn
kk
A
knA
nA
nA
nAnA
Θ=
−
−
+Θ=
=+++++=
==
=+++++−=
==
=+++−=
=++−=
=+−=
+−
−
−
)2()( n
nT Ο=
10. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci (1.∆ιατύπωση Αναδροµικού Αλγορίθµου)
10∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Η αναδροµική σχέση T’(n)=T’(n-1)+T’(n-2)+1 µπορεί να προσεγγιστεί µέσω
φραγµάτων
ΥΠΟΛΟΓΙΣΜΟΣ ΚΑΤΩ ΦΡΑΓΜΑΤΟΣ
Ισχύει '( ) '( 1) '( 2) 1 '( 2) '( 2) 1T n T n T n T n T n= − + − + ≥ − + − +
1)2(2)( +−= nKnKΣυνεπώς λύνουµε την αναδροµή
άρα
1)2(2)( +−= nKnK
)2(
12
12
)1(2
122...2)0(2
...
122...2)2(2
...
122)6(2
12)4(2
1)2(2)(
2/
11)2/(
21)2/(2/
21
23
2
n
n
n
nn
kk
K
knK
nK
nK
nKnK
Θ=
−
−
+Θ=
=+++++=
==
=+++++−=
==
=+++−=
=++−=
=+−=
+−
−
−
)2()( 2/n
nT Ω=
11. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci (1.∆ιατύπωση Αναδροµικού Αλγορίθµου)
11∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Η πολυπλοκότητα του αλγορίθµου είναι και
Είναι πολύ αργός αλγόριθµος!!
Λόγω του τρόπου εκτέλεσης της αναδροµικής διαδικασίας. Π.χ. για n=5:
)2()( 2/n
nT Ω= )2()( n
OnT =
)5(fib
)4(fib
)3(fib )2(fib
)2(fib )1(fib )1(fib )0(fib
)1(fib )0(fib
)3(fib
)2(fib )1(fib
)1(fib )0(fib
12. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci (3.Συνθήκες του ∆.Π.)
12∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Επαληθεύουµε ότι ισχύουν οι συνθήκες για την κατασκευή ενός αλγόριθµου
∆υναµικού Προγραµµατισµού:
ΕΠΑΛΗΘΕΥΣΗ ΤΩΝ Ι∆ΙΟΤΗΤΩΝ ΤΟΥ ∆.Π. για την ακολουθία Fibonacci:
Ιδιότητα των Βέλτιστων Επιµέρους ∆οµών: Πράγµατι για να υπολογίσουµε τη
λύση, υπολογίζουµε την λύση στα δύο αµέσως προηγούµενα υποπροβλήµα-
τα.τα.
Μικρός Αριθµός Υποπροβληµάτων: Το πλήθος των υποπροβληµάτων
πρέπει να λύσουµε είναι µικρό (συγκεκριµένα πρέπει να λύσουµε n
υποπροβλήµατα)
Επικαλυπτόµενα Επιµέρους Προβλήµατα: Πράγµατι αναγκαζόµαστε να
λύσουµε πολλές φορές τα ίδια υποπροβλήµατα, λόγω του τρόπου εκτέλεσης
της αναδροµικής διαδικασίας.
13. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci (4. ∆ιαδικασία Επίλυσης)
13∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ο δυναµικός προγραµµατισµός προτείνει:
Να λύσουµε το πρόβληµα «από κάτω προς τα πάνω», δηλαδή να
λύσουµε διαδοχικά τα υποπροβλήµατα:
Fib(1)
Fib(2)Fib(2)
…
Fib(n)
1 2 3 4 5 6 … n
1 1 … fib(n)
14. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
1. Η ακολουθία Fibonacci (5.Επαναληπτικος Αλγόριθµος και 6.Πολυπλοκότητα)
14∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ένας αλγόριθµος δυναµικού προγραµµατισµού που υλοποιεί την
παραπάνω διαδικασία είναι ο εξής:
procedure FibSeq(n)
A[1]=1
A[2]=1
for i=3 to n
Η πολυπλοκότητα του αλγορίθµου είναι Θ(n).
A[i]=A[i-1]+A[i-2]
end for
return A[n]
end procedure
15. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων
15∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
ΠΡΟΒΛΗΜΑ: ∆ίδονται οι πίνακες Α1,Α2,…,Αn όπου ο πίνακας Ai είναι
διάστασης di-1 x di. Με ποια σειρά θα γίνει ο πολλαπλασιασµός του
γινοµένου Α1 x Α2 x … x Αn
Στιγµιοτύπα:
A1 x A2 x A3 όπου Α1: 5x8, A2: 8x4, A3: 4x2
A1 x A2 x A3 x A4 όπου Α1: 10x6, A2: 6x3, A3: 3x8, A4: 8x2
Αλγόριθµοι:
Προφανής αλγόριθµος: Κάνε τις πράξεις από αριστερά προς τα δεξιά:
Πρώτα A1 x A2 = C1 έπειτα C1 x A3 κ.ο.κ. Οι πράξεις που γίνονται είναι:
d0d1d2 + d0d2d3 + …+ d0dn-1dn
Αλγόριθµος ∆υναµικού Προγραµµατισµού: Επέλεξε την σειρά µε την
οποία θα γίνουν οι πολλαπλασιασµοί των πινάκων. Επιτυγχάνεται
σηµατική βελτίωση στην πολυπλοκότητα.
16. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων
16∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ας δούµε γιατί έχει αξία ένας αλγόριθµος καθορισµού της σειράς των
πολλαπλασιασµών. Παράδειγµα:
A1 x A2 x A3 όπου Α1: 5x8, A2: 8x4, A3: 4x2 οι πράξεις µπορούν να
γίνουν:
(A1 x A2) x A3
Για τον υπολογισµό του A1 x A2: 5x8x4=160 πράξεις και προκύπτειΓια τον υπολογισµό του A1 x A2: 5x8x4=160 πράξεις και προκύπτει
πίνακας 5x4, έστω C
Για τον υπολογισµό του C x A3: 5x4x2=40 πράξεις και προκύπτει ο
πίνακας-γινόµενο 5 x 2
Σύνολο 200 πράξεις
A1 x (A2 x A3)
Για τον υπολογισµό του A2 x A3: 8x4x2=64 πράξεις και προκύπτει
πίνακας 8x2, έστω C
Για τον υπολογισµό του Α1 x C: 5x8x2=80 πράξεις και προκύπτει ο
πίνακας-γινόµενο 5 x 2
Σύνολο 144 πράξεις
Άρα µε άλλη σειρά γινοµένου, γλιτώνουµε πολλές πράξεις!
17. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων
17∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Για περισσότερους πίνακες υπάρχουν περισσότεροι τρόποι να κάνουµε τον
πολλαπλασιασµό, άρα και µεγαλύτερο όφελος στις πράξεις:
A1 x A2 x A3 x A4 µπορεί να παρενθετοποιηθεί ως εξής:
((A1 A2) A3) A4)
((A1A2)(A3A4))((A1A2)(A3A4))
(A1(A2A3))A4
A1((A2A3)A4)
A1(A2(A3A4))
Πως θα επιλέξουµε την καλύτερη παρενθετοποίηση χωρίς να χρειαστεί
να τις µελετήσουµε την κάθε µία ξεχωριστα;
18. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (1. Επίλυση µε αναδροµή)
18∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Για την επίλυση µε αναδροµή του προβλήµατος σκεφτόµαστε ως εξής:
Θεωρούµε ότι έχουµε µια διαδικασία Τ(i,j) που έχει ήδη οριστεί και δουλεύει
ορθά που όταν παίρνει ως όρισµα µια ακολουθία Ai…Aj παράγει την
βέλτιστη παρενθετοποίηση.
Έστω τώρα το γενικό στιγµιότυπο: A1A2…An-1An. Θα επιλέξουµε το καλύτερο
από τα γινόµενα:
1 2 n-1 n
από τα γινόµενα:
A1(A2…An)
(A1A2)(A3…An)
…
(A1…An-2)(An-1An)
(A1…An-1)An
Ο υπολογισµός της βέλτιστης παρενθετοποίησης για κάθε υποπρόβληµα
γίνεται µε κλήση της διαδικασίας T(i,j)
Οριακή Συνθήκη θα έχουµε όταν έχουµε µόνο έναν πίνακα (0 πράξεις)
19. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (2. Αναδροµική Σχέση)
19∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ο αλγόριθµος που υλοποιεί την παραπάνω διαδικασία µε αναδροµή είναι ο
ακόλουθος:
procedure MatMult(Ai,Ai+1,…,Aj)
if i=j then
return 0
else
Με βάση τα παραπάνω το βέλτιστο πλήθος των πολλαπλασιασµών της
ακολουθίας πινάκων Ai,…,Aj δίδεται από την αναδροµική σχέση:
for k=i to j-1
ck=MatMult(Ai,…,Ak)+MatMult(Ak+1,…,Aj)+di-1dkdj
end for
end if
return το ελάχιστο από ck για k=i,…,j-1
end procedure
{ }
<+++
=
=
−
<≤
jidddjkMkiM
ji
jiM
jki
jki
,],1[],[min
,0
],[
1
20. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (3.Συνθήκες του ∆.Π.)
20∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Επαληθεύουµε ότι ισχύουν οι συνθήκες για την κατασκευή ενός αλγόριθµου
∆υναµικού Προγραµµατισµού:
ΕΠΑΛΗΘΕΥΣΗ ΤΩΝ Ι∆ΙΟΤΗΤΩΝ ΤΟΥ ∆.Π. για τον Αλυσιδωτο Πολ/µό Πινάκων:
Ιδιότητα των Βέλτιστων Επιµέρους ∆οµών: Πράγµατι για να υπολογίσουµε τη
βελτιστη λύση, αρκεί να υπολογίσουµε την βέλτιστη λύση στα
υποπροβλήµατα που προκύπτουν από την αναδροµική σχέση.
Συνεπώς θα προσεγγίσουµε το πρόβληµα µε ∆υναµικό Προγραµµατισµό.
Θα ξεκινήσουµε από µικρά υποπροβλήµατα και θα λύνουµε ολοένα και
µεγαλύτερα µε σύνθεση των µικρότερων υποπροβληµάτων.
υποπροβλήµατα που προκύπτουν από την αναδροµική σχέση.
Μικρός Αριθµός Υποπροβληµάτων: Τα υποπροβλήµατα που καλούµαστε να
λύσουµε είναι το πολύ n(n+1)/2 (όλες οι τιµές µε 1≤i<j ≤n)
Επικαλυπτόµενα Επιµέρους Προβλήµατα: Πράγµατι αναγκαζόµαστε να
υπολογίσουµε πολλές φορές για παράδειγµα τα γινόµενα ΑiAi+1
21. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (4.Σειρά Επίλυσης Υποπροβ/των)
21∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Για να αποφασίσουµε µε ποια σειρά πρέπει να κάνουµε τις πράξεις
παρατηρούµε από ποια υποπροβλήµατα εξαρτάται η επίλυση κάθε
υποπροβλήµατος.
Π.χ. αν θεωρήσουµε ότι πολλπλασιάζουµε 5 πίνακες, τότε οι πράξεις πρέπι να
γίνουν µε την εξής σειρά:
1 2 3 4 5
γίνουν µε την εξής σειρά:
Πρέπει πρώτα να υπολογίσουµε γινόµενα 1 πίνακα, µετά 2 πινάκων, µετά 3
πινάκων κ.ο.κ.
Το κελί (i,j) θα αποθηκεύει το βέλτιστο πλήθος πράξεων που απαιτούνται στο για
τον πολ/σµό της ακολουθίας πινάκων Ai,Ai+1,…Aj
1 2 3 4 5
1
2
3
4
5
23. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (5. Επαναληπτικός Αλγόριθµος)
23∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ο αλγόριθµος που υλοποιεί την παραπάνω διαδικασία σειράς πράξεων είναι ο
ακόλουθος:
procedure DP_MatMult(A1,A2,…,An)
for i=1 to n
m[i,i]=0
end for
for p=2 to nfor p=2 to n
for i=2 to n-p+1
j=i+p-1
m[i,j]=+∞
for k=1 to j-1
q=M[i,k]+M[k+1,j]+d[i-1]*d[k]*d[j]
if (q>M[i,j]) then M[i,j]=q
end for
end for
end for
return M[1,n]
end procedure
24. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (6. Ανάλυση Πολυπλοκότητας)
24∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ακολουθεί ανάλυση πολυπλοκότητας:
• Το πρώτο for έχει πολυπλοκότητα Θ(n)
• Τα δύο επόµενα for υλοποιούν την διαδικασία υπολογισµού των κελιών
κατά διαγώνιους όπως είδαµε στην διαδικασία επίλυσης. Τα κελιά αυτά είναι
n2/2, άρα οι πράξεις αυτών των for, θα εκτελεστούν Θ(n2) φορές.
• Οι πράξεις που γίνονται σε κάθε επανάληψη είναι Ο(n)
• Συνεπώς η τελική πολυπλοκότητα είναι O(n3)
25. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (Αποµνηµόνευση Λύσης)
25∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ο αλγόριθµος που έχουµε κατασκευάσει:
Υπολογίζει την βέλτιστη λύση, αποθηκεύοντας την τιµή για την βέλτιστη
παρενθετοποιήση κάθε ακολουθίας πινάκων που αντιστοιχεί σε ένα
ορισµένο κελί του πίνακα.
∆ΕΝ επιστρέφει την βέλτιστη λύση, ούτε καταγράφει πως γίνεται η βέλτιστη
παρενθετοποιήση
Για το λόγο αυτό τροποποιούµε ελαφρά τον κώδικά µας, ώστε να κάνει και
αποµνηµόνευση της βέλτιστης λύσης κάθε κελιού.
26. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (Αποµνηµόνευση Λύσης)
26∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Τροποποιούµε τον αλγόριθµο ως εξής:
procedure DP_MatMult(A1,A2,…,An)
for i=1 to n
m[i,i]=0
end for
for p=2 to n
for i=2 to n-p+1
H εντολή που προστέθηκε συµβολίζει ότι το σηµείο του διαχωρισµού του
πολλαπλασιασµού πινάκων AiAi+1…Aj γίνεται στο σηµείο s[i,j]=k, δηλαδή ότι
η βέλτιστη παρνεθετοποίηση είναι η (AiAi+1..Αk)(Ak+1…Aj)
for i=2 to n-p+1
j=i+p-1
m[i,j]=+∞
for k=1 to j-1
q=M[i,k]+M[k+1,j]+d[i-1]*d[k]*d[j]
if (q>M[i,j]) then M[i,j]=q , s[i,j]=k
end for
end for
end for
return M[1,n]
end procedure
27. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
2. Αλυσιδωτός Πολλαπλασιασµός Πινάκων (Αποµνηµόνευση Λύσης)
27∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
∆εδοµένου αυτού του πίνακα, µπορούµε να παράγουµε την κατασκευή της
βέλτιστης λύσης µε την βέλτιστη παρενθετοποίηση, ως εξής:
procedure MatrixChainProduct(Ai,A2,…,Aj,s[1…n])
if i<j
X=MatrixChainProduct(Ai,…As[i,j],s)
Y=MatrixChainProduct(A ,…A ,s)
Όπου MatMult(X,Y) είναι ο γνωστός αλγόριθµος πολλαπλασιασµού πινάκων
που µελετήσαµε στο Μάθηµα 2.1
Y=MatrixChainProduct(As[i,j+1],…Aj,s)
C=MatMult(X,Y)
return C
else
return Ai
end if
end procedure
28. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία
28∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
ΠΡΟΒΛΗΜΑ: ∆ίδονται ακολουθίες χαρακτήρων X=x1x2x3…xn και
Y=y1y2…ym. Να βρεθεί η µέγιστη κοινή υπακολουθία τους.
Ορισµός: ∆εδοµένης µιας ακολουθίας X=x1x2…xn, υπακολουθία της X
ονοµάζεται οποιαδήποτε ακολουθία µπορεί να παραχθεί µε διαγραφή
κάποιων στοιχείων της.
Στιγµιοτύπα:Στιγµιοτύπα:
X=abcdf Y=dbdaf, τότε Z=bdf
X=aabaabb Y=abacba τότε Z=abab
Αλγόριθµοι:
Προφανής αλγόριθµος: Υπολογίζουµε όλες τις υπακολουθίες των δύο
και τις συγκρίνουµε ανά δύο. Πολυπλοκότητα O(2m2n(m+n))
Αλγόριθµος ∆υναµικού Προγραµµατισµού: Επιτυγχάνεται
πολυπλοκότητα Θ(mn).
29. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία (1. Επίλυση µε αναδροµή)
29∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Για την επίλυση µε αναδροµή του προβλήµατος σκεφτόµαστε ως εξής:
Θεωρούµε ότι έχουµε µια διαδικασία Τ(x1x2…xi, y1y2…yj) που έχει ήδη
οριστεί και δουλεύει ορθά που όταν παίρνει ως όρισµα δύο ακολουθίες Χ,Υ
παράγει την µεγαλύτερη υπακολουθία τους Ζ
Παίρνουµε τώρα το γενικό στιγµιότυπο: Χ=x1x2…xn-1xn και Υ=y1y2…yn-1ym
Θα επιλέξουµε το καλύτερο από τα ακόλουθα:
Αν ισχύει xn=ym τότε θέτουµε σαν µεγαλύτερη υπακολουθία την
T(x1…xn-1, y1…ym-1)xn
Αν δεν ισχύει xn=ym τότε θέτουµε σαν µεγαλύτερη υπακολουθία όποια
είναι µεγαλύτερη από τις:
T(x1…xn, y1…ym-1)
και
T(x1…xn-1, y1…ym)
30. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία (2. Αναδροµική Σχέση)
30∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Η αναδροµική σχέση που υπολογίζει την βέλτιστη λύση είναι:
≠>−−
=>+−−
==
=
ji
jin
yxjijicjic
yxjijic
jήi
f
και
και
0,},],1[],1,[max{
0,,1]1,1[
00,0
ji
31. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία (3.Συνθήκες του ∆.Π.)
31∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Επαληθεύουµε ότι ισχύουν οι συνθήκες για την κατασκευή ενός αλγόριθµου
∆υναµικού Προγραµµατισµού:
ΕΠΑΛΗΘΕΥΣΗ ΤΩΝ Ι∆ΙΟΤΗΤΩΝ ΤΟΥ ∆.Π. για την Μεγιστη Κοινή Υπακολουθία:
Ιδιότητα των Βέλτιστων Επιµέρους ∆οµών: Πράγµατι για να υπολογίσουµε τη
βελτιστη λύση, αρκεί να υπολογίσουµε την βέλτιστη λύση στα
υποπροβλήµατα που προκύπτουν από την αναδροµική σχέση.
Συνεπώς θα προσεγγίσουµε το πρόβληµα µε ∆υναµικό Προγραµµατισµό.
Θα ξεκινήσουµε από µικρά υποπροβλήµατα και θα λύνουµε ολοένα και
µεγαλύτερα µε σύνθεση των µικρότερων υποπροβληµάτων.
υποπροβλήµατα που προκύπτουν από την αναδροµική σχέση.
Μικρός Αριθµός Υποπροβληµάτων: Τα υποπροβλήµατα που καλούµαστε να
λύσουµε είναι το πολύ nm (όλες οι τιµές µε 1≤i,j ≤n)
Επικαλυπτόµενα Επιµέρους Προβλήµατα: Λόγω της λειτουργίας της
αναδροµής, υπολογίζονται πολλές φορές οι ίδιες υπακολουθίες.
32. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία (4.Σειρά Επίλυσης Υποπροβ/των)
32∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Για να αποφασίσουµε µε ποια σειρά πρέπει να κάνουµε τις πράξεις
παρατηρούµε από ποια υποπροβλήµατα εξαρτάται η επίλυση κάθε
υποπροβλήµατος.
Π.χ. αν θεωρήσουµε ότι έχουµε 2 ακολουθίες µε µήκος 6 και 5. Το στοιχείο
Μ[i,j] συµβολίζει ότι συγκρίνω τις ακολουθίες x x ….x και y y …yΜ[i,j] συµβολίζει ότι συγκρίνω τις ακολουθίες x1x2….xi και y1y2…yj
1 2 3 4 5
6
5
4
3
2
1
34. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία (5. Επαναληπτικός Αλγόριθµος)
34∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Ο αλγόριθµος που υλοποιεί την παραπάνω διαδικασία σειράς πράξεων είναι ο
ακόλουθος:
procedure LCS(Χ,Υ)
for i=1 to n : c[i,0]=0
for j=1 to m : c[0,j]=0
for i=1 to n
for j=1 to mfor j=1 to m
if xi=yj then
c[i,j]=c[i-1,j-1]+1
else
if (c[i-1,j]>c[i,j-1]) then
c[i,j]=c[i-1,j]
else
c[i,j]=c[i,j-1]
end if
end if
end for
end for
return c[n,m]
end procedure
35. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία (Κατασκευή Βέλτιστης Λύσης)
∆εδοµένου πίνακα C[M,N] που κατασκευάσαµε µπορούµε να εξάγουµε την
βέλτιστη λύση σε χρόνο Θ(m+n) µε την ακόλουθη αναδροµική ρουτίνα:
35∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
procedure printLCS(Χ[i],Υ[j])
if i>0 and j>0
if xi=yj then
printLCS(Χ[i-1],Y[j-1])
print(x[i])print(x[i])
else if c[i,j]=c[i-1,j] then
printLCS(X[i-1],Y[j])
else
printLCS(X[i],Y[j-1])
end if
end if
end procedure
37. Β. Θεωρία
1. ∆υναµικός Προγραµµατισµός
3. Μέγιστη Κοινή Υπακολουθία (6.Πολυπλοκότητα Αλγορίθµου∆Π)
37∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
Υπολογισµός Πολυπλοκότητας:
Οι πρώτες 2 for έχουν πολυπλοκότητα Θ(n)
Έπειτα για nm φορές γίνονται Θ(1) πράξεις. Συνεπώς η πολυπλοκότητα
είναι Θ(nm).
Συνεπώς η συνολική πολυπλοκότητα είναι Θ(n)+Θ(nm)=Θ(nm)
38. Γ. Ασκήσεις
Εφαρµογή 1
∆ίδεται η ακολουθία ακεραίων αριθµών που δηµιουργείται από την
X(n) = 4X(n-2) + 2 X(n-4), για n >3, και X(n) = 1, n=0,1,2,3
1. Σχεδιάστε έναν αναδροµικό αλγόριθµο που θα υπολογίζει τον n-οστό όρο
38∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
1. Σχεδιάστε έναν αναδροµικό αλγόριθµο που θα υπολογίζει τον n-οστό όρο
της ακολουθίας. Γράψτε την αναδροµική σχέση που δίνει τον χρόνο
εκτέλεσης του αλγόριθµου. Βρείτε συµβατά άνω και κάτω όρια για τον
χρόνο εκτέλεσης του αλγορίθµου (δηλαδή ακριβές όριο Θ).
2. Σχεδιάστε έναν αλγόριθµο δυναµικού προγραµµατισµού που λύνει το ίδιο
πρόβληµα Ποιος είναι τώρα ο χρόνος εκτέλεσης?
39. Γ. Ασκήσεις
Εφαρµογή 2
Έστω ένας πίνακας ακεραίων αριθµών Α που αποτελείται από m γραµµές και n στήλες.
Θεωρούµε ένα παιχνίδι όπου ξεκινώντας από οποιοδήποτε κελί της κάτω γραµµής του
πίνακα, προσπαθούµε να φτάσουµε σε κάποιο κελί της πάνω γραµµής του πίνακα
περνώντας από κελιά ελάχιστου συνολικού κόστους. Σαν κόστος Α(i,j) ενός κελιού (i,j)
θεωρούµε τον αριθµό που αναγράφεται στο συγκεκριµένο κελί. Από ένα κελί του πίνακα
µπορούµε να κινηθούµε είτε προς το κελί που βρίσκεται ακριβώς από πάνω του, είτε
39∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
µπορούµε να κινηθούµε είτε προς το κελί που βρίσκεται ακριβώς από πάνω του, είτε
διαγώνια αριστερά, είτε διαγώνια δεξιά.
Για παράδειγµα, στον πίνακα του πιο κάτω σχήµατος, από το κελί (2,2) µπορούµε να
κινηθούµε προς κάποιο από τα κελιά (3,1), (3,2) ή (3,3). Σηµειώνουµε ότι σαν γραµµή
µε αριθµό 1 θεωρείται η κάτω γραµµή του πίνακα.
Τα κελιά µε έντονη γραφή δείχνουν τη βέλτιστη διαδροµή στον συγκεκριµένο πίνακα,
συνολικού κόστους ίσου µε 5+2+3+6=16.
3 9 9 6 9
5 6 7 3 4
6 8 7 7 2
4 3 6 5 9
40. Γ. Ασκήσεις
Εφαρµογή 2
α) Να περιγράψετε µία λύση του πιο πάνω προβλήµατος µε τη βοήθεια του ∆υναµικού
Προγραµµατισµού.
(β) Να δώσετε τον αντίστοιχο αλγόριθµο (ψευδοκώδικα) υπολογισµού του ελάχιστου
κόστους µετάβασης από την πρώτη γραµµή του πίνακα προς την τελευταία.
(γ) Ποια η πολυπλοκότητα χρόνου και χώρου του αλγόριθµου αυτού; Θα µπορούσε να
εφαρµοστεί ισοδύναµος αλγόριθµος µε µικρότερη πολυπλοκότητα χώρου; Για το
40∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
εφαρµοστεί ισοδύναµος αλγόριθµος µε µικρότερη πολυπλοκότητα χώρου; Για το
τελευταίο ερώτηµα αρκεί να περιγράψετε τον τρόπο µείωσης της πολυπλοκότητας
χώρου, χωρίς να δώσετε ακριβή περιγραφή του νέου αλγόριθµου.
(δ) Να εφαρµόσετε τον αλγόριθµο που περιγράψατε στα προηγούµενα σκέλη στον πιο
κάτω πίνακα:
4 3 4
2 3 4
4 1 3
4 4 3
41. Γ. Ασκήσεις
Εφαρµογή 3
Οι διοργανωτές ερασιτεχνικού ποδηλατικού αγώνα θέλουν να σχεδιάσουν, για
ευνόητους λόγους µειωµένης φυσικής κατάστασης των συµµετεχόντων ερασιτεχνών
ποδηλάτων, την οδική διαδροµή µικρότερης συνολικής ανωφέρειας (ανηφορικής
κλίσεως). Ο χάρτης µε τη διαδροµή (άκυκλο κατευθυνόµενο γράφηµα) εµφανίζεται
παρακάτω, όπου κάθε δρόµος αναγράφει την ανωφέρεια του. Η αφετηρία του αγώνα
είναι η πόλη P0 και τέλος η πόλη P8.
41∆ηµήτρης Ψούνης, ΠΛΗ30, Μάθηµα 2.2: ∆υναµικός Προγραµµατισµός
είναι η πόλη P0 και τέλος η πόλη P8.
(1) Σχεδιάστε αλγόριθµο δυναµικού προγραµµατισµού που υπολογίζει την συνολική
ελάχιστη ανωφέρεια.
(2) Τρέξτε τον αλγόριθµο στο παράδειγµα του χάρτη.