The promotion and accumulation strategies in transformational programming
ACM Transactions on Programming Languages and Systems (TOPLAS) - Lecture notes in computer science Vol. 174
Eliminating Redundant Recursive Calls.
ACM Transactions on Programming Languages and Systems (TOPLAS)
The analysis of algorithms
ACM Transactions on Programming Languages and Systems (TOPLAS) - The MIT Press scientific computation series
Proc. of a conference on Functional programming languages and computer architecture
Formal Program Construction by Transformations-Computer-Aided, Intuition-Guided Programming
IEEE Transactions on Software Engineering
The synthesizer generator: a system for constructing language-based editors
The synthesizer generator: a system for constructing language-based editors
An improved replacement strategy for function caching
LFP '88 Proceedings of the 1988 ACM conference on LISP and functional programming
Incremental computation via function caching
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Specification and transformation of programs: a formal approach to software development
Specification and transformation of programs: a formal approach to software development
Introduction to algorithms
Incremental reduction in the lambda calculus
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Acta Informatica
KIDS: A Semiautomatic Program Development System
IEEE Transactions on Software Engineering
Improving recursive functions by inverting the order of evaluation
Science of Computer Programming
Towards an automated tupling strategy
PEPM '93 Proceedings of the 1993 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Systematic derivation of incremental programs
Science of Computer Programming
Analysis and caching of dependencies
Proceedings of the first ACM SIGPLAN international conference on Functional programming
Rules and strategies for transforming functional and logic programs
ACM Computing Surveys (CSUR)
Discovering auxiliary information for incremental computation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Tupling calculation eliminates multiple data traversals
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
A bounds inference method for vector-based memoization
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Dynamic programming: a different perspective
Proceedings of the IFIP TC 2 WG 2.1 international workshop on Algorithmic languages and calculi
Program derivation via list introduction
Proceedings of the IFIP TC 2 WG 2.1 international workshop on Algorithmic languages and calculi
Proceedings of the IFIP TC 2 WG 2.1 international workshop on Algorithmic languages and calculi
Static caching for incremental computation
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Transformation System for Developing Recursive Programs
Journal of the ACM (JACM)
Tabulation Techniques for Recursive Programs
ACM Computing Surveys (CSUR)
Finite Differencing of Computable Expressions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Dynamic Programming
Program improvement by internal specialization
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The Design and Analysis of Computer Algorithms
The Design and Analysis of Computer Algorithms
Symbolic Finite Differencing - Part I
ESOP '90 Proceedings of the 3rd European Symposium on Programming
A Generic Program for Sequential Decision Processes
PLILPS '95 Proceedings of the 7th International Symposium on Programming Languages: Implementations, Logics and Programs
Automatic Accurate Time-Bound Analysis for High-Level Languages
LCTES '98 Proceedings of the ACM SIGPLAN Workshop on Languages, Compilers, and Tools for Embedded Systems
From Dynamic Programming to Greedy Algorithms
Proceedings of the IFIP TC2/WG 2.1 State-of-the-Art Report on Formal Program Development
Tupling Functions with Multiple Recursion Parameters
WSA '93 Proceedings of the Third International Workshop on Static Analysis
KBSE '95 Proceedings of The 10th Knowledge-Based Software Engineering Conference
A powerful strategy for deriving efficient programs by transformation
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Recursive programming through table look-up
SYMSAC '76 Proceedings of the third ACM symposium on Symbolic and algebraic computation
Dependence Analysis for Recursive Data
ICCL '98 Proceedings of the 1998 International Conference on Computer Languages
Loop optimization for aggregate array computations
ICCL '98 Proceedings of the 1998 International Conference on Computer Languages
Dynamic Programming
Bridging the Algorithm Gap: A Linear-Time Functional Program for Paragraph Formatting
Bridging the Algorithm Gap: A Linear-Time Functional Program for Paragraph Formatting
IEEE Software
Goal-Directed Program Transformation
IEEE Transactions on Software Engineering
Automating program speedup by deciding what to cache
IJCAI'85 Proceedings of the 9th international joint conference on Artificial intelligence - Volume 1
Eliminating Dead Code on Recursive Data
SAS '99 Proceedings of the 6th International Symposium on Static Analysis
Solving Regular Tree Grammar Based Constraints
SAS '01 Proceedings of the 8th International Symposium on Static Analysis
Hi-index | 0.00 |
Dynamic programming is an important algorithm design technique. It is used for solving problems whose solutions involve recursively solving subproblems that share subsubproblems. While a straightforward recursive program solves common subsubproblems repeatedly and often takes exponential time, a dynamic programming algorithm solves every subsubproblem just once, saves the result, reuses it when the subsubproblem is encountered again, and takes polynomial time. This paper describes a systematic method for transforming programs written as straightforward recursions into programs that use dynamic programming. The method extends the original program to cache all possibly computed values, incrementalizes the extended program with respect to an input increment to use and maintain all cached results, prunes out cached results that are not used in the incremental computation, and uses the resulting incremental program to form an optimized new program. Incrementalization statically exploits semantics of both control structures and data structures and maintains as invariants equalities characterizing cached results. The principle underlying incrementalization is general for achieving drastic program speedups. Compared with previous methods that perform memoization or tabulation, the method based on incrementalization is more powerful and systematic. It has been implemented and applied to numerous problems and succeeded on all of them.