SlideShare a Scribd company logo
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
Problem of the Day
Multisets are allowed to have repeated elements. A multiset
of 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 algorithm
for constructing all permutations of a multiset.
Dynamic Programming
Dynamic programming is a very powerful, general tool for
solving optimization problems on left-right-ordered items
such as character strings.
Once understood it is relatively easy to apply, it looks like
magic until you have seen enough examples.
Floyd’s all-pairs shortest-path algorithm was an example of
dynamic programming.
Greedy vs. Exhaustive Search
Greedy algorithms focus on making the best local choice at
each decision point. In the absence of a correctness proof
such greedy algorithms are very likely to fail.
Dynamic programming gives us a way to design custom
algorithms which systematically search all possibilities (thus
guaranteeing correctness) while storing results to avoid
recomputing (thus providing efficiency).
Recurrence Relations
A recurrence relation is an equation which is defined in terms
of itself. They are useful because many natural functions are
easily expressed as recurrences:
Polynomials: an = an−1 + 1, a1 = 1 −→ an = n
Exponentials: an = 2an−1 , a1 = 2 −→ an = 2n
Weird: an = nan−1 , a1 = 1 −→ an = n!
Computer programs can easily evaluate the value of a given
recurrence even without the existence of a nice closed form.
Computing Fibonacci Numbers

             Fn = Fn−1 + Fn−2, F0 = 0, F1 = 1
Implementing this as a recursive procedure is easy, but slow
because 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)
How Slow?
                                √
          Fn+1/Fn ≈ φ = (1 +        5)/2 ≈ 1.61803
Thus Fn ≈ 1.6n .
Since our recursion tree has 0 and 1 as leaves, computing Fn
requires ≈ 1.6n calls!
What about Dynamic Programming?
We can calculate Fn in linear time by storing small values:
F0 = 0
F1 = 1
For i = 1 to n
      Fi = Fi−1 + Fi−2
Moral: we traded space for time.
Why I Love Dynamic Programming
Dynamic programming is a technique for efficiently comput-
ing recurrences by storing partial results.
Once you understand dynamic programming, it is usually
easier to reinvent certain algorithms than try to look them up!
I have found dynamic programming to be one of the most
useful algorithmic techniques in practice:
 • Morphing in computer graphics.
 • Data compression for high density bar codes.
 • Designing genes to avoid or contain specified patterns.
Avoiding Recomputation by Storing Partial
Results
The trick to dynamic program is to see that the naive recursive
algorithm repeatedly computes the same subproblems over
and over and over again. If so, storing the answers to them
in a table instead of recomputing can lead to an efficient
algorithm.
Thus we must first hunt for a correct recursive algorithm –
later we can worry about speeding it up by using a results
matrix.
Binomial Coefficients
The most important class of counting numbers are the
binomial coefficients, where ( ) counts the number of ways
                               n
                               k

to 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
Computing Binomial Coefficients
Since ( ) = n!/((n − k)!k!), in principle you can compute
       n
       k

them straight from factorials.
However, intermediate calculations can easily cause arith-
metic overflow even when the final coefficient fits comfort-
ably within an integer.
Pascal’s Triangle
No doubt you played with this arrangement of numbers in
high school. Each number is the sum of the two numbers
directly above it:
      1
     11
    121
  1331
 14641
1 5 10 10 5 1
Pascal’s Recurrence
A more stable way to compute binomial coefficients is using
the recurrence relation implicit in the construction of Pascal’s
triangle, namely, that
                          ()=( )+( )
                          n
                          k
                              n−1
                              k−1
                                     n−1
                                      k



It works because the nth element either appears or does not
appear in one of the ( ) subsets of k elements.
                      n
                      k
Basis Case
No 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
                                        k

are there to choose k things from a k-element set? Exactly
one, the complete set.
Binomial Coefficients Implementation

long 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] );
}
Three Steps to Dynamic Programming

1. 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.

More Related Content

PPTX
unit-4-dynamic programming
PPT
5.3 dynamic programming 03
DOC
Unit 3 daa
PPTX
Dynamic programming - fundamentals review
PPTX
Dynamic Programming - Part II
PDF
PPT
Branch and bound
PPTX
Dynamic programming1
unit-4-dynamic programming
5.3 dynamic programming 03
Unit 3 daa
Dynamic programming - fundamentals review
Dynamic Programming - Part II
Branch and bound
Dynamic programming1

What's hot (20)

