ΔΥΝΑΜΙΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1
2 Αλληλεπικαλυπτόμενα Υποπροβλήματα Όπως η Διαίρεση και Κυριαρχία, ο Δυναμικός Προγραμματισμός συνδυάζει λύσεις σε υποπροβλήματα. Ο Δυναμικός Προγραμματισμός χρησιμοποιείται κυρίως όταν οι λύσεις των ίδιων υποπροβλημάτων χρειάζονται πολλές φορές.
ΜΕΤΡΩΝΤΑΣ ΡΕΣΤΑ 3
4 Μετρώντας Ρέστα Πρόβλημα : Εύρεση του ελάχιστου πλήθους νομισμάτων από ένα σετ νομισμάτων ώστε να φτάσουμε σε συγκεκριμένο ποσό. – Για 31 λεπτά : ή ( βέλτιστο ) Πώς το λύνουμε ;
5 Παράδειγμα Σετ Νομισμάτων Θα θεωρήσουμε το εξής σετ νομισμάτων : 1¢ 5¢ 10¢ 21¢ 25¢ Έστω ότι ο στόχος μας είναι τα 63¢
6 Μία Απλή Λύση Χρειαζόμαστε πάντα ένα νόμισμα 1¢, διαφορετικά δεν θα υπάρχει λύση για το 1 λεπτό. Για να κάνουμε K λεπτά : – Αν υπάρχει ένα νόμισμα των Κ λεπτών, τότε το ένα νόμισμα είναι το ελάχιστο – Διαφορετικά, για κάθε i < K, Εύρεση του ελάχιστου πλήθους νομισμάτων για i λεπτά Εύρεση του ελάχιστου πλήθους νομισμάτων για K – i λεπτά – Επιλογή του i που ελαχιστοποιεί το άθροισμα
7 Άλλη Αντίστοιχη Λύση Μειώνουμε το πρόβλημα αναδρομικά επιλέγοντας το 1 ο νόμισμα και έπειτα λύνοντας για το ποσό που απομένει Για 63¢: – Ένα 1¢ νόμισμα συν τη βέλτιστη λύση για 62¢ – Ένα 5¢ νόμισμα συν τη βέλτιστη λύση για 58¢ – Ένα 10¢ νόμισμα συν τη βέλτιστη λύση για 53¢ – Ένα 21¢ νόμισμα συν τη βέλτιστη λύση για 42¢ – Ένα 25¢ νόμισμα συν τη βέλτιστη λύση για 38¢ Επιλογή της βέλτιστης λύσης από τις 5 παραπάνω – Αντί για 62 αναδρομές έχουμε μόνο 5 – αλλά παραμένει ακριβό...
8 Δυναμικός Προγραμματισμός Ιδέα : Λύσε για 1 λεπτό, έπειτα για 2 λεπτά, έπειτα για 3 λεπτά κοκ., μέχρι το ποσό που επιθυμούμε. – Αποθήκευσε κάθε λύση σε έναν πίνακα ! Για κάθε νέο ποσό N, υπολόγισε όλα τα δυνατά ζεύγη προηγούμενων λύσεων που είναι ίσα με N – Παράδειγμα : για 13 λεπτά, Αρχικά λύνουμε για 1¢, 2¢, 3¢,..., 12¢ Έπειτα επιλέγουμε την καλύτερη λύση μεταξύ : – 1¢ + λύση για 12¢ – 5¢ + λύση για 8¢ – 10¢ + Λύση για 3¢ Πόσο χρόνο για τελικό ποσό Ν και # διαφορετικών νομισμάτων Κ ;
9 Σύγκριση με Διαίρεση και Κυριαρχία Στη Διαίρεση και Κυριαρχία ένα πρόβλημα διαιρείται σε υποπροβλήματα των οποίων η λύση συνδυάζεται για την λύση στο αρχικό πρόβλημα Είναι κυρίως αλγόριθμοι με φορά από επάνω προς τα κάτω (top-down) Ένα αλγόριθμος δυναμικού προγραμματισμού επιλύει μικρά προβλήματα τα οποία τα συνδυάζει για να βρει τη λύση σε μεγαλύτερα Μπορεί κανείς να την σκεφτεί σαν μία από κάτω προς τα επάνω διαδικασία
10 Η Αρχή της Βελτιστότητας Ο δυναμικός προγραμματισμός είναι μία τεχνική για εύρεση βέλτιστης λύσης Η αρχή της βελτιστότητας εφαρμόζεται αν η βέλτιστη λύση σε ένα πρόβλημα περιέχει βέλτιστες λύσεις σε όλα τα υποπροβλήματα Παράδειγμα : Πρόβλημα ψιλών για N λεπτά με το μικρότερο πλήθος νομισμάτων Είτε υπάρχει ένα νόμισμα των N λεπτών ή Το σύνολο των νομισμάτων για τη βέλτιστη λύση για N λεπτά διαιρείται σε δύο μη κενά σύνολα n 1 και n 2 Αν κάποιο από τα υποσύνολα n 1 ή n 2, μπορεί να γίνει με λιγότερα νομίσματα, τότε προφανώς και για N λεπτά μπορεί να γίνει με λιγότερα νομίσματα - άτοπο
11 Η αρχή της βελτιστότητας δεν λέει ότι : – Αν έχεις βέλτιστες λύσεις σε όλα τα υποπροβλήματα... –... τότε μπορούν να συνδυαστούν σε μία βέλτιστη λύση Παράδειγμα : – Η βέλτιστη λύση για 7¢ είναι 5¢+1¢+1¢, και – Η βέλτιστη λύση για 6¢ είναι 5¢+1¢, αλλά – Η βέλτιστη λύση για 13¢ δεν είναι 5¢+1¢+1¢+5¢+1¢ Η Αρχή της Βελτιστότητας Αλλά υπάρχει κάποιος τρόπος διαίρεσης των 13¢ σε υποσύνολα με βέλτιστες λύσεις (π.χ. 11¢ + 2¢) που δίνει βέλτιστη λύση για 13¢ Άρα η αρχή της βελτιστότητας ισχύει για αυτό το πρόβλημα
12 Η Αρχή της Βελτιστότητας Έστω k μία ενδιάμεση κορυφή σε ένα ελάχιστο από i σε j μονοπάτι i, a, b, …, k, l, m, …, j. Το μονοπάτι i, a, b, …, k θα πρέπει να είναι ελάχιστο από i σε k, και το μονοπάτι k, l, m, …, j θα πρέπει να είναι ελάχιστο από k σε j i ab k l m j
13 Παράδειγμα Αποτυχίας ΔΠ : Μακρύτερο Απλό Μονοπάτι Το μακρύτερο απλό μονοπάτι (χωρίς κύκλους) από το A στο D είναι το A B C D Όμως, το υπομονοπάτι A B δεν είναι το μακρύτερο μονοπάτι από το A στο B (το A C B είναι μακρύτερο) Η αρχή της βελτιστότητας δεν ικανοποιείται σε αυτό το πρόβλημα Άρα, το πρόβλημα αυτό δεν μπορεί να λυθεί με δυναμικό προγραμματισμό A CD B
ΔΡΟΜΟΛΟΓΗΣΗ ΕΡΓΑΣΙΩΝ ΜΕ ΒΑΡΗ 14
15 Δρομολόγηση Εργασιών με Βάρη Η εργασία j ξεκινά στην s j, τελειώνει στην f j, και έχει τιμή v j. Δύο εργασίες είναι συμβατές αν δεν επικαλύπτονται. Στόχος : εύρεση μεγίστου βάρους υποσύνολο συμβατών εργασιών. Χρόνος f g h e a b c d
16 Δρομολόγηση Εργασιών με Βάρη Βάζουμε σε σειρά τις εργασίες με βάση το χρόνο ολοκλήρωσης : f 1 f 2 ... f n. p ( j ) = μέγιστος δείκτης i < j έτσι ώστε η εργασία i να είναι συμβατή με j. π. χ. p (8) = 5, p (7) = 3, p (2) = 0. Χρόνος
17 Μία Δυαδική Επιλογή OPT(j) = τιμή της βέλτιστης λύσης στο πρόβλημα που αποτελείται από τις εργασίες 1, 2,..., j. – Περίπτωση 1: η OPT επιλέγει την εργασία j. Κέρδος v j Δεν μπορούμε να χρησιμοποιήσουμε τις ασύμβατες εργασίες { p(j)+1, p(j)+2,..., j– 1 } Βέλτιστη λύση για το εναπομείναν πρόβλημα 1, 2,..., p(j) – Περίπτωση 2 : η OPT δεν επιλέγει την εργασία j. Θα περιλαμβάνει τη βέλτιστη λύση στις υπόλοιπες εργασίες 1, 2,..., j-1 Βέλτιστο υποπρόβλημα
18 Είσοδος: n, s 1,…,s n, f 1,…,f n, v 1,…,v n Ταξινόμησε τις εργασίες με βάση το χρόνο ολοκλήρωσης f 1 f 2 ... f n. Υπολόγισε τα p(1), p(2), …, p(n) Υπολόγισε-OPT(j) { if (j = 0) return 0 else return max(v j +Compute-OPT(p(j)),Compute-OPT(j-1)) } Εξαντλητική Αναζήτηση
19 Εξαντλητική Αναζήτηση Ο αναδρομικός αλγόριθμος αποτυγχάνει μιας και πρέπει να επανα - υπολογίζει με ίδια υποπροβλήματα εκθετικός αλγόριθμος. Στην παρακάτω περίπτωση η πολυπλοκότητα χρόνου εκφράζεται από μία ακολουθία Fibonacci ( δηλαδή εκθετικό ) p(1) = 0, p(j) = j
20 Είσοδος: n, s 1,…,s n, f 1,…,f n, v 1,…,v n Ταξινόμησε τις εργασίες με βάση το χρόνο ολοκλήρωσης f 1 f 2 ... f n. Υπολόγισε τα p(1), p(2), …, p(n) for j = 1 to n M[j] = empty M[0] = 0 M-Compute-OPT(j) { if (M[j] is empty) M[j]=max(v j +M-Compute-OPT(p(j)), M-Compute-OPT(j-1)) return M[j] } Απομνημόνευση σε πίνακα Η Τεχνική της Απομνημόνευσης (Memoization) Αποθήκευση του αποτελέσματος κάθε υποπροβλήματος. Αναζήτηση όταν τα χρειαζόμαστε.
21 Χρόνος Εκτέλεσης Η χρονική πολυπλοκότητα είναι O(nlogn). – Ταξινόμηση ως προς χρόνο ολοκλήρωσης : O(nlogn) – Υπολογισμός p( ) : O(nlogn) με ταξινόμηση ως προς το χρόνο έναρξης. – M-Compute-OPT(j): κάθε κλήση απαιτεί O(1) χρόνο και : 1.είτε επιστρέφει την υπάρχουσα τιμή M[j] 2.είτε γεμίζει ένα κελί του M[j] και εκτελεί 2 αναδρομικές κλήσεις – Μετρική προόδου : = # γεμάτων κελιών του M[]. Αρχικά = 0, ενώ ισχύει πάντα n Αυξάνει την κατά 1 το πολύ 2 n αναδρομικές κλήσεις. – Ο χρόνος για την M-Compute-OPT(n) είναι O(n). ▪
22 Εύρεση Λύσης ;;; Βρίσκουμε την τιμή αλλά τι γίνεται την ίδια τη λύση ; Κάνουμε μία προεπεξεργασία. – # αναδρομικών κλήσεων n O ( n ) R un M-Compute-Opt(n) Run Find-Solution(n) Find-Solution(j) { if (j = 0) output nothing else if (v j + M[p(j)] > M[j-1]) print j Find-Solution(p(j)) else Find-Solution(j-1) }
23 Δυναμικός Προγραμματισμός : Επαναληπτικά Ξεδιπλώνουμε την αναδρομή. Είσοδος: n, s 1,…,s n, f 1,…,f n, v 1,…,v n Ταξινόμησε τις εργασίες με βάση το χρόνο ολοκλήρωσης f 1 f 2 ... f n Υπολόγισε τα p(1), p(2), …, p(n) Iterative-Compute-OPT { M[0] = 0 for j = 1 to n M[j] = max(v j + M[p(j)], M[j-1]) }
Πάλι Πίσω Στα Νομίσματα 24
Αλγόριθμος Υπολογισμού Τιμής 25
Ποια είναι τα Νομίσματα ; 26
Παράδειγμα ποσό # νομ. - Νόμισμα που χρησιμοποιήθηκε Ποια είναι τα νομίσματα;
1. ΜΕΤΑΒΑΤΙΚΗ ΚΛΕΙΣΤΟΤΗΤΑ 2. ΜΙΚΡΟΤΕΡΑ ΜΟΝΟΠΑΤΙΑ ΜΕΤΑΞΥ ΟΛΩΝ ΤΩΝ ΖΕΥΓΩΝ 28
29 Αλγόριθμος Warshall Υπολογίζει τη μεταβατική κλειστότητα μιας σχέσης, δηλ. όλα τα μονοπάτια ενός κατευθυνόμενου γράφου Παράδειγμα:
30 Κύρια ιδέα: υπάρχει ένα μονοπάτι μεταξύ των κορυφών i και j αν υπάρχει ακμή από την i στην j, υπάρχει μονοπάτι από την i στην j μέσω της κορυφής 1; υπάρχει μονοπάτι από την i στην j μέσω των κορυφών 1 ή/και 2;... υπάρχει μονοπάτι από την i στην j μέσω οποιασδήποτε από τις άλλες κορυφές R R R R R Αλγόριθμος Warshall – Ιδέα
31 Στο k-οστό στάδιο βρίσκουμε αν υπάρχει ένα μονοπάτι μεταξύ των κορυφών i, j χρησιμοποιώντας μόνο τις κορυφές 1,…,k i j k k-οστό στάδιο Αλγόριθμος Warshall – Σχέση
Παράδειγμα R (0) = R (1) = R (2) = R (3) = R (4) = 32
33 Algorithm Warshall(A[1..n,1..n]) R (0) A for k 1 to n do for i 1 to n do for j 1 to n do R (k) [i,j] R (k-1) [i,j] or R (k-1) [i,k] and R (k-1) [k,j] return R (k) Χρονική αποτελεσματικότητα: Θ(n 3 ) Χωρική αποτελεσματικότητα: Θ(n 2 ) – επαναχρησιμοποίηση χώρου Αλγόριθμος Warshall - ψευδοκώδικας
34 Συντομότερα Μονοπάτια Μεταξύ Όλων των Ζευγών (APSP) Να βρούμε τα συντομότερα μονοπάτια μεταξύ όλων των κορυφών ενός ζυγισμένου γράφου Ιδέα : να βρούμε τη λύση μέσω μιας σειράς πινάκων d(0), d(1), … χρησιμοποιώντας ένα αρχικό υποσύνολο κορυφών ως ενδιάμεσες Παράδειγμα :
Αλγόριθμος Floyd - Παράδειγμα 0 ∞ 3 ∞ 2 0 ∞ ∞ ∞ ∞ ∞ 0 D (0) = 0 ∞ 3 ∞ ∞ ∞ ∞ 9 0 D (1) = 0 ∞ 3 ∞ ∞ ∞ 9 0 D (2) = D (3) = D (4) =
36 Algorithm Floyd(W[1..n,1..n]) DWDW for k 1 to n do for i 1 to n do for j 1 to n do D[i,j] min(D[i,j],D[i,k]+D[k,j]) return D Χρονική και Χωρική αποτελεσματικότητα Πότε δεν δουλεύει? Αλγόριθμος Floyd
ΤΟ ΠΡΟΒΛΗΜΑ ΤΟΥ ΣΑ K ΙΔΙΟΥ 37
38 Το Πρόβλημα του Σακιδίου Δίνονται n αντικείμενα με βάρη w 1,w 2,…,w n, αξίες v 1,v 2,…,v n και χωρητικότητα σάκου W. Να βρεθεί το πολυτιμότερο υποσύνολο των αντικειμένων που χωρούν στο σάκο Λύση με εξαντλητική αναζήτηση Έστω ότι το V[i,j] δίνει τη βέλτιστη λύση για τα πρώτα i αντικείμενα και χωρητικότητα j. Σκοπός είναι ο υπολογισμός του V[n,W]
39 Παράδειγμα n Αξία Βάρος Αντ { 1, 2 } { 1, 2, 3 } { 1, 2, 3, 4 } { 1 } { 1, 2, 3, 4, 5 } W + 1 W = 11 Βέλτιστη λύση: {4,3} τιμή = = 40
40 Συναρτήσεις Μνήμης Ένα μειονέκτημα του δυναμικού προγραμμα- τισμού είναι ότι επιλύει υποπροβλήματα που δεν χρειάζονται τελικά Μια εναλλακτική τεχνική είναι ο συνδυασμός της top-down με την bottom-up προσέγγιση (δηλ. αναδρομή συν ένα πίνακα προσωρινών αποτελεσμάτων)
41 Παράδειγμα n Αξία Βάρος Αντ { 1, 2 } { 1, 2, 3 } { 1, 2, 3, 4 } { 1 } { 1, 2, 3, 4, 5 } W + 1 W = 11 Βέλτιστη λύση: {4,3} τιμή = =
42 Απόδοση Χρόνος : ( nW ). – Δεν είναι πολυωνυμικός ( γιατί ;) – « Ψευδο - πολυωνυμικός » – Το πρόβλημα απόφασης του Σακιδίου είναι NP- πλήρες. Προσέγγιση : υπάρχει ένας πολυωνυμικός αλγόριθμος Ο ( n 3 / ε ) που βρίσκει μία λύση το πολύ ε μακρυά από τη βέλτιστη.
ΕΥΘΥΓΡΑΜΜΙΣΗ ΑΚΟΛΟΥΘΙΩΝ (SEQUENCE ALIGNMENT) 43
44 Ομοιότητα Συμβολοσειρών Πόσο όμοιες είναι οι δύο συμβολοσειρές ; – εγοστεσιο – εργοστασιο εγοστεσιο ργοστασιοε - 6 αναντιστοιχίες, 1 κενό ε - οστεσιο ργοστασιοε γ 1 αναντιστοιχία, 1 κενό ε - οστσιο ργοστσιοε γ - ε α - 0 αναντιστοιχίες, 3 κενά
45 Εφαρμογές – Βάση για την Unix πράξη diff – Αναγνώριση Ομιλίας – Υπολογιστική Βιολογία Απόσταση Επεξεργασίας. [Levenshtein 1966, Needleman-Wunsch 1970] – Κόστος κενού : - Κόστος αναντιστοιχίας : pq – Κόστος Ευθυγράμμισης = άθροισμα κόστους αναντιστοιχιών και κενών. 2 + CA CGACCTACCT CTGACTACAT TGACCTACCT CTGACTACAT - T C C C TC + GT + AG + 2 CA - Απόσταση Επεξεργασίας
46 Να βρείτε την ελαχίστου κόστους ευθυγράμμιση μεταξύ δύο συμβολοσειρών X = x 1 x 2...x m και Y = y 1 y 2...y n. Μία ευθυγράμμιση M είναι ένα σύνολο από διατεταγμένα ζεύγη x i -y j έτσι ώστε κάθε σύμβολο να εμφανίζεται σε το πολύ ένα ζεύγος και να μην έχουμε διασταυρώσεις : Τα ζεύγη x i -y j και x i' -y j' διασταυρώνονται όταν i j ΄. Το Πρόβλημα CTACC- TACAT- G G y1y1 y2y2 y3y3 y4y4 y5y5 y6y6 x2x2 x3x3 x4x4 x5x5 x1x1 x6x6 M = x 2 -y 1, x 3 -y 2, x 4 -y 3, x 5 -y 4, x 6 -y 6.
47 Η Αναδρομή OPT(i, j) = ελάχιστο κόστος ευθυγράμμισης των συμβολοσειρών x 1 x 2... x i και y 1 y 2... y j. – Περίπτωση 1: Ο OPT φτιάχνει το ζεύγος x i -y j Κόστος αναντιστοιχίας x i -y j + ελάχιστο κόστος ευθυγράμμισης των συμβολοσειρών x 1 x 2... x i-1 και y 1 y 2... y j-1 – Περίπτωση 2( α ): Ο OPT δεν ταιριάζει το x i Κόστος κενού για το x i + ελάχιστο κόστος ευθυγράμμισης των x 1 x 2... x i-1 και y 1 y 2... y j – Περίπτωση 2( β ): Ο OPT δεν ταιριάζει το y j Κόστος κενού για το y j + ελάχιστο κόστος ευθυγράμμισης των x 1 x 2... x i και y 1 y 2... y j-1
48 Ο Αλγόριθμος Sequence-Alignment(m, n, x 1 x 2...x m, y 1 y 2...y n, , ) { for i = 0 to m M[i, 0] = i for j = 0 to n M[0, j] = j for i = 1 to m for j = 1 to n M[i, j] = min( [x i, y j ] + M[i-1, j-1], + M[i-1, j], + M[i, j-1]) return M[m, n] }
Παράδειγμα 49 - εγοστεσιο ε 1 ρ 2 γ 3 ο 4 σ 5 τ 6 α 7 σ 8 ι 9 ο 10 Έστω δ=1 και κάθε αναντιστοιχία κοστίζει 1 ενώ κάθε αντιστοιχία κοστίζει
Ένα Ωραίο Θέμα Έστω ότι είστε σύμβουλοι μίας εταιρείας κατασκευής ράβδων χαλκού, τους οποίους τους στέλνετε σε όλη τη χώρα. Για κάθε μία από τις επόμενες n ≥4 εβδομάδες, έχετε μία προβλεπόμενη παραγωγή s i κιλών ράβδων χαλκού ( για την εβδομάδα i ), η οποία θα πρέπει να μεταφερθεί στον τελικό της προορισμό αεροπορικώς. Η παραγωγή κάθε εβδομάδας μπορεί να μεταφερθεί μέσω δύο διαφορετικών εταιρειών αερομεταφοράς, τις Α και Β. Η Α χρεώνει r ευρώ για κάθε κιλό ( άρα κοστίζει r s i για να μεταφέρει την παραγωγή της εβδομάδας i ) Η Β χρεώνει ανά εβδομάδα ένα σταθερό ποσό c ανεξαρτήτως συνολικού βάρους. Όμως, το συμβόλαιο με την εταιρία Β θα πρέπει να είναι διάρκειας ακριβώς τεσσάρων συνεχόμενων εβδομάδων. Ένα πρόγραμμα για την εταιρεία χαλκού είναι η επιλογή μίας εταιρείας αερομεταφοράς για κάθε μία από τις n εβδομάδες με τον περιορισμό ότι όταν επιλέγουμε την εταιρεία Β θα πρέπει το κάθε συμβόλαιο να αφορά 4 εβδομάδες. Κατά αυτόν τον τρόπο, πληρώνοντας το ποσό c στην εταιρεία Β μπορούμε για 4 εβδομάδες να στέλνουμε την παραγωγή χωρίς κάποιο περιορισμό στο βάρος. Το κόστος του προγράμματος είναι ίσο με το συνολικό πόσο προς και τις δύο εταιρείες Α και Β για την μεταφορά του χαλκού και τις n εβδομάδες. Παράδειγμα : Έστω r =1, c =10 και η ακολουθία παραγωγής είναι η 11, 9, 9, 12, 12, 12, 12, 9, 9, 11. Στο βέλτιστο πρόγραμμα θα επιλέγατε την Α για τις τρεις πρώτες εβδομάδες, την Β για τις επόμενες τέσσερις και την Α για τις τελευταίες τρεις με συνολικό κόστος 98. ( Α ) Δώστε λύση Δυναμικού Προγραμματισμού ( αναδρομική σχέση ) η οποία με είσοδο την παραγωγή κάθε εβδομάδας s 1, s 2,…, s n να επιστρέφει το ελάχιστο κόστος για τη μεταφορά της. Ποια είναι η χρονική πολυπλοκότητα του αλγόριθμού σας ; ( Β ) Να εφαρμόσετε το συγκεκριμένο αλγόριθμο για την είσοδο του παραδείγματος που έχει δοθεί παραπάνω δίνοντας τον πίνακα δυναμικού προγραμματισμού για κάθε βήμα. 50