Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Lecture 16:Introduction to Dynamic Programming            Steven Skiena   Department of Computer Science    State Universi...
Problem of the DayMultisets are allowed to have repeated elements. A multisetof n items may thus have fewer than n! distin...
Dynamic ProgrammingDynamic programming is a very powerful, general tool forsolving optimization problems on left-right-ord...
Greedy vs. Exhaustive SearchGreedy algorithms focus on making the best local choice ateach decision point. In the absence ...
Recurrence RelationsA recurrence relation is an equation which is defined in termsof itself. They are useful because many n...
Computing Fibonacci Numbers             Fn = Fn−1 + Fn−2, F0 = 0, F1 = 1Implementing this as a recursive procedure is easy...
How Slow?                                √          Fn+1/Fn ≈ φ = (1 +        5)/2 ≈ 1.61803Thus Fn ≈ 1.6n .Since our recu...
What about Dynamic Programming?We can calculate Fn in linear time by storing small values:F0 = 0F1 = 1For i = 1 to n      ...
Why I Love Dynamic ProgrammingDynamic programming is a technique for efficiently comput-ing recurrences by storing partial ...
Avoiding Recomputation by Storing PartialResultsThe trick to dynamic program is to see that the naive recursivealgorithm r...
Binomial CoefficientsThe most important class of counting numbers are thebinomial coefficients, where ( ) counts the number ...
Computing Binomial CoefficientsSince ( ) = n!/((n − k)!k!), in principle you can compute       n       kthem straight from ...
Pascal’s TriangleNo doubt you played with this arrangement of numbers inhigh school. Each number is the sum of the two num...
Pascal’s RecurrenceA more stable way to compute binomial coefficients is usingthe recurrence relation implicit in the const...
Basis CaseNo recurrence is complete without basis cases.How many ways are there to choose 0 things from a set?Exactly one,...
Binomial Coefficients Implementationlong binomial coefficient(n,m)int n,m; (* compute n choose m *){       int i,j; (* count...
Three Steps to Dynamic Programming1. Formulate the answer as a recurrence relation or recursive   algorithm.2. Show that t...
Upcoming SlideShare
Loading in …5
×

Skiena algorithm 2007 lecture16 introduction to dynamic programming

836 views

Published on

Published in: Technology
  • Be the first to comment

Skiena algorithm 2007 lecture16 introduction to dynamic programming

  1. 1. Lecture 16:Introduction to Dynamic Programming Steven Skiena Department of Computer Science State University of New York Stony Brook, NY 11794–4400 http://www.cs.sunysb.edu/∼skiena
  2. 2. Problem of the DayMultisets are allowed to have repeated elements. A multisetof n items may thus have fewer than n! distinct permutations.For example, {1, 1, 2, 2} has only six different permutations:{1, 1, 2, 2}, {1, 2, 1, 2}, {1, 2, 2, 1}, {2, 1, 1, 2}, {2, 1, 2, 1},and {2, 2, 1, 1}. Design and implement an efficient algorithmfor constructing all permutations of a multiset.
  3. 3. Dynamic ProgrammingDynamic programming is a very powerful, general tool forsolving optimization problems on left-right-ordered itemssuch as character strings.Once understood it is relatively easy to apply, it looks likemagic until you have seen enough examples.Floyd’s all-pairs shortest-path algorithm was an example ofdynamic programming.
  4. 4. Greedy vs. Exhaustive SearchGreedy algorithms focus on making the best local choice ateach decision point. In the absence of a correctness proofsuch greedy algorithms are very likely to fail.Dynamic programming gives us a way to design customalgorithms which systematically search all possibilities (thusguaranteeing correctness) while storing results to avoidrecomputing (thus providing efficiency).
  5. 5. Recurrence RelationsA recurrence relation is an equation which is defined in termsof itself. They are useful because many natural functions areeasily expressed as recurrences:Polynomials: an = an−1 + 1, a1 = 1 −→ an = nExponentials: an = 2an−1 , a1 = 2 −→ an = 2nWeird: an = nan−1 , a1 = 1 −→ an = n!Computer programs can easily evaluate the value of a givenrecurrence even without the existence of a nice closed form.
  6. 6. Computing Fibonacci Numbers Fn = Fn−1 + Fn−2, F0 = 0, F1 = 1Implementing this as a recursive procedure is easy, but slowbecause we keep calculating the same value over and over. F(6)=13 F(5) F(4) F(4) F(3) F(3) F(2) F(2) F(1) F(2) F(1) F(1) F(0) F(3) F(2) F(2) F(1) F(1) F(1) F(0) F(0) F(1) F(0) F(1) F(0)
  7. 7. How Slow? √ Fn+1/Fn ≈ φ = (1 + 5)/2 ≈ 1.61803Thus Fn ≈ 1.6n .Since our recursion tree has 0 and 1 as leaves, computing Fnrequires ≈ 1.6n calls!
  8. 8. What about Dynamic Programming?We can calculate Fn in linear time by storing small values:F0 = 0F1 = 1For i = 1 to n Fi = Fi−1 + Fi−2Moral: we traded space for time.
  9. 9. Why I Love Dynamic ProgrammingDynamic programming is a technique for efficiently comput-ing recurrences by storing partial results.Once you understand dynamic programming, it is usuallyeasier to reinvent certain algorithms than try to look them up!I have found dynamic programming to be one of the mostuseful algorithmic techniques in practice: • Morphing in computer graphics. • Data compression for high density bar codes. • Designing genes to avoid or contain specified patterns.
  10. 10. Avoiding Recomputation by Storing PartialResultsThe trick to dynamic program is to see that the naive recursivealgorithm repeatedly computes the same subproblems overand over and over again. If so, storing the answers to themin a table instead of recomputing can lead to an efficientalgorithm.Thus we must first hunt for a correct recursive algorithm –later we can worry about speeding it up by using a resultsmatrix.
  11. 11. Binomial CoefficientsThe most important class of counting numbers are thebinomial coefficients, where ( ) counts the number of ways n kto choose k things out of n possibilities. • Committees – How many ways are there to form a k- member committee from n people? By definition, ( ). n k • Paths Across a Grid – How many ways are there to travel from the upper-left corner of an n × m grid to the lower- right corner by walking only down and to the right? Every path must consist of n + m steps, n downward and m to the right, so there are ( ) such sets/paths. n+m n
  12. 12. Computing Binomial CoefficientsSince ( ) = n!/((n − k)!k!), in principle you can compute n kthem straight from factorials.However, intermediate calculations can easily cause arith-metic overflow even when the final coefficient fits comfort-ably within an integer.
  13. 13. Pascal’s TriangleNo doubt you played with this arrangement of numbers inhigh school. Each number is the sum of the two numbersdirectly above it: 1 11 121 1331 146411 5 10 10 5 1
  14. 14. Pascal’s RecurrenceA more stable way to compute binomial coefficients is usingthe recurrence relation implicit in the construction of Pascal’striangle, namely, that ()=( )+( ) n k n−1 k−1 n−1 kIt works because the nth element either appears or does notappear in one of the ( ) subsets of k elements. n k
  15. 15. Basis CaseNo recurrence is complete without basis cases.How many ways are there to choose 0 things from a set?Exactly one, the empty set.The right term of the sum drives us up to ( ). How many ways k kare there to choose k things from a k-element set? Exactlyone, the complete set.
  16. 16. Binomial Coefficients Implementationlong binomial coefficient(n,m)int n,m; (* compute n choose m *){ int i,j; (* counters *) long bc[MAXN][MAXN]; (* table of binomial coefficients *) for (i=0; i<=n; i++) bc[i][0] = 1; for (j=0; j<=n; j++) bc[j][j] = 1; for (i=1; i<=n; i++) for (j=1; j<i; j++) bc[i][j] = bc[i-1][j-1] + bc[i-1][j]; return( bc[n][m] );}
  17. 17. Three Steps to Dynamic Programming1. Formulate the answer as a recurrence relation or recursive algorithm.2. Show that the number of different instances of your recurrence is bounded by a polynomial.3. Specify an order of evaluation for the recurrence so you always have what you need.

×