PPTX
Dynamic Programming
PPTX
Matrix chain multiplication
PPTX
Greedy Algorithms
PPT
Analysis of Algorithm
PPT
Dynamic programming
PPT
dynamic programming Rod cutting class
PPTX
PPTX
Daa unit 3
PPTX
Dynamic Programming - Part 1
PPT
5.3 dynamic programming
PDF
Backtracking & branch and bound
PPT
5.1 greedy
PPT
Dynamicpgmming
PDF
Dynamic programming
PPT
Lecture 8 dynamic programming
PPTX
Daa:Dynamic Programing
PPT
5.1 greedy 03
PPTX
Comparitive Analysis of Algorithm strategies
PDF
Dynamic programming
Dynamic Programming
Matrix chain multiplication
Greedy Algorithms
Analysis of Algorithm
Dynamic programming
dynamic programming Rod cutting class
Daa unit 3
Dynamic Programming - Part 1
5.3 dynamic programming
Backtracking & branch and bound
5.1 greedy
Dynamicpgmming
Dynamic programming
Lecture 8 dynamic programming
Daa:Dynamic Programing
5.1 greedy 03
Comparitive Analysis of Algorithm strategies
Dynamic programming
Ad

Viewers also liked (10)

PPTX
Dynamic programming
PPT
lecture 23
PPTX
Longest Common Subsequence
PPT
lecture 24
PPTX
Longest common subsequence lcs
PPT
Dynamic pgmming
PPTX
Elements of dynamic programming
PPTX
Longest Common Subsequence (LCS) Algorithm
PPTX
Knapsack Problem
Dynamic programming
lecture 23
Longest Common Subsequence
lecture 24
Longest common subsequence lcs
Dynamic pgmming
Elements of dynamic programming
Longest Common Subsequence (LCS) Algorithm
Knapsack Problem
Ad

Similar to Skiena algorithm 2007 lecture16 introduction to dynamic programming (20)

PDF
Sure interview algorithm-1103
PDF
Dynamic programing
PPT
tutorial5.ppt
PDF
Fibonacci using matlab
PPT
d0a2de03-27d3-4ca2-9ac6-d83440657a6c.ppt
PPTX
Algorithms Design Homework Help
PDF
5 numerical analysis
PPTX
Algorithms Design Exam Help
PDF
Skiena algorithm 2007 lecture18 application of dynamic programming
PPTX
Computer Network Assignment Help
PPTX
Algorithm Assignment Help
PDF
Machine Learning
PPT
Maths Topic on spline interpolation methods
PDF
PDF
Line Search Techniques by Fibonacci Search
PDF
lec4_annotated.pdf ml csci 567 vatsal sharan
PPTX
Lagrange Interpolation
PDF
Lesson 29
PDF
AI Lesson 29
PDF
Solution 3.
Sure interview algorithm-1103
Dynamic programing
tutorial5.ppt
Fibonacci using matlab
d0a2de03-27d3-4ca2-9ac6-d83440657a6c.ppt
Algorithms Design Homework Help
5 numerical analysis
Algorithms Design Exam Help
Skiena algorithm 2007 lecture18 application of dynamic programming
Computer Network Assignment Help
Algorithm Assignment Help
Machine Learning
Maths Topic on spline interpolation methods
Line Search Techniques by Fibonacci Search
lec4_annotated.pdf ml csci 567 vatsal sharan
Lagrange Interpolation
Lesson 29
AI Lesson 29
Solution 3.

More from zukun (20)

PDF
My lyn tutorial 2009
PDF
ETHZ CV2012: Tutorial openCV
PDF
ETHZ CV2012: Information
PDF
Siwei lyu: natural image statistics
PDF
Lecture9 camera calibration
PDF
Brunelli 2008: template matching techniques in computer vision
PDF
Modern features-part-4-evaluation
PDF
Modern features-part-3-software
PDF
Modern features-part-2-descriptors
PDF
Modern features-part-1-detectors
PDF
Modern features-part-0-intro
PDF
Lecture 02 internet video search
PDF
Lecture 01 internet video search
PDF
Lecture 03 internet video search
PDF
Icml2012 tutorial representation_learning
PPT
Advances in discrete energy minimisation for computer vision
PDF
Gephi tutorial: quick start
PDF
EM algorithm and its application in probabilistic latent semantic analysis
PDF
Object recognition with pictorial structures
PDF
Iccv2011 learning spatiotemporal graphs of human activities
My lyn tutorial 2009
ETHZ CV2012: Tutorial openCV
ETHZ CV2012: Information
Siwei lyu: natural image statistics
Lecture9 camera calibration
Brunelli 2008: template matching techniques in computer vision
Modern features-part-4-evaluation
Modern features-part-3-software
Modern features-part-2-descriptors
Modern features-part-1-detectors
Modern features-part-0-intro
Lecture 02 internet video search
Lecture 01 internet video search
Lecture 03 internet video search
Icml2012 tutorial representation_learning
Advances in discrete energy minimisation for computer vision
Gephi tutorial: quick start
EM algorithm and its application in probabilistic latent semantic analysis
Object recognition with pictorial structures
Iccv2011 learning spatiotemporal graphs of human activities

