Dynamic programming

Dynamic programming is both a mathematical optimization method and a computer programming method. The method was developed by Richard Bellman in the 1950s and has found applications in numerous fields, from aerospace engineering to economics.

In both contexts it refers to simplifying a complicated problem by breaking it down into simpler sub-problems in a recursive manner. While some decision problems cannot be taken apart this way, decisions that span several points in time do often break apart recursively. Likewise, in computer science, if a problem can be solved optimally by breaking it into sub-problems and then recursively finding the optimal solutions to the sub-problems, then it is said to have optimal substructure.

If sub-problems can be nested recursively inside larger problems, so that dynamic programming methods are applicable, then there is a relation between the value of the larger problem and the values of the sub-problems.[1] In the optimization literature this relationship is called the Bellman equation.

Dynamic programming_第1张图片

Figure 1. Finding the shortest path in a graph using optimal substructure; a straight line indicates a single edge; a wavy line indicates a shortest path between the two vertices it connects (among other paths, not shown, sharing the same two vertices); the bold line is the overall shortest path from start to goal.

Contents

  • 1 Overview
    • 1.1 Mathematical optimization
    • 1.2 Control theory
      • 1.2.1 Example from economics: Ramsey's problem of optimal saving
    • 1.3 Computer programming
    • 1.4 Bioinformatics
  • 2 Examples: computer algorithms
    • 2.1 Dijkstra's algorithm for the shortest path problem
    • 2.2 Fibonacci sequence
    • 2.3 A type of balanced 0–1 matrix
    • 2.4 Checkerboard
    • 2.5 Sequence alignment
    • 2.6 Tower of Hanoi puzzle
    • 2.7 Egg dropping puzzle
      • 2.7.1 Faster DP solution using a different parametrization
    • 2.8 Matrix chain multiplication
  • 3 History
  • 4 Algorithms that use dynamic programming
  • 5 See also

1 Overview

1.1 Mathematical optimization

1.2 Control theory

1.2.1 Example from economics: Ramsey’s problem of optimal saving

1.3 Computer programming

1.4 Bioinformatics

2 Examples: computer algorithms

2.1 Dijkstra’s algorithm for the shortest path problem

2.2 Fibonacci sequence

2.3 A type of balanced 0–1 matrix

2.4 Checkerboard

2.5 Sequence alignment

2.6 Tower of Hanoi puzzle

2.7 Egg dropping puzzle

2.7.1 Faster DP solution using a different parametrization

2.8 Matrix chain multiplication

3 History

4 Algorithms that use dynamic programming

5 See also

你可能感兴趣的:(References,动态规划,算法)