Recursion Schemes for Dynamic Programming

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

Abstract

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.

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  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