R. Giegerich,
C. Meyer, and P. Steffen:
Towards a discipline of dynamic
programming.
In Informatik 2002. Springer LNI
series, 2002.
Dynamic programming is a classic programming technique, applicable
in a wide variety of domains, like stochastic systems analysis,
operations research, combinatorics of discrete structures, flow
problems, parsing ambiguous languages, or biosequence analysis.
Yet, heretofore no methodology was available guiding the design
of such algorithms. The matrix recurrences that typically describe
a dynamic programming algorithm are difficult to construct,
error-prone to implement, and almost impossible to debug. This
article introduces an algebraic style of dynamic programming
over sequence data. We define its formal framework including
a formalization of Bellman's principle. We suggest a language
for algorithm design on a convenient level of abstraction. We
outline three ways of implementation, including an embedding
in a lazy functional language. The workings of the new method
are illustrated by a series of examples from diverse areas of
computer science.