Recursion Schemes for Dynamic Programming

  • Jevgeni Kabanov
  • Varmo Vene
Part of the Lecture Notes in Computer Science book series (LNCS, volume 4014)


Dynamic programming is an algorithm design technique, which allows to improve efficiency by avoiding re-computation of identical subtasks. We present a new recursion combinator, dynamorphism, which captures the dynamic programming recursion pattern with memoization and identify some simple conditions when functions defined by structured general recursion can be redefined as a dynamorphism. The applicability of the new recursion combinator is demonstrated on classical dynamic programming algorithms: Fibonacci numbers, binary partitions, edit distance and longest common subsequence.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Bellman, R.: Dynamic Programming. Princeton Univ. Press, Princeton (1957)MATHGoogle Scholar
  2. 2.
    Bird, R.S.: An introduction to the theory of lists. In: Broy, M. (ed.) Logic of Programming and Calculi of Discrete Design. NATO ASI Series F, vol. 36, pp. 3–42. Springer, Berlin (1987)Google Scholar
  3. 3.
    Bird, R., de Moor, O.: Algebra of Programming. Prentice Hall Int. Series in Computer Science, vol. 100. Prentice Hall, London (1997)MATHGoogle Scholar
  4. 4.
    Capretta, V., Uustalu, T., Vene, V.: Recursive coalgebras from comonads. Inform. and Comput. 204(4), 437–468 (2006)MATHCrossRefMathSciNetGoogle Scholar
  5. 5.
    Fokkinga, M.: Law and Order in Algorithmics. PhD thesis. Dept. of Informatics, Univ. of Twente (1992)Google Scholar
  6. 6.
    Gibbons, J.: Calculating functional programs. In: Blackhouse, R., Crole, R.L., Gibbons, J. (eds.) Algebraic and Coalgebraic Methods in the Mathematics of Program Construction. LNCS, vol. 2297, pp. 149–202. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  7. 7.
    Hagino, T.: A Categorical Programming Language. PhD thesis CST-47-87. Laboratory for Foundations of Computer Science, Dept. of Computer Science, Univ. of Edinburgh (1987)Google Scholar
  8. 8.
    Malcolm, G.: Data structures and program transformation. Sci. of Comput. Program. 14(2-3), 255–279 (1990)MATHCrossRefMathSciNetGoogle Scholar
  9. 9.
    Meijer, E., Fokkinga, M., Paterson, R.: Functional programming with bananas, lenses, envelopes and barbed wire. In: Hughes, J. (ed.) FPCA 1991. LNCS, vol. 523, pp. 124–144. Springer, Heidelberg (1991)Google Scholar
  10. 10.
    Uustalu, T., Vene, V.: Primitive (co)recursion and course-of-value (co)iteration, categorically. Informatica 10(1), 5–26 (1999)MATHMathSciNetGoogle Scholar
  11. 11.
    Uustalu, T., Vene, V., Pardo, A.: Recursion schemes from comonads. Nordic J. of Computing 8(3), 366–390 (2001)MATHMathSciNetGoogle Scholar
  12. 12.
    Vene, V.: Categorical Programming with Inductive and Coinductive Types. PhD thesis. vol. 23 of Diss. Math. Univ. Tartuensis. Dept. of Computer Science, Univ. of Tartu (2000)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2006

Authors and Affiliations

  • Jevgeni Kabanov
    • 1
  • Varmo Vene
    • 1
  1. 1.Dept. of Computer ScienceUniversity of TartuTartuEstonia

Personalised recommendations