Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα. Δυναμικός & Γραμμικός Προγραμματισμός Προβλήματα Ροές σε Δίκτυα Σταύρος Δ. Νικολόπουλος -7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros
Αλγοριθμικές Τεχνικές Δύο Σημαντικά Εργαλεία της Τέχνης των Αλγορίθμων Δυναμικός Προγραμματισμός Γραμμικός Προγραμματισμός
Δυναμικός & Γραμμικός Προγραμματισμός Τι έχουμε δει έως τώρα? Μερικές τεχνικές σχεδίασης αλγορίθμων, όπως: Διαίρει-και-Βασίλευε Άπληστη Επιλογή Το μειονέκτημα αυτών των τεχνικών είναι ότι μπορούν να χρησιμοποιηθούν για ειδικούς τύπους προβλημάτων!!! Δυναμικός Προγραμματισμός και Γραμμικός Προγραμματισμός Δύο Γενικές Αλγοριθμικές Τεχνικές!!!
Δυναμικός Προγραμματισμός Αλγοριθμική Τεχνική Δυναμικός Προγραμματισμός!!!!!
Δυναμικός Προγραμματισμός Αλγοριθμική Τεχνική Δυναμικός Προγραμματισμός Είναι Τεχνική Σχεδίασης Αλγορίθμων!!! με ευρύτατο πεδίο εφαρμογών! και με χρήση εκεί όπου άλλες πιο ειδικευμένες τεχνικές αποτυγχάνουν! Δεν είναι Τεχνική Προγραμματισμού!!!!!!!!
Δυναμικός Προγραμματισμός Γιατί αυτός ο όρος και η ονομασία Δυναμικός Προγραμματισμός???????? Επινοήθηκε από τον Richard Bellman το Τότε ο προγραμματισμός ήταν μια απόκρυφη, σπάνια δραστηριότητα την οποία ασκούσαν τόσο πολύ λίγοι που δεν άξιζε καν να την αναφέρουν. Ο όρος «προγραμματισμός» την εποχή εκείνη σήμαινε «σχεδιασμός ενεργειών» (planning), ενώ ο όρος «δυναμικός προγραμματισμός» σήμαινε «βέλτιστο σχεδιασμό πολλαπλών διεργασιών»!!!
Δυναμικός Προγραμματισμός Ας θυμηθούμε δύο γνωστά μας προβλήματα! Ακολουθία Fibonacci Ελάχιστες διαδρομές σε DAG r s u - v - x 8 t
Ακολουθία Fibonacci Δυναμικός Προγραμματισμός
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci Fib(n) = fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci Fib() = fib() + fib() Fib(n) = fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci Fib() = fib() + fib() Fib(n) = fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci Fib() = fib() + fib() Fib(n) = fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci 8 Fib() = fib() + fib() Fib(n) = fib(n-) + fib(n-)
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci i i- i- Fib(i) = fib(i-) + fib(i-) Μπορώ να λύσω ένα υποπρόβλημα εύκολα εάν έχω «βρει» και έχω «κρατήσει» τις λύσεις «μικρότερων» υποπροβλημάτων!!!
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci Αλγόριθμος FIBONACCI i i- i- fib(n).... if n = then return if n = then return F() =, F() = {F πίνακας μήκους n} for i =,,, n F(i) = F(i-) + F(i-). return F(n) Κρατήστε αυτά τα στοιχεία του αλγορίθμου!!!
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x 8 t
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x t 8 Γιατί αυτό το Χαρακτηριστικό βοηθάει στον υπολογισμό των ε.δ από ένα κόμβο, έστω τον s?
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x t 8 Θέλουμε να υπολογίσουμε τις ε.δ από τον κόμβο s : d(r), d(s), d(u), d(v), d(x), d(t)
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x 8 Ας εστιάσουμε σε ένα κόμβο, έστω στον κόμβο x Ο μόνος τρόπος για να φθάσουμε στον x είναι μέσω των προκατόχων του, δηλ. των κόμβων v και u!!! t
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x t 8 Εάν έχουμε υπολογίσει τις τιμές d(r), d(s), d(u) και d(v) των αντίστοιχων ε.δ, μπορούμε βρούμε την ε.δ s ~> x, αρκεί μόνο να συγκρίνουμε τις δύο διαδρομές: d(x) = min{d(v) +, d(u) + }
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Μια τέτοια σχέση ισχύει για κόμβο!!! π.χ., για τον κόμβο t : r s u v d(t) = min{ d(x)+, d(v)+, d(u)+8 } Αν υπολογίσουμε τις τιμές d(.) με τη σειρά της Τοπoλογικής Ταξινόμησης τότε: Μπορώ να λύσω ένα υποπρόβλημα εύκολα εάν έχω «βρει» και έχω «κρατήσει» τις λύσεις «μικρότερων» υποπροβλημάτων!!! x 8 t
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Αλγόριθμος SP-DAG. Initialize(G,s) r s u v x 8. Topological-Sorting(G). για κάθε κόμβο x V-{s} σε τοπολογική σειρά: d(x) = min(u,x) E{d(u) + w(u,x)}. return d(.) Κρατήστε αυτά τα στοιχεία του αλγόριθμου!!! t
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Παρατηρήσεις!!! Ο αλγόριθμος SP-DAG επιλύει υποπροβλήματα, της μορφής: { d(x) x V-{s} } r s u v x d(x), d(x),, d(xi),, d(xn-), d(xn) Αρχίζει από το «μικρότερο» υποπρόβλημα και προσχωράει σε «μεγαλύτερα» υποπροβλήματα!!! Ένα υποπρόβλημα το θεωρούμε «μεγάλο» εάν πρέπει να λύσουμε πολλά άλλα υποπροβλήματα πριν φθάσουμε σε αυτό!!! 8 t
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Η Βασική Ιδέα!!!!!!!!
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Η Βασική Ιδέα!!!... Λύσης ενός προβλήματος Π με ΔΠ: Yπολογίζουμε ένα σύνολο υποπροβλημάτων του Π Eπινοούμε μια σχέση για την λύση ενός υποπροβλήματος Λύνουμε τα υποπροβλήματα ξεκινώντας από «μικρότερα», αποθηκεύουμε τις λύσεις τους, και προχωράμε προς «μεγαλύτερα» χρησιμοποιώντας τις αποθηκευμένες λύσεις των μικρότερων!!! Παίρνουμε τη λύση του αρχικού μας προβλήματος Π, λύνοντας όλα τα υποπροβλήματα με καθορισμένη σειρά!!!
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Τα προβλήματα βελτιστοποίησης όπου ο ΔΠ λειτουργεί καλά έχουν τα ακόλουθα Κοινά χαρακτηριστικά των προβλημάτων του ΔΠ : κοινά χαρακτηριστικά: Ιδιότητα Βέλτιστης υποδομής (Optimal substructure property): Μια βέλτιστη λύση του προβλήματος μπορεί να κατασκευαστεί από βέλτιστες λύσεις των υποπροβλημάτων του! Πολλαπλά Υποπροβλήματα : Το αρχικό πρόβλημα διασπάται, με πολλαπλούς τρόπους, σε ένα σύνολο απλούστερων υποπροβλημάτων!! Επικάλυψη Υποπροβλημάτων : Ανεξάρτητα υποπροβλήματα είναι δυνατόν να μοιράζονται βέλτιστες λύσεις κοινών υποπροβλημάτων!!!
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Θεμελιώδης Ιδιότητα του ΔΠ!!! Στο ΔΠ το «μοντέλο της τεχνικής» θα μπορούσαμε να το θεωρήσουμε ότι είναι ένα γράφημα G τύπου DAG!!! Οι κόμβοι του G αντιστοιχούν στα υποπροβλήματα και οι ακμές του στις εξαρτήσεις ανάμεσα σε αυτά: Α Β Το Α θεωρείται «μικρότερο» υποπρόβλημα από το Β, ή Για να λύσουμε το Β χρειαζόμαστε την λύση του Α!!!
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Θεμελιώδης Ιδιότητα του ΔΠ!!! Αυτό σημαίνει ότι υπάρχει διάταξη των υποπροβλημάτων και μια σχέση που δείχνει πως θα λυθεί ένα υποπρόβλημα έχοντας τις λύσεις «μικροτέρων» υποπροβλημάτων, δηλαδή, υποπροβλημάτων που εμφανίζονται νωρίτερα στη διάταξη! Διάταξη: Σχέση: Α Β C D Μεγάλο-ΥΠ = f(μικρότερα-υπ) E
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Διαίρει-και-Βασίλευε vs ΔΠ!!!
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Διαίρει-και-Βασίλευε vs ΔΠ!!! Στην τεχνική Δ-και-Β ένα Π μεγέθους n εκφράζεται συναντήσει υποπροβλημάτων Π(), Π(),, Π(k) που είναι σημαντικά μικρότερα, για παράδειγμα n/, και δεν επικαλύπτονται!!! Λόγω αυτής της απότομης μείωσης του μεγέθους του Π, το δένδρο της αναδρομής έχει: O(logn) βάθος O(n) πλήθος κόμβων!!!
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Διαίρει-και-Βασίλευε vs ΔΠ!!! Αντίθετα, στην τεχνική του ΔΠ τα υποπροβλήματα Π(), Π(),, Π(k) είναι ελάχιστα μικρότερα, για παράδειγμα το Π(i) βασίζεται στο Π(i-), και επικαλύπτονται!!! Π() Εδώ συνήθως, το δένδρο της αναδρομής έχει: Π() Π() Π() O(n) βάθος O(cn) πλήθος κόμβων, c> Π() Π() Π() Εκθετικό πλήθος κόμβων!!! Π()
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Ο ΔΠ είναι μια πολύ ισχυρή αλγοριθμική τεχνική!!!... με ευρύτατο πεδίο εφαρμογών!!! Συνοπτικά, στο ΔΠ: υπολογίζουμε ένα σύνολο υποπροβλημάτων του Π, λύνουμε κάθε υποπρόβλημα μία μόνο φορά, αποθηκεύουμε τη λύση του, και χρησιμοποιούμε αυτή, εάν χρειαστεί να το ξαναλύσουμε!!! Αποφεύγουμε έτσι να λύνουμε ξανά-και-ξανά πολλές φορές τα ίδια-και-ίδια υποπροβλήματα!!!
Προβλήματα Μέγιστες Αύξουσες Υποακολουθίες Διορθωτική Απόσταση Πολλαπλασιασμός Ακολουθίας Πινάκων Ελάχιστες Αξιόπιστες Διαδρομές Πανζευκτικές Ελάχιστες Διαδρομές Σακίδιο (knap-sack)
Δυναμικός Προγραμματισμός - Προβλήματα Μέγιστες Αύξουσες Υποακολουθίες Πρόβλημα Μας δίδεται μια ακολουθία n αριθμών Α = (a, a,, an) και μας ζητείται να υπολογίσουμε μία (γνησίως) αύξουσα υπακολουθία της Α με το μέγιστο μήκος. Μια ακολουθία Α = (ai, ai,, aik) είναι γνησίως αύξουσα υπακολουθία της Α εάν: ai < ai < < aik και i < i < < ik n
Δυναμικός Προγραμματισμός - Προβλήματα Μέγιστες Αύξουσες Υποακολουθίες Παράδειγμα Μια μέγιστη γνησίως αύξουσα υπακολουθία της Α = (,, 8,,,,, 7) είναι η Α = (,,, ) με μήκος. Οι υπακολουθίες Β = (,,, ) και C = (,,, 7) της Α δεν είναι ζητούμενες διότι δεν είναι γνησίως αύξουσες.
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 7 Θεμελιώδη Ιδιότητα του ΔΠ!!! Υπάρχει μια διάταξη των υποπροβλημάτων, και μια σχέση που δείχνει πως θα λυθεί ένα υποπρόβλημα έχοντας τις λύσεις «μικροτέρων» υποπροβλημάτων!!!
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 7 Επομένως Θεμελιώδες Κρίσιμο Ερώτημα!!! Ποια είναι τα υποπροβλήματα?... που θα μας οδηγήσουν σε μια βέλτιστη λύση του προβλήματός μας!!!
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 7 Μπορούμε να «συρρικνώσουμε» το αρχικό πρόβλημα με τον εξής τρόπο: Μπορούμε να εξετάσουμε τον υπολογισμό μέγιστων υπακολουθιών σε ακολουθίες Α(i) που αποτελούνται από τα i πρώτα στοιχεία της A, για i n
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 Ξεκινάμε λύνοντας το πρόβλημα στην ακολουθία Α() = () κατόπιν στην Α() = (, ), και τέλος στην Α(8) = (,, 8,,,,, 7)!!! 7
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 Ξεκινάμε λύνοντας το πρόβλημα στην ακολουθία Α() = () κατόπιν στην Α() = (, ) τέλος στην Α(8) = (,, 8,,,,, 7)!!! 7
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 7 Ξεκινάμε λύνοντας το πρόβλημα στην ακολουθία Α() = () κατόπιν στην Α() = (, ) στην Α() = (,, 8) και τέλος στην Α(8) = (,, 8,,,,, 7)!!! Λύση : (,,, 7)
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 7 Ξεκινάμε λύνοντας το πρόβλημα στην ακολουθία Α() = () κατόπιν στην Α() = (, ) στην Α() = (,, 8) και τέλος στην Α(8) = (,, 8,,,,, 7)!!! Λύση : (,,, 7)
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 7 Ορίζουμε: L(i) = μήκος της μέγιστης υπακολουθίας της ακολουθίας Α(i), i n
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 Ερώτημα!!! 7 L(i) Πως βρίσκουμε την βέλτιστη λύση για το υποπρόβλημα Α(i) έχοντας τις βέλτιστες λύσεις των υποπροβλημάτων Α(), Α(),, Α(i-)?
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 Ερώτημα!!! 7 L(i) Είναι απλό!!!... Αρκεί να εκφράσουμε το υποπρόβλημα Α(i) συναρτήσει των μικρότερων υποπροβλημάτων Α(), Α(),, Α(i-)!!!
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 Ορίστε πως!!! L(i) = + max k i-{l(k) : A[k] < A[i]} L(i) 7
Μέγιστες Αύξουσες Υποακολουθίες Αλγόριθμος Longest-Subsequence(A[..n]). C() =. for i to n for k to i- Συνολική Πολυπλοκότητα O(n) L[i] + max{l[k] : A[k] < A[i]}. return L[n]
Μέγιστες Αύξουσες Υποακολουθίες L(i) + max{l(k) : A[k] < A[i]} Παράδειγμα L() L() 8 L() + max{} L[] + = 7 όπου, ως συνήθως, η σύμβασή μας είναι ότι η μέγιστη τιμή ενός κενού συνόλου είναι!!!
Μέγιστες Αύξουσες Υποακολουθίες L(i) + max{l(k) : A[k] < A[i]} Παράδειγμα 8 L() L() L() L() + max{l(), L()} L[] + max{, } = 7
Μέγιστες Αύξουσες Υποακολουθίες L(i) + max{l(k) : A[k] < A[i]} Παράδειγμα 8 L() L() L() L() L() L() L() + max{l(), L(), L()} L[] + max{,, } = 7
Μέγιστες Αύξουσες Υποακολουθίες L(i) + max{l(k) : A[k] < A[i]} Παράδειγμα 8 L() L() L() L() L() L() L(7) 7 L(7) + max{l(), L(), L(), L(), L(), L()} L[7] + max{,,,,, } =
Μέγιστες Αύξουσες Υποακολουθίες L(i) + max{l(k) : A[k] < A[i]} Παράδειγμα 8 7 L() L() L() L() L() L() L(7) L(8) L(8) + max{l(), L(), L(), L(), L()} L[8] + max{,,,, } =
Μέγιστες Αύξουσες Υποακολουθίες L(i) + max{l(k) : A[k] < A[i]} Παράδειγμα 8 7 L(8) Α = (,, 8,,,,, 7) Λύση! (,,, 7)
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση 8 Α = (,, 8,,,,, 7) Δημιουργούμε ένα γράφημα G με ΟΛΕΣ τις επιτρεπτές μεταβάσεις!!! 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση 8 Παρατηρήστε ότι: () Το γράφημα G είναι DAG!!! 8 7 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση 8 Παρατηρήστε ότι: () Το γράφημα G είναι DAG!!! () Υπάρχει - αντιστοιχία ανάμεσα στις αύξουσες υπακολουθίες και στις διαδρομές αυτού του DAG!!! 8 7 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση 8 Παρατηρήστε ότι: () Το γράφημα G είναι DAG!!! () Υπάρχει - αντιστοιχία ανάμεσα στις αύξουσες υπακολουθίες και στις διαδρομές αυτού του DAG!!! Επομένως, το πρόβλημά μας ανάγεται στον υπολογισμό της μεγαλύτερης διαδρομής στο γράφημα G!!! Υπολογισμός: Μεγαλύτερης διαδρομής σε DAG!!! 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Μέγιστη Διαδρομή σε DAG 8 i L(i) L(i) = + max{l(k) : (k,i) E(G)}
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση 8 Ορίστε ο αλγόριθμος:. για i =,,, n: L(i) = + max{l(k) : (k,i) E(G)}. return max i n{l(i)} L(i) = είναι το μήκος της μεγαλύτερης διαδρομής ή, ισοδύναμα, της μέγιστης αύξουσας υπακολουθίας, που τελειώνει στον κόμβο i =,,, n 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Α = (,, 8,,,,, 7) 8 7 Η μέγιστη αύξουσα υπακολουθία έχει μήκος
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Α = (,, 8,,,,, 7) 8 7 Ποια είναι η υπακολουθία?
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Α = (,, 8,,,,, 7) 8 Ποια είναι η υπακολουθία? 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Α = (,, 8,,,,, 7) 8 Ποια είναι η υπακολουθία? 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Α = (,, 8,,,,, 7) 8 Ποια είναι η υπακολουθία? 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Α = (,, 8,,,,, 7) 8 Ποια είναι η υπακολουθία? 7
Μέγιστες Αύξουσες Υποακολουθίες Εναλλακτική Λύση Α = (,, 8,,,,, 7) Λύση!!!... η υπακολουθία: (,,, 7) 7 Ποια είναι η υπακολουθία?
Μέγιστες Αύξουσες Υποακολουθίες Γιατί είναι ΔΠ? για i =,,, n: L(i) = + max{l(k) : (k,i) E(G)} Ορίσαμε, υποπροβλήματα: {L(i) : i n} που έχουν τη Θεμελιώδης Ιδιότητα του ΔΠ!!! Υπάρχει μια διάταξη των υποπροβλημάτων, και μια σχέση που δείχνει πως θα λυθεί ένα υποπρόβλημα έχοντας τις λύσεις «μικροτέρων» υποπροβλημάτων!!!
Μέγιστες Αύξουσες Υποακολουθίες Πολυπλοκότητα για i =,,, n: L(i) = + max{l(k) : (k,i) E(G)} Το αρχικό μας πρόβλημα λύνεται με ένα «πέρασμα» των n = A κόμβων Ο υπολογισμός του L(i) απαιτεί χρόνο ανάλογο του βαθμού εισόδου του κόμβου i του G Συνολικά, χρόνο τάξης Ε(G) O(n)
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Κίνητρο Όταν ένας ελεγκτής ορθογραφίας συναντά μια πιθανή ανορθόγραφη λέξη Λεξικό αα αn Ποια είναι η κατάλληλη έννοια της εγγύτητας δύο λέξεων ή συμβολοσειρών? εξετάζει το λεξικό του για άλλες λέξεις που είναι «κοντά» στην ανορθόγραφη!! ββ βm γγ γk ωω ωp
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Κίνητρο Ένα μέτρο της εγγύτητας ανάμεσα σε δύο λέξεις ή συμβολοσειρές α και β, είναι οι διορθώσεις που πρέπει να κάνουμε, έτσι ώστε α β ή β α Ποιες διορθώσεις μπορούμε να κάνουμε? Εισαγωγή συμβόλου Διαγραφή συμβόλου Αντικατάσταση συμβόλου πράξεις σε συμβολοσειρές
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων : S U N N Y S N O W Y S U N N Y S N O W Y S U N N Y S N O W Y
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N - - N Y S N O W Y - S N O W - Y
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N - - N Y S U N N - Y S U N - - N Y
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N - - N Y S N O W Y - S N O W - Y
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S - N O W Y - S N O W - Y S - N O W Y - S N O W - Y
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S - N O W Y S N O W Y S U N N Y
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N O W Y S N O W Y Εισαγωγή U S U N N Y
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N Ν W Y S N O W Y S U N N Y Εισαγωγή U Αντικατάσταση του O σε Ν
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SUNNY και SNOWY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N Ν - Y S N O W Y S U N N Y Εισαγωγή U Αντικατάσταση του O σε Ν Διαγραφή του W
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Ορίζουμε ως κόστος διόρθωσης δύο συμβολοσειρών α και β, το πλήθος των πράξεων που απαιτούνται για να πάρουμε από την μία στην άλλη!!! S U N N - Y S U N - - N Y S - N O W Y - S N O W - Y Κόστος Κόστος
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση To ελάχιστο κόστος διόρθωσης δύο συμβολοσειρών ονομάζεται διορθωτική απόσταση (edit distance) αυτών. S U N N - Y S U N - - N Y S - N O W Y - S N O W - Y Κόστος Κόστος
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση To ελάχιστο κόστος διόρθωσης δύο συμβολοσειρών ονομάζεται διορθωτική απόσταση (edit distance) αυτών. S U N N - Y S - N O W Y Κόστος Ε(SUNNY, SNOWY) =
Δυναμικός Προγραμματισμός - Προβλήματα Διορθωτική Απόσταση Πρόβλημα Μας δίνονται δύο συμβολοσειρές α και β με n και m σύμβολα, αντίστοιχα, α, α,, αn και β, β,, βm και μας ζητείται να υπολογίσουμε την διορθωτική απόσταση αυτών. Ε(α, β)
Διορθωτική Απόσταση Στο ΔΠ το πιο κρίσιμο ερώτημα είναι το εξής: Ποια είναι τα υποπροβλήματα? Όταν αυτά επιλέγονται ώστε να έχουν την Θεμελιώδη Ιδιότητα του ΔΠ!!! Υπάρχει μια διάταξη των υποπροβλημάτων, και μια σχέση που δείχνει πως θα λυθεί ένα υποπρόβλημα έχοντας τις λύσεις «μικροτέρων» υποπροβλημάτων!!! η διατύπωση ενός αλγόριθμου είναι εύκολη υπόθεση!!! Τότε, επαναληπτικά επιλύουμε τα υποπροβλήματα κατά σειρά αυξανόμενου μεγέθους!
Διορθωτική Απόσταση Ποιο είναι ένα καλό υποπρόβλημα? Θέλουμε την Ε(α,β) ανάμεσα στις δύο συμβολοσειρές α[..n]=(α, α,, αn) και β[..m]= (β, β,, βm) Είναι αυτό που «προχωράει» τη λύση του συνολικού προβλήματος!!! Πρέπει να επινοήσουμε κάτι έξυπνο! Τι θα λέγατε να εξετάσουμε την Ε() σε προθέματα (prefix) των α και β!!!!!!!
Διορθωτική Απόσταση Ας πάρουμε δύο προθέματα (prefix) των α και β, μήκους i n και j m : α[..i]=(α, α,, αi) και β[..j]= (β, β,, βj) και ας συμβολίσουμε Ε(i,j) την διορθωτική απόσταση αυτού του υποπροβλήματος Παράδειγμα: E X P O N E N T I A L α[..7] P O L Y N O M I A L β[..] Το υποπρόβλημα: Ε(7,)
Διορθωτική Απόσταση Ας πάρουμε δύο προθέματα (prefix) των α και β, μήκους i n και j m : α[..i]=(α, α,, αi) και β[..j]= (β, β,, βj) και ας συμβολίσουμε Ε(i,j) την διορθωτική απόσταση αυτού του υποπροβλήματος Παράδειγμα: E X P O N E N T I A L α[..] P O L Y N O M I A L β[..] Το υποπρόβλημα: Ε(,)
Διορθωτική Απόσταση Ας πάρουμε δύο προθέματα (prefix) των α και β, μήκους i n και j m : α[..i]=(α, α,, αi) και β[..j]= (β, β,, βj) και ας συμβολίσουμε Ε(i,j) την διορθωτική απόσταση αυτού του υποπροβλήματος Παράδειγμα: E X P O N E N T I A L α[..] P O L Y N O M I A L β[..] Το υποπρόβλημα: Ε(,)
Διορθωτική Απόσταση Ας πάρουμε δύο προθέματα (prefix) των α και β, μήκους i n και j m : α[..i]=(α, α,, αi) και β[..j]= (β, β,, βj) και ας συμβολίσουμε Ε(i,j) την διορθωτική απόσταση αυτού του υποπροβλήματος Παράδειγμα: E X P O N E N T I A L α[..] P O L Y N O M I A L β[..] ΤΕΛΙΚΟΣ ΣΤΟΧΟΣ: E(, )
Διορθωτική Απόσταση Ας πάρουμε δύο προθέματα (prefix) των α και β, μήκους i n και j m : α[..i]=(α, α,, αi) και β[..j]= (β, β,, βj) και ας συμβολίσουμε Ε(i,j) την διορθωτική απόσταση αυτού του υποπροβλήματος Λύση: E X P O N E N - T I A L - - P O L Y N O M I A L ΤΕΛΙΚΟΣ ΣΤΟΧΟΣ: E(, ) =
Διορθωτική Απόσταση Θα πρέπει να εκφράσουμε το υποπρόβλημα Ε(i,j) συναρτήσει μικρότερων υποπροβλημάτων!!! Τι γνωρίζουμε για την βέλτιστη διόρθωση (στοίχιση) ανάμεσα στις συμβολοσειρές α[..i] και β[..j]? Γνωρίζουμε ότι για την δεξιότερη στήλη ισχύει μία από τις ακόλουθες τρεις περιπτώσεις : α[i] - ή β[j] ή α[i] β[j]
Διορθωτική Απόσταση Το κόστος σε κάθε περίπτωση : α[i] - ή β[j] ή α[i] β[j]
Διορθωτική Απόσταση Το κόστος σε κάθε περίπτωση : α[i] η Περίπτωση: ή β[j] ή α[i] β[j] Επιφέρει κόστος Και απομένει να διορθώσουμε (στοιχίσουμε) τις συμβολοσειρές α[..i-] και β[..j] Όμως, αυτό είναι ακριβώς το υποπρόβλημαμα Ε(i-, j)
Διορθωτική Απόσταση Το κόστος σε κάθε περίπτωση : α[i] η Περίπτωση: ή β[j] ή α[i] β[j] Επιφέρει κόστος Και απομένει να διορθώσουμε (στοιχίσουμε) τις συμβολοσειρές α[..i] και β[..j-] Όμως, αυτό είναι ακριβώς το υποπρόβλημα Ε(i, j-)
Διορθωτική Απόσταση Το κόστος σε κάθε περίπτωση : α[i] η Περίπτωση: ή β[j] ή α[i] β[j] Επιφέρει κόστος (εάν α[i] β[j]) ή κόστος (εάν α[i]=β[j]) Και απομένει να διορθώσουμε τις α[..i-] και β[..j-] Τώρα, το υποπρόβλημα είναι ακριβώς το Ε(i-, j-)
Διορθωτική Απόσταση Επομένως, έχουμε εκφράσει το Ε(i, j) συναρτήσει τριών μικροτέρων υποπροβλημάτων: Ε(i-, j) Ε(i, j-) Ε(i-, j-) Όμως, δεν γνωρίζουμε ποιο από αυτά είναι σωστό!!! Οπότε θα τα δοκιμάσουμε όλα και θα επιλέξουμε το καλύτερο: Ε(i,j) = min {+Ε(i-,j), +Ε(i,j-), { } +Ε(i-,j-)}
Διορθωτική Απόσταση Αλγόριθμος Edit-distance(a[..n],b[..m]). Initialize(). for i to n for j to m for i to n E(i,) = i for j to m E(,j) = j E(i,j) min {+E(i-,j), +E(i,j-), { } +E(i-,j-)}. return E(n,m)
Διορθωτική Απόσταση Αλγόριθμος Edit-distance(a[..n],b[..m]). Initialize(). for i to n for j to m Συνολική Πολυπλοκότητα E(i,j) min {+E(i-,j), +E(i,j-), { } +E(i-,j-)}. return E(n,m) O(nm)
Διορθωτική Απόσταση Παράδειγμα Δύο συμβολοσειρές E X P O N E N T I A L Υποπρόβλημα Ε(, ) P O L Y N O M I A L Το Ε(,) αντιστοιχεί στις συμβολοσειρές EXPO και POL Εδώ, θέσαμε το Ερώτημα!!! Τι ισχύει για την δεξιότερη στήλη σε μια βέλτιστη λύση του υποπροβλήματος Ε(,)?
Διορθωτική Απόσταση Παράδειγμα Δύο συμβολοσειρές Υποπρόβλημα Ε(, ) E X P O N E N T I A L P O L Y N O M I A L Τρεις περιπτώσεις μπορούν να ισχύουν: O - ή L ή O L Άρα, Ε(,) = min{+ε(,), +Ε(,), +Ε(,)}
Διορθωτική Απόσταση Παράδειγμα Οι λύσεις όλων των υποπροβλημάτων Ε(i,j) σχηματίζουν ένα διδιάστατο πίνακα ΛΥΣΗ Ε(,) = P O L Y N O M I A L 7 8 E 7 8 X 7 8 P 7 8 O 7 8 N 7 8 E 7 8 N 7 7 8 T 8 7 7 8 I 8 7 7 7 7 8 A 8 8 8 7 7 7 7 L 8 8 8 8 8 7
Διορθωτική Απόσταση Παράδειγμα Γενικά, όλα τα υποπροβλήματα Ε(i,j) σχηματίζουν έναν n m διδιάστατο πίνακα E X P O L Y N O j- j j+ M I A L m- m P O N i- E i N i+ Ε(i,j) T I ΛΥΣΗ A n- L n Διορθωτική απόσταση = Ε(n, m) Ε(n,m)
Διορθωτική Απόσταση Παράδειγμα Αλγόριθμος Edit-distance(a[..],b[..]) a[..] = E X P O N E N T I A L b[..] = P O L Y N O M I A L return E(,) = E X P O N E N - T I A L - - P O L Y N O M I A L
Δυναμικός Προγραμματισμός - Προβλήματα Πολλαπλασιασμός Ακολουθίας Πινάκων Έστω ότι θέλουμε να πολλαπλασιάσουμε πίνακες Α B C D διαστάσεων,, και Ο πολλαπλασιασμός πινάκων δεν είναι αντιμεταθετός (Α B B Α), αλλά είναι προσεταιριστηκός, που σημαίνει: (Α B) C = Α (B C) Μπορούμε να υπολογίσουμε το γινόμενο των πινάκων μας με πολλούς διαφορετικούς τρόπους!
Δυναμικός Προγραμματισμός - Προβλήματα Πολλαπλασιασμός Ακολουθίας Πινάκων Έστω ότι θέλουμε να πολλαπλασιάσουμε πίνακες Α B C D διαστάσεων,, και Ερώτημα!!! Υπάρχει διαφορά? Εάν ΝΑΙ!!! Ποιος τρόπος είναι ο καλύτερος?
Δυναμικός Προγραμματισμός - Προβλήματα Πολλαπλασιασμός Ακολουθίας Πινάκων Πολλαπλασιασμός Α B C D O πολλαπλασιασμός δύο πινάκων Α B διαστάσεων n m και m p απαιτεί n m p πολλαπλασιασμούς Διάταξη Παρενθέσεων Α Β C D Υπολογισμός Κόστους Κόστος Α ((B C) D) + +. (Α (B C)) D (Α B) (C D) + +. + + 7.
Δυναμικός Προγραμματισμός - Προβλήματα Πολλαπλασιασμός Ακολουθίας Πινάκων Πρόβλημα Μας δίδεται μια ακολουθία n πινάκων (συμβατών διαστάσεων) Α, Α,, Αn και μας ζητείται να υπολογίσουμε το γινόμενο Α Α Αn κάνοντας το ελάχιστο πλήθος πολλαπλασιασμών.
Πολλαπλασιασμός Ακολουθίας Πινάκων Από το εισαγωγικό παράδειγμα είδαμε ότι η σειρά των πολλαπλασιασμών επηρεάζει πολύ τον χρόνο επίλυσης του προβλήματος!!! Διάταξη Παρενθέσεων Α ((B C) D) (Α (B C)) D (Α B) (C D) Υπολογισμός Κόστους Κόστος + +. + +. + + Ερώτημα!!! Να ακολουθήσουμε άπληστη προσέγγιση? 7.??????
Πολλαπλασιασμός Ακολουθίας Πινάκων Άπληστη Τεχνική? Κανόνας : Επίλεξε κάθε φορά τον φθηνότερο διαθέσιμο πολλαπλασιασμό!!! Α Β Διάταξη Παρενθέσεων Υπολογισμός Κόστους Α ((B C) D) + + (Α (B C)) D + + D (Α B) (C D) + + C Φθηνότερος πολλαπλασιασμός : B C με κόστος Α B C D Α (B C) D Κόστος.. 7. Αποτυχία!!!
Πολλαπλασιασμός Ακολουθίας Πινάκων Άπληστη Τεχνική? Κανόνας : Επίλεξε κάθε φορά τον ακριβότερο διαθέσιμο πολλαπλασιασμό!!! Α Διάταξη Παρενθέσεων Υπολογισμός Κόστους Κόστος Β (Α B) C + Α (B C) + 8 C Ακριβότερος πολλαπλασιασμός : B C με κόστος Α B C Α (B C) Αποτυχία!!!
Πολλαπλασιασμός Ακολουθίας Πινάκων Άπληστη Τεχνική? Κανόνας : Επίλεξε τον πολλαπλασιασμό που απαλείφει την μεγαλύτερη διάσταση!!! Α Διάταξη Παρενθέσεων Υπολογισμός Κόστους Κόστος Β (Α B) C + Α (B C) + 8 C Πολλαπλασιασμός που απαλείφει μεγαλύτερης διάστασης : Α Β Α B C (Α B) C Αποτυχία!!!
Πολλαπλασιασμός Ακολουθίας Πινάκων Δυναμικός Προγραμματισμός!!! Πως θα βρούμε τη βέλτιστη σειρά των πολλαπλασιασμών όταν θέλουμε να υπολογίσουμε το γινόμενο n πινάκων Α Α Α Αn- Αn διαστάσεων m m, m m, m m,, mn- mn-, mn- mn. Παρατήρηση Μια διάταξη παρενθέσεων μπορεί να αναπαρασταθεί πολύ φυσικά με ένα δυαδικό δένδρο: οι πίνακες αντιστοιχούν στα φύλλα οι ενδιάμεσοι κόμβοι είναι τα ενδιάμεσα γινόμενα η ρίζα είναι το τελικό αποτέλεσμα
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα ((Α B) C) D) D Α ((B C) D) Α D D C Α Β (Α (B C)) D Β C Α Β C
Πολλαπλασιασμός Ακολουθίας Πινάκων Δένδρα - Διατάξεις ((Α B) C) D) D Α ((B C) D) Α D D C Α Β (Α (B C)) D Β C Α Β C Οι δυνατές διατάξεις με τις οποίες μπορεί να εκτελεστεί ο πολλαπλασιασμός n πινάκων αντιστοιχούν στα διαφορετικά πλήρη δυαδικά δένδρα n κόμβων Πόσα είναι τα δένδρα αυτά? Ω(n) Δυστυχώς, το πλήθος τους είναι εκθετικό!!!
Πολλαπλασιασμός Ακολουθίας Πινάκων Δένδρα - Διατάξεις ((Α B) C) D) D Α ((B C) D) Α D D C Α Β (Α (B C)) D Β C Α Β C Ένα από τα δένδρα αυτά είναι βέλτιστο!! Εάν το δένδρο T είναι βέλτιστο, τότε είναι βέλτιστα και τα υποδένδρα Τ και Τ της ρίζας του. Ερώτηση! Ποια είναι τα υποπροβλήματα που αντιστοιχούν στα υποδένδρα Τ και Τ του βέλτιστου δένδρου T?
Πολλαπλασιασμός Ακολουθίας Πινάκων Tα υποπροβλήματα που αντιστοιχούν στα υποδένδρα Τ και Τ της ρίζας ενός βέλτιστου δένδρου T είναι γινόμενα της μορφής: Α Α Αk (Τ) Αk+ Αk+ Αn (Τ) Γενικά, το υποπρόβλημα που αντιστοιχεί σε ένα υποδένδρο ενός βέλτιστου δένδρου T είναι γινόμενο της μορφής: Αi Αi+ Αj = Αi..j
Πολλαπλασιασμός Ακολουθίας Πινάκων Ορίζουμε C[i,j] = min κόστος του πολλαπλασιασμού Αi Αi+ Αj όπου κόστος είναι το πλήθος των πολλαπλασιασμών αυτού του υποπροβλήματος Το μικρότερο υποπρόβλημα το παίρνουμε όταν i = j, όπου σε αυτή την περίπτωση δεν έχουμε κάτι να πολλαπλασιάσουμε, οπότε C[i,j]=
Πολλαπλασιασμός Ακολουθίας Πινάκων Θεωρούμε το βέλτιστο υποδένδρο Τij, j > i, για το γινόμενο Αi Αi+ Αj Η ρίζα του υποδένδρου Τij χωρίσει το γινόμενο Αi Αi+ Αj Α Αi Αi+ Αk Β C Αk+ Αk+ Αj σε δύο τμήματα, για κάποιο k, i k j.
Πολλαπλασιασμός Ακολουθίας Πινάκων Τότε, το κόστος C[i,j] του υποδένδρου Τij θα είναι: το κόστος υπολογισμού των μερικών γινομένων Αi Αi+ Αk και Αk+ Αk+ Αj συν το κόστος του πολλαπλασιασμού των πινάκων Αi..k και Αk+..j που είναι mi- mk mj. Διάσταση Αi mi- mi Πρέπει απλώς να βρούμε το σημείο χωρισμού k για το οποίο το κόστος C[i,j] είναι το μικρότερο!!!
Πολλαπλασιασμός Ακολουθίας Πινάκων Τότε, το κόστος C[i,j] του υποδένδρου Τij θα είναι: το κόστος υπολογισμού των μερικών γινομένων Αi Αi+ Αk και Αk+ Αk+ Αj συν το κόστος του πολλαπλασιασμού των πινάκων Αi..k και Αk+..j που είναι mi- mk mj. Διάσταση Αi mi- mi C[i,j] = min i k j {C[i,k] + C[k+,j] + mi- mk mj}
Πολλαπλασιασμός Ακολουθίας Πινάκων Σχέση που δίδει τη λύση ενός υποπροβλήματος από «μικρότερα» υποπροβλήματα : C[i,j] = min i k j {C[i,k] + C[k+,j] + mi- mk mj} Αναδρομή? ΟΧΙ, ευχαριστώ!!! Ω(n)
Πολλαπλασιασμός Ακολουθίας Πινάκων Σχέση που δίδει τη λύση ενός υποπροβλήματος από «μικρότερα» υποπροβλήματα C[i,j] = min i k j {C[i,k] + C[k+,j] + mi- mk mj} Δυναμικός Προγραμματισμός? ΝΑΙ, θα ήθελα!!! Ερώτηση: Πόσα υποπροβλήματα έχω? Ένα για κάθε ζεύγος (i, j) O(n)
Πολλαπλασιασμός Ακολουθίας Πινάκων Αλγόριθμος Matrix-Chain(). for i to n: C(i,i)=. for s to n- for i to n-s j i + s for k i to j Συνολική Πολυπλοκότητα O(n) C[i,j] min{c[i,k]+c[k+,j]+mi- mk mj}. return C[,n]
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, C[,] = C[,] =... C[,] =
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, C[,] = =,7 C[,] = =,... C[,] = =,
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,,
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, C[,]+C[,]+ m m m =, C[,] = min C[,]+C[,]+ m m m = 7, C[,]+C[,]+ m m m =,7
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, Τελικό Αποτέλεσμα: C[,] =,
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, Ποια είναι η βέλτιστη λύση της Α Α Α?
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, C[,]+C[,]+ m m m =, C[,] = min C[,]+C[,]+ m m m = 7, C[,]+C[,]+ m m m =,7
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7, 7,,7,,, C[,]+C[,]+ m m m =, C[,] = min C[,]+C[,]+ m m m = 7, C[,]+C[,]+ m m m =,7
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α C[,] =, Α Α Α Α Α Α ( Α Α Α ) ( Α Α Α ) ( Α ( Α Α ) ) ( ( Α Α ) Α )
Δυναμικός Προγραμματισμός - Προβλήματα Σακίδιο Κατά την διάρκεια μιας κλοπής, ένας διαρρήκτης βρίσκει περισσότερα λάφυρα απ όσα περίμενε και πρέπει να αποφασίσει τι θα πάρει!!! Το «σακίδιό» του (knap-sack) μπορεί να μεταφέρει W κιλά!!! Υπάρχουν n είδη με βάρη w, w,, wn και αξία v, v,, vn
Δυναμικός Προγραμματισμός - Προβλήματα Σακίδιο Το ερώτημα που τον απασχολεί!!! Ποιος είναι ο πλέον πολύτιμος συνδυασμός ειδών που μπορεί να βάλει στο σακίδιό του? Το «σακίδιό» του (knap-sack) μπορεί να μεταφέρει W κιλά!!! Υπάρχουν n είδη με βάρη w, w,, wn και αξία v, v,, vn
Δυναμικός Προγραμματισμός - Προβλήματα Σακίδιο Παράδειγμα Έστω ότι το σακίδιο χωράει W = κιλά, και Είδος Βάρος Τιμή Α Β Γ Δ??????
Δυναμικός Προγραμματισμός - Προβλήματα Σακίδιο Παράδειγμα Δύο Εκδοχές Έστω W = κιλά, και Υπάρχουν απεριόριστες ποσότητες από κάθε είδος Είδος Βάρος Τιμή Α Β Γ Δ Υπάρχει μία μόνο ποσότητα από κάθε είδος
Δυναμικός Προγραμματισμός - Προβλήματα Σακίδιο Παράδειγμα Δύο Εκδοχές Έστω W = κιλά, και Υπάρχουν απεριόριστες ποσότητες από κάθε είδος Είδος Βάρος Τιμή Α Β Γ Δ Βέλτιστη Επιλογή από είδος Α w= από είδος Δ w= 8 Συνολική Τιμή 8
Δυναμικός Προγραμματισμός - Προβλήματα Σακίδιο Παράδειγμα Δύο Εκδοχές Έστω W = κιλά, και Είδος Βάρος Τιμή Α Β Γ Δ Βέλτιστη Επιλογή από είδος Α w= από είδος Γ w= Συνολική Τιμή Υπάρχει μία μόνο ποσότητα από κάθε είδος
Δυναμικός Προγραμματισμός - Προβλήματα Σακίδιο (knap-sack) Πρόβλημα Μας δίδεται ένα σύνολο n αντικειμένων S = {a, a,, an} με ακέραια βάρη wi και αξίες vi ( i n), και μία τιμή W, και μας ζητείται να υπολογίσουμε ένα υποσύνολο αντικειμένων S S με μέγιστη συνολική αξία C και με συνολικό βάρος W, δηλαδή, max C = Σa i S vi και Σa S wi W i
Σακίδιο : Με επανάληψη Ας μελετήσουμε την πρώτη εκδοχή του προβλήματος!!! και ας δούμε τι συμβαίνει όταν επιτρέπονται οι επαναλήψεις! Το κρίσιμο ερώτημα : Ποια είναι τα υποπροβλήματα? Μπορούμε να «συρρικνώσουμε» το αρχικό πρόβλημα με δύο τρόπους: () Μπορούμε να εξετάσουμε την περίπτωση σακιδίων μικρότερης χωρητικότητας w W ή () Την περίπτωση λιγότερων ειδών,,, i n
Σακίδιο : Με επανάληψη Ο πρώτος περιορισμός επιβάλει να έχουμε μικρότερες χωρητικότητες! Ορίζουμε: C(w) = Μax τιμή που παίρνουμε με σακίδιο χωρητικότητας w Ερώτημα!!! Μπορούμε να εκφράσουμε το υποπρόβλημα C(w) συναρτήσει μικρότερων υποπροβλημάτων???????
Σακίδιο : Με επανάληψη Έστω μια βέλτιστη λύση του υποπροβλήματος C(w), η οποία περιλαμβάνει : p,, i,, q τα είδη τέτοια ώστε wp+ + wi + + wq w με max τιμή C(w)= vp+ + vi + + vq Εάν η βέλτιστη λύση του υποπροβλήματος C(w) περιλαμβάνει το είδος i βάρους wi, τότε η αφαίρεση του i από το σακίδιο δίδει μια βέλτιστη λύση για το υποπρόβλημα C(w-wi)!!! Επομένως : Μπορούμε να πάρουμε το υποπρόβλημα C(w) από το μικρότερο C(wwi) προσθέτοντας την αξία vi του είδους wi, για κάποιο i
Σακίδιο : Με επανάληψη Με άλλα λόγια: Το υποπρόβλημα C(w) είναι απλώς το C(w- wi) + vi, για κάποιο i. Ποιο είναι αυτό το i? δεν γνωρίζουμε!!! Τότε, δεν έχουμε παρά να πάρουμε όλες τις δυνατότητες! Ορίστε πως!!! C(w) = max i : wi w {C(w-wi) + vi} όπου, ως συνήθως, η σύμβασή μας είναι ότι η μέγιστη τιμή ενός κενού συνόλου είναι!!!
Σακίδιο : Με επανάληψη Τελειώσαμε! ο αλγόριθμος τώρα γράφετε μόνος του και είναι ιδιαιτέρα κομψός!!! Αλγόριθμος Κnap-sack(w[..n], v[..n], W). C()= Συνολική Πολυπλοκότητα. for w to W C(w) max {C(w-w(i)) + v(i) : w(i) w}. return C(W) O(nW)
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ 7 Χωρητικότητες Σακιδίου w =,,,, i,, n 8
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} {,, } 8 C() C() C() C() C() Χωρητικότητα Σακιδίου w = 7 8 C() = C(-) + = C() = C(-) + = C() = C(-) + =
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} {,, } 8 C() C() C() C() C() C() 7 8 C() = C(-) + = C() = C(-) + = C() = C(-) + =
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} {,,, } 8 C() C() C() C() C() C() Χωρητικότητα Σακιδίου w = 7 8 C() = C(-) + = 7 C() = C(-) + = 8 C() = C(-) + = C() = C(-) + =
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} {,,, } 8 C() C() C() C() C() C() C() 7 8
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} 7 8 C() C() C() C() C() C() C() C(7) 8
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} 7 8 8 C(7) C(8) C() C() C() C() C() C() C()
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} 7 8 8 C(7) C(8) C() C() C() C() C() C() C() C()
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} 7 8 8 8 C(7) C(8) C() C() C() C() C() C() C() C() C()
Σακίδιο : Με επανάληψη Παράδειγμα Είδος Βάρος Τιμή Χωρητικότητα Σακιδίου W = C(w)= max {C(w-w(i))+v(i): w(i) w} C() = 8 A B Γ Δ είδος Α αξίας είδη Δ συνολικής αξίας 8 8 C()
Σακίδιο : Με επανάληψη Ας μείνουμε λίγο ακόμα σε αυτή την εκδοχή του προβλήματος! Γνωρίζουμε ότι ένα πρόβλημα ΔΠ εκφράζεται με ένα γράφημα G τύπου DAG!!! Εύλογο ερώτημα!!! Ποιο είναι το DAG του προβλήματος του σακιδίου με επανάληψη???????
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ 7 Κόμβοι DAG Χωρητικότητα Σακιδίου W 8
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} 8 C() C() C() C() C() Χωρητικότητα Σακιδίου w = {,, } 7 8 C() = C(-) + = C() = C(-) + = C() = C(-) + =
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} 8 C() C() C() C() C() C() {,,, } 7 8 C() = C(-) + = 7 C() = C(-) + = 8 C() = C(-) + = C() = C(-) + =
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} {,,, } 7 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Δ} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Β} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Δ,Δ} λύση για w = με C(w) = 8 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Δ,Β} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Α} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG
Σακίδιο : Με επανάληψη Το DAG του Προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Α,Δ,Δ} τελική λύση, C(w) = 8 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG 8
Σακίδιο : Χωρίς επανάληψη Ερχόμαστε τώρα στην δεύτερη εκδοχή του προβλήματος!!! και ας δούμε τι συμβαίνει όταν δεν επιτρέπονται οι επαναλήψεις! Η γνώση της τιμής του υποπροβλήματος C(w- wi) δεν μας βοηθάει τώρα!!! καθώς δεν γνωρίζουμε εάν το είδος i έχει ήδη χρησιμοποιηθεί ή όχι σε αυτό το υποπρόβλημα!!!
Σακίδιο : Χωρίς επανάληψη Ερχόμαστε τώρα στην δεύτερη εκδοχή του προβλήματος!!! και ας δούμε τι συμβαίνει όταν δεν επιτρέπονται οι επαναλήψεις! Επομένως, πρέπει να βελτιώσουμε την έννοια του υποπροβλήματος ώστε C(w- wi) να μεταφέρει πληροφορίες σχετικά με τα είδη που χρησιμοποιούνται σε αυτό!!!
Σακίδιο : Χωρίς επανάληψη Πως μπορούμε να το κάνουμε? Να προσθέσουμε μια δεύτερη παράμετρο, ας την πούμε j, j n, η οποία θα προσδιορίζει το σύνολο {,,, j} των j πρώτων ειδών από ένα σύνολο n συνολικά ειδών, οπότε: Ορίζουμε C(w, j) = Μax τιμή που παίρνουμε με σακίδιο χωρητικότητας w και με είδη,,, j Και τότε, Η απάντηση που ψάχνουμε είναι η C(W, n)!!!
Σακίδιο : Χωρίς επανάληψη Πως μπορούμε να εκφράσουμε το υποπρόβλημα C(w, j) συναρτήσει μικροτέρων? Πολύ απλά εάν έχουμε μια βέλτιστη λύση με είδη από το σύνολο {,,, j-}, τότε το επόμενο είδος j ( j n) : είτε είναι απαραίτητο να πετύχουμε βέλτιστη λύση είτε όχι!!! Επομένως, C(w,j) = max {C(w, j-), C(w-wj, j-) + vj} Η δεύτερη περίπτωση καλείται μόνο όταν wj w
Σακίδιο : Χωρίς επανάληψη Και έτσι C(w,j) = max {C(w, j-), C(w-wj, j-) + vi} μπορέσαμε να εκφράσουμε το υποπρόβλημα C(w, j) συναρτήσει των μικροτέρων C(, j-) Τελειώσαμε! και σε αυτή την περίπτωση ο αλγόριθμος γράφετε πολύ εύκολα!!!
Σακίδιο : Χωρίς επανάληψη Αλγόριθμος Κnap-sack(w[..n], v[..n], W). Initialize(). for j to n for w to W for w to W C(w,) = for j to n C(,j) = if wj > w then C(w,j) C(w,j-) else C(w,j) max {C(w, j-), C(w-wj, j-) + vj}. return C(W,n)
Διορθωτική Απόσταση Παράδειγμα Είδος : : : : A B Γ Δ Βάρος Τιμή Στο παράδειγμά μας όπου έχουμε W = και είδη {Α, Β, Γ, Δ}, οι λύσεις όλων των υποπροβλημάτων C(i,j) σχηματίζουν έναν πίνακα. ΛΥΣΗ : Ε(,) = 7 8
Σακίδιο : Χωρίς επανάληψη Αλγόριθμος Κnap-sack(w[..n], v[..n], W) Ο αλγόριθμος συμπληρώνει ένα πίνακα διαστάσεων (W+) (n+) Συνολική Πολυπλοκότητα Κάθε καταχώρηση στον πίνακα απαιτεί Ο() χρόνο O(nW) Παρατήρηση Παρόλο που ο πίνακας αποθήκευσης των τιμών των υποπροβλημάτων είναι πολύ μεγαλύτερος από αυτόν του Αλγόριθμου Κnap-sack, ο χρόνος εκτέλεσης παραμένει ο ίδιος!!!
Σακίδιο : Χωρίς επανάληψη Αλγόριθμος Κnap-sack(w[..n], v[..n], W) Παρατήρηση Η πολυπλοκότητα χρόνου O(nW) είναι ψευδοπολυωνυμική, καθώς εξαρτάται από την τιμή W, η οποία μπορεί να είναι εκθετικά εξαρτώμενη από το n!!! Συνολική Πολυπλοκότητα O(nW) Το πρόβλημα Knap-sack ανήκει στην κλάση NPC ήτοι, δεν είναι γνωστό (και το πιθανότερο είναι να παραμείνει έτσι) πως μπορεί να λυθεί σε πολυωνυμικό χρόνο!!!
Δυναμικός Προγραμματισμός - Προβλήματα Ελάχιστες Αξιόπιστες Διαδρομές Κίνητρο Σε εφαρμογές συμβαίνει συχνά τα βάρη των ακμών και οι ελάχιστες διαδρομές να μην απεικονίζουν ολόκληρη την αλήθεια!!! Για παράδειγμα, σε ένα δίκτυο επικοινωνιών, ακόμα και αν τα βάρη των ακμών απεικονίζουν πιστά τις καθυστερήσεις μετάδοσης, μπορεί να υπάρχουν άλλοι παράγοντες που εμπλέκονται σε μια ε.δ!!!
Δυναμικός Προγραμματισμός - Προβλήματα Ελάχιστες Αξιόπιστες Διαδρομές Κίνητρο Θα μπορούσε, για παράδειγμα, κάθε επιπλέον ακμή στην ε.δ να είναι ένας παράγοντας «αβεβαιότητας» που ελλοχεύει κίνδυνους απώλειας πακέτων! Τότε, θα θέλαμε να αποφύγουμε διαδρομές με πάρα πολλές ακμές! s u x v t y
Δυναμικός Προγραμματισμός - Προβλήματα Ελάχιστες Αξιόπιστες Διαδρομές d(s,t)=(s,u,x,y,t) Κόστος Πλήθος ακμών s Κόστος Πλήθος ακμών s v u t y x x δ(s,t)=(s,y,t) u v t y
Δυναμικός Προγραμματισμός - Προβλήματα Ελάχιστες Αξιόπιστες Διαδρομές Πρόβλημα Έστω ένα έμβαρο γράφημα G, δύο κόμβοι του s και t, και ένας ακέραιος k. Θέλουμε να υπολογίσουμε μια ε.δ στο G s ~> t η οποία να χρησιμοποιεί το πολύ k ακμές!!!
Ελάχιστες Αξιόπιστες Διαδρομές Υπάρχει κάποιος αποτελεσματικός τρόπος να προσαρμόσουμε τον αλγόριθμο του Dijkstra στο νέο μας πρόβλημα? Μάλλον Όχι!!! Ο αλγόριθμος του Dijkstra εστιάζει στο μήκος κάθε ε.δ χωρίς να «θυμάται» το πλήθος των ακμών στη διαδρομή! Ακόμα και να το θυμόταν, δεν θα μπορούσε να επιλέξει την ελάχιστη με το πολύ k ακμές!!!
Ελάχιστες Αξιόπιστες Διαδρομές Μήπως ο Δυναμικός Προγραμματισμός μας λύνει το πρόβλημα? Ας ορίσουμε για κάθε κόμβο v και κάθε ακέραιο i k d(s,v,i) = d(v,i) να είναι το κόστος της ελάχιστης διαδρομής s ~> v η οποία να χρησιμοποιεί το πολύ i ακμές Προφανώς, ισχύει: d(s,) = d(v,) = v V
Ελάχιστες Αξιόπιστες Διαδρομές Πολύ φυσικά, η γενική εξίσωση ενημέρωσης, είναι: d(v,i) = min{d(v,i-), min (u,v) E {d(u,i-)+ w(u,v)}} Αυτό ήταν Τελειώσαμε!!! Ο αλγόριθμος πλέον γράφετε πολύ εύκολα, σχεδόν μόνος του!!!
Ελάχιστες Αξιόπιστες Διαδρομές Αλγόριθμος K-shortest-path(G,w, k). Initialize(). for i to k for each v V-{s} for each u Adj(v) for i to n C(i,) = C(s,) = d(v,i) min {C(v, i-), C(u, i-) + w(u,v)}. return C(k)
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - d(v,) = s p r x y t r -7 x t y
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - d(v,) = d(v,) = s p r x y t - r -7 x t y
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - d(v,) = d(v,) = d(v,) = s p r x y t - - r -7 x y d(y,) = min {d(y,), min (u,y) E {d(u,) + w(u,y)}} = min{, min{+, +, +}} = t
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - s p r x y t d(v,) = d(v,) = d(v,) = - - d(v,) = - d(y,) r -7 = min{, min{+, +, +}} = x t y
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - s p r x y t d(s,v,) d(s,v,) d(s,v,) - - d(s,v,) d(s,v,) - - r -7 x t y
Δυναμικός Προγραμματισμός - Προβλήματα Πανζευκτικές Ελάχιστες Διαδρομές Κίνητρο Σε πολλές εφαρμογές, χρειαζόμαστε να έχουμε όχι μόνο την ε.δ μεταξύ s ~> t ενός G τάξης n, αλλά μεταξύ κάθε ζεύγους κόμβων του!!! Μπορούμε να λύσουμε το πρόβλημα? Φυσικά ΝΑΙ!!! Εφαρμόζοντας n φορές τον αλγόριθμο των Bellman-Ford (επιτρέπονται αρνητικά βάρη)
Δυναμικός Προγραμματισμός - Προβλήματα Πανζευκτικές Ελάχιστες Διαδρομές Σε πόσο χρόνο? Ο Bellman-Ford εκτελείται σε O(nm) χρόνο, και επομένως: O(nm) Μπορούμε καλύτερα? ΝΑΙ!!! με τον αλγόριθμο των Floyd-Watshall ο οποίος βασίζεται σε ΔΠ, σε χρόνο: O(n)
Δυναμικός Προγραμματισμός - Προβλήματα Πανζευκτικές Ελάχιστες Διαδρομές Πρόβλημα Έστω ένα έμβαρο γράφημα G (με αρνητικά ακμικά βάρη) τάξης n και μεγέθους m. Θέλουμε να υπολογίσουμε τις ε.δ στο G x y για κάθε ζεύγος κόμβων (x, y), x, y V(G)!!!
Πανζευκτικές Ελάχιστες Διαδρομές Το να λύσουμε το πρόβλημα υπολογίζοντας όλο και περισσότερα ζεύγη κόμβων δε βοηθά, καθώς οδηγεί πίσω στον αλγόριθμο O(nm)!!! Κρίσιμο Ερώτημα ΔΠ Υπάρχει κάποιο καλό υποπρόβλημα για τον υπολογισμό των αποστάσεων μεταξύ κάθε ζεύγους κόμβων? Πρέπει να επινοήσουμε κάτι έξυπνο! να βρούμε μια νέα ιδέα!!!!!!!
Πανζευκτικές Ελάχιστες Διαδρομές Να μια ιδέα!!! Ας πάρουμε μια ε.δ x ~> y x u u u uk y Ενδιάμεσοι Κόμβοι Υποθέστε ότι δεν επιτρέπουμε ενδιάμεσους κόμβους!!! Τότε, μπορούμε να λύσουμε το πρόβλημα των π.ε.δ, καθώς για κάθε ζεύγος κόμβων x, y του G: η ε.δ x ~> y είναι η ακμή (x, y), εάν υπάρχει!!!
Πανζευκτικές Ελάχιστες Διαδρομές Να μια ιδέα!!! Ας πάρουμε μια ε.δ x ~> y x u u u uk y Ενδιάμεσοι Κόμβοι Εάν διευρύνουμε σταδιακά το σύνολο των ενδιάμεσων κόμβων, έναν κάθε φορά, ενημερώνοντας τα μήκη των ε.δ σε κάθε διεύρυνση, τι μπορούμε να πετύχουμε!!!
Πανζευκτικές Ελάχιστες Διαδρομές Να μια ιδέα!!! Ας πάρουμε μια ε.δ x ~> y x u u u uk y Ενδιάμεσοι Κόμβοι Μπορούμε να διευρύνουμε το σύνολο των ενδιάμεσων κόμβων έως να γίνει όλο το σύνολο κόμβων V!!! Τότε όμως έχουμε λύσει το πρόβλημα των π.ε.δ!!!
Πανζευκτικές Ελάχιστες Διαδρομές Τυποποίηση της ιδέας!!! Αριθμούμε τους κόμβους του V ως {,,,n} d(i,j,k) συμβολίζουμε το μήκος της ε.δ i ~> j με ενδιάμεσους κόμβους ΜΟΝΟ από το σύνολο {,,,k} Επομένως, d(i,j,) = w(i,j) εάν υπάρχει η ακμή (i,j)
Πανζευκτικές Ελάχιστες Διαδρομές Τι πρέπει να ελέγξουμε όταν επεκτείνουμε το ενδιάμεσο σύνολο κατά ένα κόμβο? {,,,k-} {,,,k} Πρέπει να επανεξετάσουμε όλα τα ζεύγη κόμβων i, j και να ελέγξουμε εάν η χρήση του k ως ενδιάμεσου κόμβου μας δίνει μια συντομότερη διαδρομή i ~> j d(i,k,k-) k d(k,j,k-) j i d(i,j,k-) αυτό είναι πολύ εύκολο!!!
Πανζευκτικές Ελάχιστες Διαδρομές Μια ε.δ i ~> j η οποία χρησιμοποιεί τον k μαζί με άλλους κόμβους χαμηλότερης αρίθμησης {,,,k-}, περνάει από τον k μία μόνο φορά!!! γιατί δεν υπάρχουν αρνητικοί κύκλοι d(i,k,k-) k d(k,j,k-) j i d(i,j,k-)
Πανζευκτικές Ελάχιστες Διαδρομές Έτσι, η χρήση του k ως ενδιάμεσου κόμβου μας δίνει μια συντομότερη διαδρομή i ~> j εάν και μόνο εάν: d(i,k,k-) + d(k,j,k-) < d(i,j,k-) d(i,k,k-) k d(k,j,k-) j i d(i,j,k-) οπότε η τιμή: d(i,j,k) θα πρέπει να ενημερωθεί ανάλογα!!!
Πανζευκτικές Ελάχιστες Διαδρομές Σχέση Επίλυσης Υποπροβλημάτων d(i,j,) = w(i,j) εάν υπάρχει η ακμή (i,j) Εξίσωση ενημέρωσης (ή αναδρομική σχέση) : w(i,j) if k = min {d(i,j,k-), d(i,k,k-) + d(k,j,k-)} if k d(i,j,k) =
Πανζευκτικές Ελάχιστες Διαδρομές Αλγόριθμος Floyd-Warshall All-pair-Shortest-Paths(G,w). Initialize(G). for k to n for i to n for j to k for i to n for j to n C(i,i) = for all (i,j) E d(i,j,) = w(i,j) d(i,j,k) min {d(i,j,k-), d(i,k,k-) + d(k,j,k-)}. return d(i,j,n)
Πανζευκτικές Ελάχιστες Διαδρομές Πολυπλοκότητα Το πιο χρονοβόρο βήμα:. for k to n for i to n for j to k d(i,j,k) min {d(i,j,k-), d(i,k,k-) + d(k,j,k-)} Συνολική Πολυπλοκότητα Αλγόριθμου: O(n)
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 -
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + } =
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + } =
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + } =
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + 7} =
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) - - - - - - - 7
Αλγοριθμικές Τεχνικές & Προβλήματα Ποιες Αλγοριθμικές Τεχνικές έχουμε δει έως τώρα? Αλγοριθμικές Τεχνικές, όπως: Διαίρει-και-Βασίλευε Άπληστη Επιλογή Πρόσφατα, προσθέσαμε και την τεχνική Δυναμικός Προγραμματισμός Α S U N N - Y S N O W Y Β C D
Αλγοριθμικές Τεχνικές & Προβλήματα Τι είδους Προβλήματα έχουμε δει έως τώρα? Προβλήματα των οποίων η λύση απαιτεί Αλγορίθμους για εργασίες βελτιστοποίησης, όπως: Ελάχιστες διαδρομές Ελάχιστα συνδετικά (επικαλυπτικά) δένδρα Μέγιστες αύξουσες υπακολουθίες, κλπ Ποιο το χαρακτηριστικό της λύσης του? Αναζητούμε λύση η οποία: (α) Ικανοποιεί ορισμένους περιορισμούς, και (β) Είναι η καλύτερη δυνατή ως προς κάποιο κριτήριο!!!
Γραμμικός Προγραμματισμός Σημαντικό Εργαλείο Τέχνης για τέτοια προβλήματα Βελτιστοποίησης Γραμμικός Προγραμματισμός - LP
Γραμμικός Προγραμματισμός Σημαντικό Εργαλείο Τέχνης για τέτοια προβλήματα Βελτιστοποίησης Γραμμικός Προγραμματισμός - LP Κύριο χαρακτηριστικό του LP Περιγράφει εργασίες βελτιστοποίησης στις οποίες: Οι Περιορισμοί και το Κριτήριο βελτιστοποίησης είναι Γραμμικές Συναρτήσεις!!!
Γραμμικός Προγραμματισμός Παράδειγμα Βρες τις τιμές των μεταβλητών x και x οι οποίες max x + x με τους περιορισμούς x + x x + x -x + x Βέλτιστο Σημείο x, x Περιορισμοί Αντικειμενική Συνάρτηση Σύνολο Περιορισμών ή Εφικτών Λύσεων Γενικά, επειδή η ΑΣ είναι γραμμική, παίρνει max (ή min) σε γωνιακό σημείο του ΣΠ, εάν αυτό είναι φραγμένο!!!
Προβλήματα Γραμμικός Προγραμματισμός Μεγιστοποίηση Κέρδους Ένα εργοστάσιο παράγει δύο προϊόντα: Α και Β Ανά Μονάδα πώλησης: από το Α κερδίζει, και από το Β κερδίζει Οι ημερήσιες απαιτήσεις: για το Α είναι Μ, και για το Β είναι Μ το πολύ Επίσης, το εργοστάσιο μπορεί να παράγει συνολικά Μ/ημέρα! Πόση πρέπει να είναι η ημερήσια παραγωγή από κάθε προϊόν Α και Β, ώστε να επιτευχθεί το max κέρδος?