Recently uploaded (20)

PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Machine learning based COVID-19 study performance prediction
PDF
cuic standard and advanced reporting.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Approach and Philosophy of On baking technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Encapsulation theory and applications.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Cloud computing and distributed systems.
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Advanced methodologies resolving dimensionality complications for autism neur...
Machine learning based COVID-19 study performance prediction
cuic standard and advanced reporting.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Approach and Philosophy of On baking technology
Encapsulation_ Review paper, used for researhc scholars
NewMind AI Weekly Chronicles - August'25 Week I
Network Security Unit 5.pdf for BCA BBA.
Encapsulation theory and applications.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Cloud computing and distributed systems.
The AUB Centre for AI in Media Proposal.docx
Reach Out and Touch Someone: Haptics and Empathic Computing
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Mobile App Security Testing_ A Comprehensive Guide.pdf

Skiena algorithm 2007 lecture16 introduction to dynamic programming

  • 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. Problem of the Day Multisets are allowed to have repeated elements. A multiset of 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 algorithm for constructing all permutations of a multiset.
  • 3. Dynamic Programming Dynamic programming is a very powerful, general tool for solving optimization problems on left-right-ordered items such as character strings. Once understood it is relatively easy to apply, it looks like magic until you have seen enough examples. Floyd’s all-pairs shortest-path algorithm was an example of dynamic programming.
  • 4. Greedy vs. Exhaustive Search Greedy algorithms focus on making the best local choice at each decision point. In the absence of a correctness proof such greedy algorithms are very likely to fail. Dynamic programming gives us a way to design custom algorithms which systematically search all possibilities (thus guaranteeing correctness) while storing results to avoid recomputing (thus providing efficiency).
  • 5. Recurrence Relations A recurrence relation is an equation which is defined in terms of itself. They are useful because many natural functions are easily expressed as recurrences: Polynomials: an = an−1 + 1, a1 = 1 −→ an = n Exponentials: an = 2an−1 , a1 = 2 −→ an = 2n Weird: an = nan−1 , a1 = 1 −→ an = n! Computer programs can easily evaluate the value of a given recurrence even without the existence of a nice closed form.
  • 6. Computing Fibonacci Numbers Fn = Fn−1 + Fn−2, F0 = 0, F1 = 1 Implementing this as a recursive procedure is easy, but slow because 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. How Slow? √ Fn+1/Fn ≈ φ = (1 + 5)/2 ≈ 1.61803 Thus Fn ≈ 1.6n . Since our recursion tree has 0 and 1 as leaves, computing Fn requires ≈ 1.6n calls!
  • 8. What about Dynamic Programming? We can calculate Fn in linear time by storing small values: F0 = 0 F1 = 1 For i = 1 to n Fi = Fi−1 + Fi−2 Moral: we traded space for time.
  • 9. Why I Love Dynamic Programming Dynamic programming is a technique for efficiently comput- ing recurrences by storing partial results. Once you understand dynamic programming, it is usually easier to reinvent certain algorithms than try to look them up! I have found dynamic programming to be one of the most useful algorithmic techniques in practice: • Morphing in computer graphics. • Data compression for high density bar codes. • Designing genes to avoid or contain specified patterns.
  • 10. Avoiding Recomputation by Storing Partial Results The trick to dynamic program is to see that the naive recursive algorithm repeatedly computes the same subproblems over and over and over again. If so, storing the answers to them in a table instead of recomputing can lead to an efficient algorithm. Thus we must first hunt for a correct recursive algorithm – later we can worry about speeding it up by using a results matrix.
  • 11. Binomial Coefficients The most important class of counting numbers are the binomial coefficients, where ( ) counts the number of ways n k to 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. Computing Binomial Coefficients Since ( ) = n!/((n − k)!k!), in principle you can compute n k them straight from factorials. However, intermediate calculations can easily cause arith- metic overflow even when the final coefficient fits comfort- ably within an integer.
  • 13. Pascal’s Triangle No doubt you played with this arrangement of numbers in high school. Each number is the sum of the two numbers directly above it: 1 11 121 1331 14641 1 5 10 10 5 1
  • 14. Pascal’s Recurrence A more stable way to compute binomial coefficients is using the recurrence relation implicit in the construction of Pascal’s triangle, namely, that ()=( )+( ) n k n−1 k−1 n−1 k It works because the nth element either appears or does not appear in one of the ( ) subsets of k elements. n k
  • 15. Basis Case No 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 k are there to choose k things from a k-element set? Exactly one, the complete set.
  • 16. Binomial Coefficients Implementation long 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. Three Steps to Dynamic Programming 1. 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.