Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Αλγόριθμοι και Πολυπλοκότητα Παραδείγματα Δυναμικού Προγραμματισμού Προσαρμογή από διαφάνειες Σταύρου Νικολόπουλου (Παν. Ιωαννίνων)
Δυναμικός Προγραμματισμός Αλγοριθμική Τεχνική Δυναμικός Προγραμματισμός Αλγόριθμοι και Πολυπλοκότητα 7-8!!!!!
Δυναμικός Προγραμματισμός Αλγοριθμική Τεχνική Δυναμικός Προγραμματισμός!!!!! ΕΊΝΑΙ Τεχνική Σχεδίασης Αλγορίθμων!!! με ευρύτατο πεδίο εφαρμογών! και με χρήση εκεί όπου άλλες πιο ειδικευμένες τεχνικές αποτυγχάνουν! και, όχι Τεχνική Προγραμματισμού!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Γιατί αυτός ο όρος και η ονομασία?? Δυναμικός Προγραμματισμός?????? Επινοήθηκε από τον Richard Bellman το Τότε ο προγραμματισμός ήταν μια απόκρυφη, σπάνια δραστηριότητα την οποία ασκούσαν τόσο πολύ λίγοι που δεν άξιζε καν να την αναφέρουν. Ο όρος «προγραμματισμός» την εποχή εκείνη σήμαινε «σχεδιασμός ενεργειών» (planning), ενώ ο όρος «δυναμικός προγραμματισμός» σήμαινε «πολυεπίπεδο, χρονικά μεταβαλλόμενο σχεδιασμό πολλαπλών διεργασιών»!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ας θυμηθούμε δύο γνωστά μας προβλήματα! Ακολουθία Fibonacci Ελάχιστες διαδρομές σε DAG r s Αλγόριθμοι και Πολυπλοκότητα 7-8 u - v - x t 8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) if n = then return if n = then return return fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib(n) = fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib() = fib() + fib() fib(n) = fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib() = fib() + fib() fib(n) = fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci fib() = fib() + fib() fib(n) = fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci 8 fib() = fib() + fib() fib(n) = fib(n-) + fib(n-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία Fibonacci i i- i- fib(i) = fib(i-) + fib(i-) Μπορώ να λύσω ένα υποπρόβλημα εύκολα εάν έχω «βρει» και «κρατήσει» τις λύσεις «μικρότερων» υποπροβλημάτων!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ακολουθία 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) Κρατήστε αυτά τα στοιχεία του Αλγόριθμου!!! Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s Αλγόριθμοι και Πολυπλοκότητα 7-8 u v x t 8 8
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x t 8 Γιατί αυτό το χαρακτηριστικό βοηθάει στον υπολογισμό των ε.δ από ένα κόμβο, έστω τον s? Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x t 8 Ας εστιάσουμε σε ένα κόμβο, έστω στον κόμβο x Ο μόνος τρόπος για να φθάσουμε στον x είναι μέσω των προκατόχων του: v ή u!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Χαρακτηριστικό ενός DAG: Τοπολογική Ταξινόμηση r s u v x t 8 Επομένως, για να βρούμε την ε.δ από τον s μέχρι τον x, αρκεί μόνο να συγκρίνουμε τις δύο διαδρομές: d(x) = min{d(v) +, d(u) + } Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Μια τέτοια σχέση ισχύει για κόμβο!!! π.χ., για τον κόμβο t : r s u v x t 8 d(t) = min{ d(x)+, d(v)+, d(u)+8 } Αν υπολογίσουμε τις τιμές d(.) με τη σειρά της Τοπoλογικής Ταξινόμησης τότε: Όταν φθάσουμε στον κόμβο x θα έχουμε όλες τις πληροφορίες για τον υπολογισμό του d(x). Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Αλγόριθμος SP-DAG r. Initialize(G,s). Topological-Sorting(G) s u v x t 8. για κάθε κόμβο x V-{s} σε τοπολογική σειρά: d(x) = min(u,x) E{d(u) + w(u,x)}. return d(.) Κρατήστε αυτά τα στοιχεία του Αλγόριθμου!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Παρατηρήσεις!!! r s Ο αλγόριθμος SP-DAG επιλύει υποπροβλήματα, της μορφής: u v x t 8 { d(x) x V-{s} } Αρχίζει από το «μικρότερο» υποπρόβλημα και προχωράει σε «μεγαλύτερα» υποπροβλήματα!!! Ένα υποπρόβλημα το θεωρούμε «μεγάλο» εάν πρέπει να λύσουμε πολλά άλλα υποπροβλήματα πριν φθάσουμε σε αυτό!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Ελάχιστες διαδρομές σε DAG Παρατηρήσεις!!! r s u v x t Σε κάθε κόμβο x ο αλγόριθμος SP-DAG υπολογίζει μια συνάρτηση των τιμών των ε.δ των προκατόχων του κόμβου x 8 Εδώ, η συνάρτηση μας είναι ένα ελάχιστο αθροισμάτων! Θα μπορούσε κάλλιστα να είναι μια συνάρτηση: μεγίστου οπότε θα υπολογίζαμε τις max διαδρομές, ή ελαχίστου γινομένων οπότε θα υπολογίζαμε την διαδρομή με το ελάχιστο γινόμενο ακμών Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Η Βασική Ιδέα!!! Αλγόριθμοι και Πολυπλοκότητα 7-8!!!!!
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Η Βασική Ιδέα!!!... Λύσης προβλήματος Π με ΔΠ: Yπολογίζουμε ένα σύνολο υποπροβλημάτων του Π Eπινοούμε μια σχέση για την λύση ενός υποπροβλήματος Λύνουμε τα υποπρ/ματα ξεκινώντας από «μικρότερα», αποθηκεύουμε τις λύσεις τους, και προχωράμε προς «μεγαλύτερα» χρησιμοποιώντας τις αποθηκευμένες λύσεις των μικρότερων!!! Παίρνουμε τη λύση του αρχικού μας προβλήματος Π, λύνοντας όλα τα υποπ/ματα με καθορισμένη σειρά!!! Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Προσοχή!!! Στο ΔΠ το «μοντέλο της τεχνικής» θα μπορούσαμε να το θεωρήσουμε ότι είναι ένα γράφημα G τύπου DAG!!! Οι κόμβοι του G αντιστοιχούν στα υποπροβλήματα και οι ακμές του στις εξαρτήσεις ανάμεσα σε αυτά: Α Β Το Α θεωρείται «μικρότερο» υποπρόβλημα από το Β, ή Για να λύσουμε το Β χρειαζόμαστε την λύση του Α!!! Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Θεμελιώδης Ιδιότητα του ΔΠ!!! Υπάρχει διάταξη των υποπροβλημάτων και μια σχέση που δείχνει πως θα λυθεί ένα υποπρόβλημα έχοντας τις λύσεις «μικροτέρων» υποπρ/των, δηλαδή, υποπρ/των που εμφανίζονται νωρίτερα στη διάταξη! Διάταξη: Σχέση: Α Β C D E Μεγάλο-ΥΠ = f(μικρότερα-υπ) Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Διαίρει-και-Βασίλευε vs ΔΠ!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Διαίρει-και-Βασίλευε vs ΔΠ!!! Στην τεχνική Δ-και-Β ένα Π μεγέθους n εκφράζεται συναντήσει υποπροβλημάτων Π(), Π(),, Π(k) που είναι σημαντικά μικρότερα, για παράδειγμα n/, και δεν επικαλύπτονται!!! Λόγω αυτής της απότομης μείωσης του μεγέθους του Π, το δένδρο της αναδρομής έχει: O(logn) βάθος O(n) πλήθος κόμβων!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Διαίρει-και-Βασίλευε vs ΔΠ!!! Αντίθετα, στην τεχνική του ΔΠ τα υποπροβλημάτων Π(), Π(),, Π(k) είναι ελάχιστα μικρότερα, για παράδειγμα το Π(i) βασίζεται στο Π(i-), και επικαλύπτονται!!! Π() Εδώ συνήθως, το δένδρο της αναδρομής έχει: Π() Π() Π() O(n) βάθος O(cn) πλήθος κόμβων, c> Π() Π() Π() Εκθετικό πλήθος κόμβων!!! Π() Αλγόριθμοι και Πολυπλοκότητα 7-8
Δυναμικός Προγραμματισμός Χαρακτηριστικά Δυναμικού Προγραμματισμού Ο ΔΠ είναι μια πολύ ισχυρή αλγοριθμική τεχνική!!! με ευρύτατο πεδίο εφαρμογών!!! Συνοπτικά, στο ΔΠ: υπολογίζουμε ένα σύνολο υποπροβλημάτων του Π, λύνουμε κάθε υποπρόβλημα μία μόνο φορά, αποθηκεύουμε τη λύση του, και χρησιμοποιούμε αυτή, εάν χρειαστεί να το ξαναλύσουμε!!! Αποφεύγουμε έτσι να λύνουμε ξανά-και-ξανά πολλές φορές τα ίδια-και-ίδια υποπροβλήματα!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα Δυναμικού Προγραμματισμού Μέγιστες Αύξουσες Υποακολουθίες Διορθωτική Απόσταση Πολλαπλασιασμός Ακολουθίας Πινάκων Ελάχιστες Αξιόπιστες Διαδρομές Πανζευκτικές Ελάχιστες Διαδρομές Σακίδιο (Knapsack) Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Μέγιστες Αύξουσες Υποακολουθίες Πρόβλημα Μας δίδεται μια ακολουθία n αριθμών Α = (a, a,, an) και μας ζητείται να υπολογίσουμε μία αύξουσα υπακολουθία της Α με το μέγιστο μήκος. Μια ακολουθία Α = (ai, ai,, aik) είναι αύξουσα υπακολουθία της Α εάν: ai < ai < < aik και i < i < < ik n Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Μέγιστες Αύξουσες Υποακολουθίες Παράδειγμα Η μέγιστη αύξουσα υπακολουθία της Α = (,, 8,,,,, 7) είναι η Α = (,,, ) με μήκος. Οι υπακολουθίες Β = (,,, ) και C = (,,, 7) της Α δεν είναι ζητούμενες διότι δεν είναι γνησίως αύξουσες. Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ Α = (,, 8,,,,, 7) 8 7 Δημιουργούμε ένα γράφημα G με ΟΛΕΣ τις επιτρεπτές μεταβάσεις!!! Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 8 7 Παρατηρήστε ότι: () Το γράφημα G είναι DAG!!! () Υπάρχει - αντιστοιχία ανάμεσα στις αύξουσες υπακολουθίες και στις διαδρομές αυτού του DAG!!! 8 Αλγόριθμοι και Πολυπλοκότητα 7-8 7 8
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 8 7 Παρατηρήστε ότι: () Το γράφημα G είναι DAG!!! () Υπάρχει - αντιστοιχία ανάμεσα στις αύξουσες υπακολουθίες και στις διαδρομές αυτού του DAG!!! 8 Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 8 7 Παρατηρήστε ότι: () Το γράφημα G είναι DAG!!! () Υπάρχει - αντιστοιχία ανάμεσα στις αύξουσες υπακολουθίες και στις διαδρομές αυτού του DAG!!! Επομένως, το πρόβλημά μας ανάγεται στον υπολογισμό της μεγαλύτερης διαδρομής στο γράφημα G!!! Υπολογισμός: Μεγαλύτερης διαδρομής σε DAG!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 8 7 Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 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
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 8 7 Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 8 i L(i) L(i) = + max{l(j) : (j,i) E(G)} Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Θα χρησιμοποιήσουμε ΔΠ 8 7 Ορίστε ο αλγόριθμος:. για i =,,, n: L(i) = + max{l(j) : (j,i) E(G)}. return max i n{l(i)} L(i) = είναι το μήκος της μεγαλύτερης διαδρομής, ή ισοδύναμα, της μέγιστης αύξουσας υπακολουθίας, που τελειώνει στον κόμβο i =,,, n Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Μέγιστη Αύξουσα Υπακολουθία: Α = (,, 8,,,,, 7) 8 7 Η μέγιστη αύξουσα υπακολουθία έχει μήκος Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Μέγιστη Αύξουσα Υπακολουθία: Α = (,, 8,,,,, 7) 8 7 7 Ποια είναι η υπακολουθία? Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Μέγιστη Αύξουσα Υπακολουθία: Α = (,, 8,,,,, 7) 8 7 7 Ποια είναι η υπακολουθία? Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Μέγιστη Αύξουσα Υπακολουθία: Α = (,, 8,,,,, 7) 8 7 7 Ποια είναι η υπακολουθία? Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Μέγιστη Αύξουσα Υπακολουθία: Α = (,, 8,,,,, 7) Λύση! (,,, 7) Ποια είναι η υπακολουθία? Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Γιατί είναι ΔΠ? για i =,,, n: L(i) = + max{l(j) : (j,i) E(G)} Ορίσαμε, υποπροβλήματα: {L(i) : i n} που έχουν τη Θεμελιώδη Ιδιότητα του ΔΠ!!! Υπάρχει μια διάταξη των υποπροβλημάτων, και μια σχέση που δείχνει πως θα λυθεί ένα υποπρόβλημα έχοντας τις λύσεις «μικροτέρων» υποπροβλημάτων!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Μέγιστες Αύξουσες Υποακολουθίες Πολυπλοκότητα για i =,,, n: L(i) = + max{l(j) : (j,i) E(G)} Το αρχικό μας πρόβλημα λύνεται με ένα «πέρασμα» των n = A κόμβων Ο υπολογισμός του L(i) απαιτεί χρόνο ανάλογο του βαθμού εισόδου του κόμβου i του G Συνολικά, χρόνο τάξης Ε(G) O(n) Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση Κίνητρο Όταν ένας ελεγκτής ορθογραφίας συναντά μια πιθανή ανορθόγραφη λέξη Λεξικό αα αn εξετάζει το λεξικό του για άλλες λέξεις που είναι «κοντά» στην ανορθόγραφη!! ββ βm γγ γk ωω ωp Ποια είναι η κατάλληλη έννοια της εγγύτητας δύο λέξεων ή συμβολοσειρών? Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση Κίνητρο Ένα μέτρο της εγγύτητας ανάμεσα σε δύο λέξεις ή συμβολοσειρές α και β, είναι οι διορθώσεις που πρέπει να κάνουμε, έτσι ώστε α β ή β α Ποιες διορθώσεις μπορούμε να κάνουμε? Εισαγωγή συμβόλου Διαγραφή συμβόλου πράξεις σε συμβολοσειρές Αντικατάσταση συμβόλου Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SNOWY και SUNNY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N - - N Y S N O W Y - S N O W - Y Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SNOWY και SUNNY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων S U N N - Y S U N - - N Y - Y S U N O N W - U S N O W- S N Y Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση Παράδειγμα Έστω οι δύο λέξεις SNOWY και SUNNY. Μπορούμε να πάρουμε την μία από την άλλη με διαφορετικά σύνολα αλλαγών/πράξεων W Y S U N NO S N O W Y Αλγόριθμοι και Πολυπλοκότητα 7-8 W S S U N O - N Y - S N O W - Y
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση Ορίζουμε ως κόστος διόρθωσης δύο συμβολοσειρών α και β, το πλήθος των πράξεων που πρέπει να κάνουμε για να πάρουμε από την μία στην άλλη!!! S U N N - Y S U N - - N Y S N O W Y - S N O W - Y Κόστος Αλγόριθμοι και Πολυπλοκότητα 7-8 Κόστος
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση To ελάχιστο κόστος διόρθωσης δύο συμβολοσειρών ονομάζεται διορθωτική απόσταση (edit distance) αυτών. S U N N - Y S U N - - N Y S N O W Y - S N O W - Y Κόστος Αλγόριθμοι και Πολυπλοκότητα 7-8 Κόστος
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση To ελάχιστο κόστος διόρθωσης δύο συμβολοσειρών ονομάζεται διορθωτική απόσταση (edit distance) αυτών. S U N N - Y S N O W Y Ε(SUNNY, SNOWY) = Κόστος Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Διορθωτική Απόσταση Πρόβλημα Μας δίνονται δύο συμβολοσειρές α και β με n και m σύμβολα, αντίστοιχα, α, α,, αn και β, β,, βm και μας ζητείται να υπολογίσουμε την διορθωτική απόσταση Ε(α, β) αυτών. Αλγόριθμοι και Πολυπλοκότητα 7-8
Διορθωτική Απόσταση Στο ΔΠ το πιο κρίσιμο ερώτημα είναι το εξής: Ποια είναι τα υποπροβλήματα? Όταν αυτά επιλέγονται ώστε να έχουν την Θεμελιώδη Ιδιότητα του ΔΠ!!! Υπάρχει μια διάταξη των υποπροβλημάτων, και μια σχέση που δείχνει πως θα λυθεί ένα υποπρόβλημα έχοντας τις λύσεις «μικροτέρων» υποπροβλημάτων!!! η διατύπωση ενός αλγόριθμου είναι εύκολη υπόθεση!!! Τότε, επαναληπτικά επιλύουμε τα υποπροβλήματα κατά σειρά αυξανόμενου μεγέθους! Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Διορθωτική Απόσταση Ποιο είναι ένα καλό υποπρόβλημα? Θέλουμε την Ε(α,β) ανάμεσα στις δύο συμβολοσειρές α[..n]=(α, α,, αn) και β[..m]= (β, β,, βm) Είναι αυτό που «προχωράει» τη λύση του συνολικού προβλήματος!!! Πρέπει να επινοήσουμε κάτι έξυπνο! Τι θα λέγατε να εξετάσουμε την Ε( ) σε προθέματα (prefix) των α και β! Αλγόριθμοι και Πολυπλοκότητα 7-8!!!!!! 8
Διορθωτική Απόσταση Ας πάρουμε δύο προθέματα (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,) Αλγόριθμοι και Πολυπλοκότητα 7-8
Διορθωτική Απόσταση Ας πάρουμε δύο προθέματα (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 β[..] Το υποπρόβλημα: Ε(,) Αλγόριθμοι και Πολυπλοκότητα 7-8 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 β[..] Το υποπρόβλημα: Ε(,) Αλγόριθμοι και Πολυπλοκότητα 7-8 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 β[..] ΤΕΛΙΚΟΣ ΣΤΟΧΟΣ: Αλγόριθμοι και Πολυπλοκότητα 7-8 E(, ) 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 ΒΕΛΤΙΣΤΗ ΛΥΣΗ: Αλγόριθμοι και Πολυπλοκότητα 7-8 E(, ) = 7
Διορθωτική Απόσταση Θα πρέπει να εκφράσουμε το υποπρόβλημα Ε(i,j) συναρτήσει μικρότερων υποπροβλημάτων!!! Τι γνωρίζουμε για την καλύτερη διόρθωση (στοίχιση) ανάμεσα στις συμβολοσειρές α[..i] και β[..j]? Γνωρίζουμε ότι για την δεξιότερη στήλη ισχύει μία από τις ακόλουθες τρεις περιπτώσεις : α[i] Αλγόριθμοι και Πολυπλοκότητα 7-8 ή - β[j] ή α[i] β[j] 7
Διορθωτική Απόσταση Κόστος σε κάθε περίπτωση : α[i] - Αλγόριθμοι και Πολυπλοκότητα 7-8 ή β[j] ή α[i] β[j] 7
Διορθωτική Απόσταση Κόστος σε κάθε περίπτωση : α[i] η Περίπτωση: ή β[j] ή α[i] β[j] Επιφέρει κόστος Και απομένει να διορθώσουμε (στοιχίσουμε) τις συμβολοσειρές α[..i-] και β[..j] Όμως, αυτό είναι ακριβώς το υποπρόβλημα Ε(i-, j) Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Διορθωτική Απόσταση Κόστος σε κάθε περίπτωση : α[i] η Περίπτωση: ή β[j] ή α[i] β[j] Επιφέρει κόστος Και απομένει να διορθώσουμε (στοιχίσουμε) τις συμβολοσειρές α[..i] και β[..j-] Όμως, αυτό είναι ακριβώς το υποπρόβλημα Ε(i, j-) Αλγόριθμοι και Πολυπλοκότητα 7-8 77
Διορθωτική Απόσταση Κόστος σε κάθε περίπτωση : α[i] η Περίπτωση: ή β[j] ή α[i] β[j] Επιφέρει κόστος (εάν α[i] β[j]) ή κόστος (εάν α[i]=β[j]) Και απομένει να διορθώσουμε τις α[..i-] και β[..j-] Τώρα, το υποπρόβλημα είναι ακριβώς το Ε(i-, j-) Αλγόριθμοι και Πολυπλοκότητα 7-8 78
Διορθωτική Απόσταση Επομένως, έχουμε εκφράσει το Ε(i, j) συναρτήσει τριών μικροτέρων υποπροβλημάτων: Ε(i-, j) Ε(i, j-) Ε(i-, j-) Όμως, δεν γνωρίζουμε ποιο από αυτά είναι σωστό!!! Οπότε θα τα δοκιμάσουμε όλα και θα επιλέξουμε το καλύτερο: Ε(i,j) = min {+Ε(i-,j), +Ε(i,j-), { } +Ε(i-,j-)} Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Διορθωτική Απόσταση Αλγόριθμος 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) Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Διορθωτική Απόσταση Αλγόριθμος Edit-distance(a[..n],b[..m]). Initialize(). for i to n for j to m Συνολική Πολυπλοκότητα O(nm) E(i,j) min {+E(i-,j), +E(i,j-), { } +E(i-,j-)}. return E(n,m) Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Διορθωτική Απόσταση Παράδειγμα Ας πάρουμε τις συμβολοσειρές E X P O N E N T I A L και το υποπρόβλημα Ε(, ) P O L Y N O M I A L Το Ε(,) αντιστοιχεί στις συμβολοσειρές EXPO και POL Εδώ, θέσαμε το Ερώτημα!!! Τι ισχύει για την δεξιότερη στήλη σε μια βέλτιστη λύση του υποπροβλήματος Ε(,)? Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Διορθωτική Απόσταση Παράδειγμα Ας πάρουμε τις συμβολοσειρές και το υποπρόβλημα Ε(, ) 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{+ε(,), +Ε(,), +Ε(,)} Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Διορθωτική Απόσταση Παράδειγμα Οι λύσεις όλων των υποπρ/μάτων Ε(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 Ε(,) = Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Διορθωτική Απόσταση Παράδειγμα Συνολικά, τα υποπροβλήματα Ε(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) Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Διορθωτική Απόσταση Παράδειγμα Αλγόριθμος 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 Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Προβλήματα - Δυναμικός Προγραμματισμός Πολλαπλασιασμός Ακολουθίας Πινάκων Έστω ότι θέλουμε να πολλαπλασιάσουμε πίνακες Α B C D διαστάσεων,, και Ο πολλαπλασιασμός πινάκων δεν είναι αντιμεταθετικός (Α B B Α), αλλά είναι προσεταιριστικός, που σημαίνει: (Α B) C = Α (B C) Μπορούμε να υπολογίσουμε το γινόμενο των πινάκων μας με πολλούς διαφορετικούς τρόπους! Αλγόριθμοι και Πολυπλοκότητα 7-8 87
Προβλήματα - Δυναμικός Προγραμματισμός Πολλαπλασιασμός Ακολουθίας Πινάκων Έστω ότι θέλουμε να πολλαπλασιάσουμε πίνακες Α B C D διαστάσεων,, και Ερώτημα!!! Υπάρχει διαφορά? Εάν ΝΑΙ!!! Αλγόριθμοι και Πολυπλοκότητα 7-8 Ποιος τρόπος είναι ο καλύτερος? 88
Προβλήματα - Δυναμικός Προγραμματισμός Πολλαπλασιασμός Ακολουθίας Πινάκων Πολλαπλασιασμός Α B C D O πολλ/σμός δύο πινάκων Α B διαστάσεων n m και m p απαιτεί n m p πολλαπλασιασμούς Διάταξη Παρενθέσεων Α Β C D Υπολογισμός Κόστους Κόστος Α ((B C) D) + +. (Α (B C)) D (Α B) (C D) + +. Αλγόριθμοι και Πολυπλοκότητα 7-8 + + 7. 8
Προβλήματα - Δυναμικός Προγραμματισμός Πολλαπλασιασμός Ακολουθίας Πινάκων Πρόβλημα Μας δίδεται μια ακολουθία n πινάκων (συμβατών διαστάσεων) Α, Α,, Αn και μας ζητείται να υπολογίσουμε το γινόμενο Α Α Αn κάνοντας το ελάχιστο πλήθος πολλαπλασιασμών. Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Από το εισαγωγικό παράδειγμα είδαμε ότι η σειρά των πολλαπλασιασμών επηρεάζει πολύ τον χρόνο επίλυσης του προβλήματος!!!! Διάταξη Παρενθέσεων Υπολογισμός Κόστους Κόστος Α ((B C) D) + +. (Α (B C)) D (Α B) (C D) + +. + + 7. Να ακολουθήσουμε άπληστη προσέγγιση? επιλέγοντας πάντοτε το φθηνότερο διαθέσιμο πολλ/σμό! Αλγόριθμοι και Πολυπλοκότητα 7-8 Αποτυχία!!!
Πολλαπλασιασμός Ακολουθίας Πινάκων Πως θα βρούμε τη βέλτιστη σειρά των πολλ/μών? όταν θέλουμε να υπολογίσουμε το γινόμενο n πινάκων Α Α Α Αn- Αn διαστάσεων m m, m m, m m,, mn- mn-, mn- mn. Παρατήρηση Μια σειρά πολλ/μών μπορεί να αναπαρασταθεί πολύ φυσικά με ένα δυαδικό δένδρο: οι πίνακες αντιστοιχούν στα φύλλα οι ενδιάμεσοι κόμβοι είναι τα ενδιάμεσα γινόμενα η ρίζα είναι το τελικό αποτέλεσμα Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα ((Α B) C) D) D Α ((B C) D) Α D D C Α Β Αλγόριθμοι και Πολυπλοκότητα 7-8 (Α (B C)) D Β C Α Β C
Πολλαπλασιασμός Ακολουθίας Πινάκων Δένδρα - Διατάξεις ((Α B) C) D) D Α ((B C) D) Α D D C Α Β (Α (B C)) D Β C Α Β C Οι δυνατές διατάξεις με τις οποίες μπορεί να εκτελεστεί ο πολλ/σμός n πινάκων αντιστοιχούν στα διαφορετικά πλήρη δυαδικά δένδρα n κόμβων Πόσα είναι τα δένδρα αυτά? Ω(n) Δυστυχώς, το πλήθος τους είναι εκθετικό!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Δένδρα - Διατάξεις ((Α B) C) D) D Α ((B C) D) Α D D C Α Β (Α (B C)) D Β Α C Β C Ένα από τα δένδρα αυτά είναι βέλτιστο!! Εάν το δένδρο T είναι βέλτιστο, τότε είναι βέλτιστα και τα υποδένδρα Τ και Τ της ρίζας του. Ερώτηση! Αλγόριθμοι και Πολυπλοκότητα 7-8 Ποια είναι τα υποπροβλήματα που αντιστοιχούν στα υποδένδρα Τ και Τ του βέλτιστου δένδρου T?
Πολλαπλασιασμός Ακολουθίας Πινάκων Tα υποπροβλήματα που αντιστοιχούν στα υποδένδρα Τ και Τ της ρίζας ενός βέλτιστου δένδρου T είναι γινόμενα της μορφής: Α Α Αk Αk Αk+ Αn (Τ) (Τ) Γενικά, το υποπρόβλημα που αντιστοιχεί σε ένα υποδένδρο ενός βέλτιστου δένδρου T είναι γινόμενο της μορφής: Αi Αi+ Αj = Αi..j Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Ορίζουμε C[i,j] = min κόστος του πολλ/σμού Αi Αi+ Αj όπου κόστος είναι το πλήθος των πολλαπλασιασμών αυτού του υποπροβλήματος Το μικρότερο υποπρόβλημα το παίρνουμε όταν i = j, όπου σε αυτή την περίπτωση δεν έχουμε κάτι να πολλαπλασιάσουμε, οπότε C[i,j]= Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Πολλαπλασιασμός Ακολουθίας Πινάκων Θεωρούμε το βέλτιστο υποδένδρο Τij, j > i, για το γινόμενο Αi Αi+ Αj Η ρίζα του υποδένδρου Τij χωρίζει το γινόμενο Αi Αi+ Αj Α Αi Αi+ Αk Β C Αk+ Αk+ Αj σε δύο τμήματα, για κάποιο k, i k j. Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Πολλαπλασιασμός Ακολουθίας Πινάκων Τότε, το κόστος C[i,j] του υποδένδρου Τij θα είναι: το κόστος υπολογισμού των μερικών γινομένων Αi Αi+ Αk και Αk+ Αk+ Αj συν το κόστος του πολλ/σμού των πινάκων Αi..k και Αk+..j που είναι mi- mk mj. Διάσταση Αi mi- mi Πρέπει απλώς να βρούμε το σημείο χωρισμού k για το οποίο το κόστος C[i,j] είναι το μικρότερο!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Τότε, το κόστος C[i,j] του υποδένδρου Τij θα είναι: το κόστος υπολογισμού των μερικών γινομένων Αi Αi+ Αk και Αk+ Αk+ Αj συν το κόστος του πολλ/σμού των πινάκων Αi..k και Αk+..j που είναι mi- mk mj. C[i,j] = min i k j {C[i,k] + C[k+,j] + mi- mk mj} Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Σχέση που δίδει τη λύση ενός υποπροβλήματος από «μικρότερα» υποπροβλήματα C[i,j] = min i k j {C[i,k] + C[k+,j] + mi- mk mj} Αναδρομή? ΌΧΙ, ευχαριστώ!!! Ω(n) Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Σχέση που δίδει τη λύση ενός υποπροβλήματος από «μικρότερα» υποπροβλήματα C[i,j] = min i k j {C[i,k] + C[k+,j] + mi- mk mj} Δυναμικός Προγραμματισμός? ΝΑΙ, θα πάρω!!! Ερώτηση: Πόσα υποπροβλήματα έχω? Ένα για κάθε ζεύγος (i, j) O(n) Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Αλγόριθμος 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-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, C[,] = C[,] =... C[,] = Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, C[,] = =,7 C[,] = =,... C[,] = =, Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α Αλγόριθμοι και Πολυπλοκότητα 7-8,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-8 7
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, Τελικό Αποτέλεσμα: C[,] =, Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,7 7,87,7,87,,,7 7,, 7,,7,,, Ποια είναι η βέλτιστη λύση της Α Α Α? Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,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-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α,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 Αλγόριθμοι και Πολυπλοκότητα 7-8
Πολλαπλασιασμός Ακολουθίας Πινάκων Παράδειγμα Α Α Α Α Α Α C[,] =, Α Α Α Α Α Α ( Α Α Α ) ( Α Α Α ) ( Α ( Α Α ) ) ( ( Α Α ) Α ) Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Ελάχιστες Αξιόπιστες Διαδρομές Κίνητρο Σε εφαρμογές συμβαίνει συχνά τα βάρη των ακμών και οι ελάχιστες διαδρομές να μην απεικονίζουν ολόκληρη την αλήθεια!!! Για παράδειγμα, σε ένα δίκτυο επικοινωνιών, ακόμα και αν τα βάρη των ακμών απεικονίζουν πιστά τις καθυστερήσεις μετάδοσης, μπορεί να υπάρχουν άλλοι παράγοντες που εμπλέκονται σε μια ε.δ!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Ελάχιστες Αξιόπιστες Διαδρομές Κίνητρο Θα μπορούσε, για παράδειγμα, κάθε επιπλέον ακμή στην ε.δ να είναι ένας παράγοντας «αβεβαιότητας» που ελλοχεύει κίνδυνους απώλειας πακέτων! Τότε, θα θέλαμε να αποφύγουμε διαδρομές με πάρα πολλές ακμές! Αλγόριθμοι και Πολυπλοκότητα 7-8 s u v x t y
Προβλήματα - Δυναμικός Προγραμματισμός Ελάχιστες Αξιόπιστες Διαδρομές d(s,t)=(s,u,x,y,t) Κόστος Πλήθος ακμών s Κόστος Πλήθος ακμών Αλγόριθμοι και Πολυπλοκότητα 7-8 s v u v t y x x δ(s,t)=(s,y,t) u t y
Προβλήματα - Δυναμικός Προγραμματισμός Ελάχιστες Αξιόπιστες Διαδρομές Πρόβλημα Έστω ένα έμβαρο γράφημα G, δύο κόμβοι του s και t, και ένας ακέραιος k. Θέλουμε να υπολογίσουμε μια ε.δ στο G s t η οποία να χρησιμοποιεί το πολύ k ακμές!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Ελάχιστες Αξιόπιστες Διαδρομές Υπάρχει κάποιος αποτελεσματικός τρόπος να προσαρμόσουμε τον αλγόριθμο του Dijkstra στο νέο μας πρόβλημα? Μάλλον Όχι!!! Ο αλγόριθμος του Dijkstra εστιάζει στο μήκος κάθε ε.δ χωρίς να «θυμάται» το πλήθος των ακμών στη διαδρομή! Ακόμα και να το θυμόταν, δεν θα μπορούσε να επιλέξει την ελάχιστη με το πολύ k ακμές!!! Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Ελάχιστες Αξιόπιστες Διαδρομές Μήπως ο Δυναμικός Προγραμματισμός μας λύσει το πρόβλημα? Ας ορίσουμε για κάθε κόμβο v και κάθε ακέραιο i k d(s,v,i) = d(v,i) να είναι το κόστος της ελάχιστης διαδρομής s η οποία να χρησιμοποιεί το πολύ i ακμές v Προφανώς, ισχύει: d(s,) = d(v,) = Αλγόριθμοι και Πολυπλοκότητα 7-8 v V-{s} 8
Ελάχιστες Αξιόπιστες Διαδρομές Πολύ φυσικά, η γενική εξίσωση ενημέρωσης, είναι: d(v,i) = min{d(v,i-), min (u,v) E {d(u,i-)+ w(u,v)}} Αυτό ήταν Τελειώσαμε!!! Ο αλγόριθμος πλέον γράφεται πολύ εύκολα, σχεδόν μόνος του!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Ελάχιστες Αξιόπιστες Διαδρομές Αλγόριθμος 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) Αλγόριθμοι και Πολυπλοκότητα 7-8
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - d(v,) = s p r x y t Αλγόριθμοι και Πολυπλοκότητα 7-8 r -7 x t y
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - d(v,) = d(v,) = s p r x y t - Αλγόριθμοι και Πολυπλοκότητα 7-8 r -7 x t y
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - d(v,) = d(v,) = d(v,) = s p r x y t - - r -7 x t y d(y,) = min {d(y,), min (u,y) E {d(u,) + w(u,y)}} = min{, min{+, +, +}} = Αλγόριθμοι και Πολυπλοκότητα 7-8
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - s p r x y t d(v,) = d(v,) = d(v,) = - - d(v,) = - d(y,) r -7 x t y = min{, min{+, +, +}} = Αλγόριθμοι και Πολυπλοκότητα 7-8
Ελάχιστες Αξιόπιστες Διαδρομές Παράδειγμα p - s - s p r x y t d(s,v,) d(s,v,) d(s,v,) - - d(s,v,) d(s,v,) - - Αλγόριθμοι και Πολυπλοκότητα 7-8 r -7 x t y
Προβλήματα - Δυναμικός Προγραμματισμός Πανζευκτικές Ελάχιστες Διαδρομές Κίνητρο Σε πολλές εφαρμογές, χρειαζόμαστε να έχουμε όχι μόνο την ε.δ μεταξύ s t ενός G τάξης n, αλλά μεταξύ κάθε ζεύγους κόμβων του!!! Μπορούμε να λύσουμε το πρόβλημα? Φυσικά ΝΑΙ!!! Εφαρμόζοντας n φορές τον αλγόριθμο των BellmanFord (επιτρέπονται αρνητικά βάρη) Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Πανζευκτικές Ελάχιστες Διαδρομές Σε πόσο χρόνο? Ο Bellman-Ford εκτελείται σε O(nm) χρόνο, και επομένως: O(nm) Μπορούμε καλύτερα? ΝΑΙ!!! με τον αλγόριθμο των Floyd-Watshall ο οποίος βασίζεται σε ΔΠ, σε χρόνο: O(n) Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Προβλήματα - Δυναμικός Προγραμματισμός Πανζευκτικές Ελάχιστες Διαδρομές Πρόβλημα Έστω ένα έμβαρο γράφημα G (με αρνητικά ακμικά βάρη) τάξης n και μεγέθους m. Θέλουμε να υπολογίσουμε τις ε.δ στο G x y για κάθε ζεύγος κόμβων (x, y), x, y V(G)!!! Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Πανζευκτικές Ελάχιστες Διαδρομές Το να λύσουμε το πρόβλημα υπολογίζοντας όλο και περισσότερα ζεύγη κόμβων δε βοηθά, καθώς οδηγεί πίσω στον αλγόριθμο O(nm)!!! Κρίσιμο Ερώτημα ΔΠ Υπάρχει κάποιο καλό υποπρόβλημα για τον υπολογισμό των αποστάσεων μεταξύ κάθε ζεύγους κόμβων? Πρέπει να επινοήσουμε κάτι έξυπνο! να βρούμε μια νέα ιδέα! Αλγόριθμοι και Πολυπλοκότητα 7-8!!!!!!
Πανζευκτικές Ελάχιστες Διαδρομές Να μια ιδέα!!! Ας πάρουμε μια ε.δ x x u u y u uk y Ενδιάμεσοι Κόμβοι Υποθέστε ότι δεν επιτρέπουμε ενδιάμεσους κόμβους!!! Τότε, μπορούμε να λύσουμε το πρόβλημα των π.ε.δ, καθώς για κάθε ζεύγος κόμβων x, y του G: η ε.δ x y είναι η ακμή (x, y), εάν υπάρχει!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Να μια ιδέα!!! Ας πάρουμε μια ε.δ x x u u y u uk y Ενδιάμεσοι Κόμβοι Αν διευρύνουμε σταδιακά το σύνολο των ενδιάμεσων κόμβων, έναν κάθε φορά, ενημερώνοντας τα μήκη των ε.δ σε κάθε διεύρυνση, τι μπορούμε να πετύχουμε!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Να μια ιδέα!!! Ας πάρουμε μια ε.δ x x u u y u uk y Ενδιάμεσοι Κόμβοι Μπορούμε να διευρύνουμε το σύνολο των ενδιάμεσων κόμβων έως να γίνει όλο το σύνολο κόμβων V!!! Τότε όμως έχουμε λύσει το πρόβλημα των π.ε.δ!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Τυποποίηση της ιδέας!!! Αριθμούμε τους κόμβους του V ως {,,,n} d(i,j,k) συμβολίζουμε το μήκος της ε.δ i j με ενδιάμεσους κόμβους ΜΟΝΟ από το σύνολο {,,,k} Επομένως, d(i,j,) = w(i,j) εάν υπάρχει η ακμή (i,j) Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Τι πρέπει να ελέγξουμε όταν επεκτείνουμε το ενδιάμεσο σύνολο κατά ένα κόμβο? {,,,k-} {,,,k} Πρέπει να επανεξετάσουμε όλα τα ζεύγη κόμβων i, j και να ελέγξουμε εάν η χρήση του k ως ενδιάμεσου κόμβου μας δίνει μια συντομότερη διαδρομή i j αυτό είναι d(k,j,k-) εύκολο!!! k d(i,k,k-) j i d(i,j,k-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Μια ε.δ i j η οποία χρησιμοποιεί τον k μαζί με άλλους κόμβους χαμηλότερης αρίθμησης {,,,k-}, περνάει από τον k μία μόνο φορά!!! γιατί δεν υπάρχουν αρνητικοί κύκλοι d(i,k,k-) k d(k,j,k-) j i d(i,j,k-) Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Έτσι, η χρήση του 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) θα πρέπει να ενημερωθεί ανάλογα!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Σχέση Επίλυσης Υποπροβλημάτων 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) = Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Πανζευκτικές Ελάχιστες Διαδρομές Αλγόριθμος 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) Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Πανζευκτικές Ελάχιστες Διαδρομές Πολυπλοκότητα Το πιο χρονοβόρο βήμα:. 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) Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + } = Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + } = Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + } = Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) 8-7 - - d(,,) d(,,) = min {d(,,), d(,,) + d(,,)} = min {, + 7} = Αλγόριθμοι και Πολυπλοκότητα 7-8
Πανζευκτικές Ελάχιστες Διαδρομές Παράδειγμα d(i,j,) - - - - - - - 7 Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Σακίδιο Κατά την διάρκεια μιας κλοπής, ένας διαρρήκτης βρίσκει περισσότερα λάφυρα απ όσα περίμενε και πρέπει να αποφασίσει τι θα πάρει!!! Το «σακίδιό» του (knapsack) μπορεί να μεταφέρει W κιλά!!! Υπάρχουν n είδη με βάρη w, w,, wn και αξία v, v,, vn Αλγόριθμοι και Πολυπλοκότητα 7-8
Προβλήματα - Δυναμικός Προγραμματισμός Σακίδιο Το ερώτημα που τον απασχολεί!!! Ποιος είναι ο πλέον πολύτιμος συνδυασμός ειδών που μπορεί να βάλει στο σακίδιό του? Το «σακίδιό» του (knap-sack) μπορεί να μεταφέρει W κιλά!!! Υπάρχουν n είδη με βάρη w, w,, wn και αξία v, v,, vn Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Προβλήματα - Δυναμικός Προγραμματισμός Σακίδιο Παράδειγμα Έστω ότι το σακίδιο χωράει W = κιλά, και Είδος Βάρος Τιμή Α Β Γ Δ Αλγόριθμοι και Πολυπλοκότητα 7-8?????? 8
Προβλήματα - Δυναμικός Προγραμματισμός Σακίδιο Παράδειγμα Δύο Εκδοχές Έστω W = κιλά, και Υπάρχουν απεριόριστες ποσότητες από κάθε είδος Είδος Βάρος Τιμή Α Β Γ Δ Αλγόριθμοι και Πολυπλοκότητα 7-8 Υπάρχει μία μόνο ποσότητα από κάθε είδος
Προβλήματα - Δυναμικός Προγραμματισμός Σακίδιο Παράδειγμα Δύο Εκδοχές Έστω W = κιλά, και Υπάρχουν απεριόριστες ποσότητες από κάθε είδος Είδος Βάρος Τιμή Α Β Γ Δ Αλγόριθμοι και Πολυπλοκότητα 7-8 Βέλτιστη Επιλογή από είδος Α w= από είδος Δ w= 8 Συνολική Τιμή 8
Προβλήματα - Δυναμικός Προγραμματισμός Σακίδιο Παράδειγμα Δύο Εκδοχές Έστω W = κιλά, και Είδος Βάρος Τιμή Α Β Γ Δ Αλγόριθμοι και Πολυπλοκότητα 7-8 από είδος Α από είδος Γ Βέλτιστη Επιλογή Υπάρχει μία μόνο ποσότητα από κάθε είδος
Προβλήματα - Δυναμικός Προγραμματισμός Σακίδιο (Knapsack) Πρόβλημα Μας δίδεται ένα σύνολο n αντικειμένων S = {a, a,, an} με ακέραια βάρη wi και αξίες vi ( i n), και μία τιμή W, και μας ζητείται να υπολογίσουμε ένα υποσύνολο αντικειμένων S S με μέγιστη συνολική αξία C και με συνολικό βάρος W, δηλαδή, max C = Σai S vi Αλγόριθμοι και Πολυπλοκότητα 7-8 και Σa S wi W i
Σακίδιο : Με επανάληψη Ας δούμε την εκδοχή που επιτρέπει επανάληψη! Και, όπως πάντα, το κρίσιμο ερώτημα στο ΔΠ είναι: Ποια είναι τα υποπροβλήματα? Μπορούμε να «συρρικνώσουμε» το αρχικό πρόβλημα με δύο τρόπους: () Μπορούμε να εξετάσουμε την περίπτωση σακιδίων μικρότερης χωρητικότητας w W ή () Την περίπτωση λιγότερων ειδών,,, i n Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Ο πρώτος περιορισμός επιβάλει να έχουμε μικρότερες χωρητικότητες! Ορίζουμε: C(w) = Μax Τιμή που παίρνουμε με σακίδιο χωρητικότητας w Ερώτημα!!! Μπορούμε να εκφράσουμε το υποπρόβλημα C(w) συναρτήσει μικρότερων υποπροβλημάτων? Αλγόριθμοι και Πολυπλοκότητα 7-8??????
Σακίδιο : Με επανάληψη Έστω μια βέλτιστη λύση του υποπροβλήματος 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(w- wi) + vi, για κάποιο i Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Με άλλα λόγια: Το υποπρ/μα C(w) είναι απλώς το C(w- wi) + vi, για κάποιο i. Ποιο είναι αυτό το i? δεν γνωρίζουμε!!! Τότε, δεν έχουμε παρά να πάρουμε όλες τις δυνατότητες! Ορίστε πως!!! C(w) = max i : w i w {C(w-wi) + vi} όπου, ως συνήθως, η σύμβασή μας είναι ότι η μέγιστη τιμή του κενού συνόλου είναι!!! Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Τελειώσαμε! ο αλγόριθμος τώρα γράφεται μόνος του και είναι ιδιαιτέρα κομψός!!! Αλγόριθμος Κnapsack(w[..n], v[..n], W). C()=. for w to W Συνολική Πολυπλοκότητα O(nW) C(w) max {C(w-w(i)) + v(i) : w(i) w} i. return C(W) Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Σακίδιο : Με επανάληψη Ας μείνουμε λίγο ακόμα σε αυτή την εκδοχή του προβλήματος! Γνωρίζουμε ότι ένα πρόβλημα ΔΠ εκφράζεται με ένα γράφημα G τύπου DAG!!! Εύλογο ερώτημα!!! Ποιο είναι το DAG του προβλήματος του σακιδίου με επανάληψη? Αλγόριθμοι και Πολυπλοκότητα 7-8?????? 8
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ 7 8 Κόμβοι DAG Χωρητικότητα Σακιδίου W Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} 8 C() C() C() C() C() Αλγόριθμοι και Πολυπλοκότητα 7-8 {,, } 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(-) + = Αλγόριθμοι και Πολυπλοκότητα 7-8 C() = C(-) + =
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ C(w)= max {C(w-w(i))+v(i): w(i) w} {,,, } 7 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Δ} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Β} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Δ,Δ} λύση για w = με C(w) = 8 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Δ,Β} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG Αλγόριθμοι και Πολυπλοκότητα 7-8
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Α} λύση για w = με C(w) = 8 7 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG Αλγόριθμοι και Πολυπλοκότητα 7-8 7
Σακίδιο : Με επανάληψη Το DAG του προβλήματος Είδος Βάρος Τιμή Χωρητικότητα W = A B Γ Δ {Α,Δ,Δ} τελική λύση, C(w) = 8 8 7 8 8 Σακίδιο με επανάληψη Max διαδρομή σε DAG Αλγόριθμοι και Πολυπλοκότητα 7-8 8
Αλγοριθμικές Τεχνικές & Προβλήματα Ποιες Αλγοριθμικές Τεχνικές έχουμε δει έως τώρα? Αλγοριθμικές Τεχνικές, όπως: Διαίρει-και-Βασίλευε Άπληστη Επιλογή Πρόσφατα, προσθέσαμε και την τεχνική Δυναμικός Προγραμματισμός Α S U N N - Y Β S N O W Y C Αλγόριθμοι και Πολυπλοκότητα 7-8 D