1 / 24

Δυναμικός Προγραμματισμός

Δυναμικός Προγραμματισμός. πρόβλημα μεγέθους Ν . «Διαίρει και βασίλευε» : ανεξάρτητα υποπροβλήματα. διάσπαση. πρόβλημα μεγέθους Ν -k. πρόβλημα μεγέθους k. TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: A A A. Δυναμικός Προγραμματισμός.

ulani
Download Presentation

Δυναμικός Προγραμματισμός

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Δυναμικός Προγραμματισμός πρόβλημα μεγέθους Ν «Διαίρει και βασίλευε» : ανεξάρτητα υποπροβλήματα διάσπαση πρόβλημα μεγέθους Ν-k πρόβλημα μεγέθους k TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  2. Δυναμικός Προγραμματισμός πρόβλημα μεγέθους Ν Σε κάποιες περιπτώσεις όμως τα υποπροβλήματα δεν είναι ανεξάρτητα διάσπαση πρόβλημα μεγέθους Ν2 πρόβλημα μεγέθους Ν1 Υπάρχουν επικαλυπτόμενα υποπροβλήματα, γεγονός που μπορεί να οδηγήσει σε πολύ μεγάλους χρόνους εκτέλεσης TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  3. Δυναμικός Προγραμματισμός Παράδειγμα: Υπολογισμός της ακολουθίας Fibonacci Η επίλυση της αναδρομικής εξίσωσης δίνει TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  4. Δυναμικός Προγραμματισμός Παράδειγμα: Υπολογισμός της ακολουθίας Fibonacci Μπορεί να υπολογιστεί με το ακόλουθο αναδρομικό πρόγραμμα : intfibonacci(int n) { if (n<1) return 0; if (n==1) return 1; return fibonacci(n-1) + fibonacci(n-2); } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  5. Δυναμικός Προγραμματισμός Παράδειγμα: Υπολογισμός της ακολουθίας Fibonacci Μπορεί να υπολογιστεί με το ακόλουθο αναδρομικό πρόγραμμα : intfibonacci(int n) { if (n<1) return 0; if (n==1) return 1; return fibonacci(n-1) + fibonacci(n-2); } Χρόνος εκτέλεσης : TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  6. Δυναμικός Προγραμματισμός intfibonacci(int n) { if (n<1) return 0; if (n==1) return 1; return fibonacci(n-1) + fibonacci(n-2); } Δένδρο αναδρομής 6 5 4 2 4 3 3 2 2 1 2 1 1 0 3 2 1 1 0 1 0 1 0 1 0 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  7. Δυναμικός Προγραμματισμός Δένδρο αναδρομής 6 5 4 2 4 3 3 2 2 1 2 1 1 0 3 2 1 1 0 1 0 1 0 1 0 Ιδέα: Αντί να υπολογίσουμε το f4 δύο φορές, το υπολογίζουμε μία φορά και αποθηκεύουμε την τιμή του … TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  8. Δυναμικός Προγραμματισμός Δένδρο αναδρομής 6 5 4 2 4 3 3 2 2 1 2 1 1 0 3 2 1 1 0 1 0 1 0 1 0 Ιδέα: Αντί να υπολογίσουμε το f4 δύο φορές, το υπολογίζουμε μία φορά και αποθηκεύουμε την τιμή του … ομοίως και για τις άλλες τιμές που χρειαζόμαστε TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  9. Δυναμικός Προγραμματισμός Παράδειγμα: Υπολογισμός της ακολουθίας Fibonacci Μπορεί να υπολογιστεί σε γραμμικό χρόνο με το ακόλουθο πρόγραμμα : intfibonacci(int n) { inti; int F[n+1]; F[0]=; F[1]=1; for (inti=2; i<=n; i++) F[i] = F[i-1] + F[i-2]; return F[n]; } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  10. Δυναμικός Προγραμματισμός Συνθετικός δυναμικός προγραμματισμός (bottom-up dynamic programming) Υπολογίζει και αποθηκεύει όλες τις τιμές της συνάρτησης με τη σειρά ξεκινώντας τον υπολογισμό από τη μικρότερη τιμή του ορίσματος. intfibonacci(int n) { inti; int F[n+1]; F[0]=; F[1]=1; for (inti=2; i<=n; i++) F[i] = F[i-1] + F[i-2]; return F[n]; } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  11. Δυναμικός Προγραμματισμός Αναλυτικός δυναμικός προγραμματισμός (top-down dynamic programming) Το αναδρομικό πρόγραμμα αποθηκεύει τις τιμές που υπολογίζει και αποφεύγει τον υπολογισμό ήδη αποθηκευμένων τιμών. intfibonacci(int n) { int t; if (knownF[n] != unknown) return knownF[n]; if (n==0) t = 0; if (n==1) t = 1; if (n > 1) t = fibonacci(n-1) + fibonacci(n-2); return knownF[n] = t; } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  12. Δυναμικός Προγραμματισμός intfibonacci(int n) { int t; if (knownF[n] != unknown) return knownF[n]; if (n==0) t = 0; if (n==1) t = 1; if (n > 1) t = fibonacci(n-1) + fibonacci(n-2); return knownF[n] = t; } 6 Δένδρο αναδρομής 4 5 4 3 3 2 2 1 1 0 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  13. Δυναμικός Προγραμματισμός Συνθετικός δυναμικός προγραμματισμός (bottom-up dynamic programming) Υπολογίζει και αποθηκεύει όλες τις τιμές της συνάρτησης με τη σειρά ξεκινώντας τον υπολογισμό από τη μικρότερη τιμή του ορίσματος. Αναλυτικός δυναμικός προγραμματισμός (top-down dynamic programming) Το αναδρομικό πρόγραμμα αποθηκεύει τις τιμές που υπολογίζει και αποφεύγει τον υπολογισμό ήδη αποθηκευμένων τιμών. • Γενικά ο αναλυτικός δυναμικός προγραμματισμός είναι προτιμητέος επειδή: • Παρέχει μηχανικό τρόπο μετασχηματισμού της λύση ενός προβλήματος • Ρυθμίζει αυτόματα τη σειρά υπολογισμού των υποπροβλημάτων • Αποφεύγει την επίλυση υποπροβλημάτων που δε χρειάζονται TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  14. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. 1 2 3 size(1) = 12 value(1)= 20 size(2) = 8 value(2)= 14 size(3) = 6 value(3)= 11 Μ=20 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  15. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. 2 1 size = 20 value = 34 2 3 1 size(1) = 12 value(1)= 20 size(2) = 8 value(2)= 14 size(3) = 6 value(3)= 11 Μ=20 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  16. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. 3 1 size = 18 value = 31 2 3 1 size(1) = 12 value(1)= 20 size(2) = 8 value(2)= 14 size(3) = 6 value(3)= 11 Μ=20 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  17. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. 1 2 size = 16 value = 28 2 3 2 size(1) = 12 value(1)= 20 size(2) = 8 value(2)= 14 size(3) = 6 value(3)= 11 Μ=20 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  18. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. 3 1 size = 20 value = 36 3 2 3 2 size(1) = 12 value(1)= 20 size(2) = 8 value(2)= 14 size(3) = 6 value(3)= 11 Μ=20 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  19. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. 3 1 size = 18 value = 33 2 3 3 3 size(1) = 12 value(1)= 20 size(2) = 8 value(2)= 14 size(3) = 6 value(3)= 11 Μ=20 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  20. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. 3 1 βέλτιστη λύση size = 20 value = 36 3 2 3 2 size(1) = 12 value(1)= 20 size(2) = 8 value(2)= 14 size(3) = 6 value(3)= 11 Μ=20 TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  21. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. static class Item { int size; intval; } Item item[N]; ... int knap(int M) { inti, space, t, max = 0; for (i = 0; i < N; i++) if ( (space = M – items[i].size) >= 0 ) if ( (t = knap(space) + items[i].val > max ) max = t; return max; } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  22. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. static class Item { int size; intval; } Item item[N]; ... int knap(int M) { inti, space, t, max = 0; for (i = 0; i < N; i++) if ( (space = M – items[i].size) >= 0 ) if ( (t = knap(space) + items[i].val > max ) max = t; return max; } δοκιμάζει όλους τους εφικτούς συνδυασμούς εκθετικός χρόνος εκτέλεσης! TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  23. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. int knap(int M) { inti, space, t, maxi, max = 0; if ( maxKnown[M] != unknown ) return maxKnown[M]; for (i = 0; i < N; i++) if ( (space = M – items[i].size) >= 0 ) if ( (t = knap(space) + items[i].val > max ) { max = t; maxi = i; } maxKnown[M] = max; itemKnown[M] = items[maxi]; return max; } TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

  24. Δυναμικός Προγραμματισμός Το πρόβλημα του σακιδίου (knapsack problem) Έχουμε Ν τύπους αντικειμένων {1,2,…,Ν}. Το αντικείμενο kέχει μέγεθος size(k) και αξία value(k). Ο σκοπός μας είναι να γεμίσουμε με τα αντικείμενα αυτά ένα σακίδιο μεγέθους M έτσι ώστε η συνολική αξία των αντικειμένων να είναι η μέγιστη δυνατή. int knap(int M) { inti, space, t, maxi, max = 0; if ( maxKnown[M] != unknown ) return maxKnown[M]; for (i = 0; i < N; i++) if ( (space = M – items[i].size) >= 0 ) if ( (t = knap(space) + items[i].val > max ) { max = t; maxi = i; } maxKnown[M] = max; itemKnown[M] = items[maxi]; return max; } Εφαρμόσαμε αναλυτικό δυναμικό προγραμματισμό! Χρόνος εκτέλεσης : TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AAA

More Related