Dynamic Programming
Dynamic Programming refers to a very large class of algorithms. The idea is to break a large problem down (if possible) into incremental steps so that, at any given stage, optimal solutions are known to sub-problems. When the technique is applicable, this condition can be extended incrementally without having to alter previously computed optimal solutions to subproblems. Eventually the condition applies to all of the data and, if the formulation is correct, this together with the fact that nothing remains untreated gives the desired answer to the complete problem.
It is often the case in D.P. that the intermediate desirable condition implies more than seems to be strictly needed for the final answer. For example, the linear-time Fibonacci function, recursive or iterative, could be said to be a DPA. It holds (at least) two values, fib(i-1) and fib(i). When `i' gets to `n', only one of these values is needed, fib(i)=fib(n). However it is possession of the two values that allows the linear-time algorithm.
Examples of dynamic programming include
- [edit-distance],
longest common subsequence, spelling correction,
and similar problems on strings;
also Hirschberg's space-efficient
[version],
a functional programming
[version]
and
a longest common subsequence (LCS) (LCSS), algorithm using bit operations for speed-up [HTML], - shortest path algorithms on [graphs],
- [segmentation] of a time series,
- some [spanning-tree] algorithms.