Computation of matrix chain products. Part II
SIAM Journal on Computing
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
Program derivation by fixed point computation
Science of Computer 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
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
Acta Informatica
KIDS: A Semiautomatic Program Development System
IEEE Transactions on Software Engineering
A practical algorithm for exact array dependence analysis
Communications of the ACM
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
Automating derivation of incremental programs
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
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)
From recursion to iteration: what are the optimizations?
PEPM '00 Proceedings of the 2000 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Tabulation Techniques for Recursive Programs
ACM Computing Surveys (CSUR)
Finite Differencing of Computable Expressions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Communications of the ACM
Automatic Accurate Live Memory Analysis for Garbage-Collected Languages
OM '01 Proceedings of the 2001 ACM SIGPLAN workshop on Optimization of middleware and distributed systems
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
Automatic Accurate Cost-Bound Analysis for High-Level Languages
IEEE Transactions on Computers
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
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
Optimizing Ackermann's function by incrementalization
Proceedings of the 2003 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Transformation by interpreter specialisation
Science of Computer Programming - Special issue on program transformation
Optimizing aggregate array computations in loops
ACM Transactions on Programming Languages and Systems (TOPLAS)
A monadic approach for avoiding code duplication when staging memoized functions
Proceedings of the 2006 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Redundant Call Elimination via Tupling
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
Automating branch-and-bound for dynamic programs
PEPM '08 Proceedings of the 2008 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
From datalog rules to efficient programs with time and space guarantees
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Short Cut to Optimal Sequences
APLAS '09 Proceedings of the 7th Asian Symposium on Programming Languages and Systems
JuliusC: a practical approach for the analysis of divide-and-conquer algorithms
LCPC'04 Proceedings of the 17th international conference on Languages and Compilers for High Performance Computing
Redundant Call Elimination via Tupling
Fundamenta Informaticae - Program Transformation: Theoretical Foundations and Basic Techniques. Part 2
From clarity to efficiency for distributed algorithms
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
Hi-index | 0.00 |
Dynamic programming is an important algorithm design technique. It is used for problems whose solutions involve recursively solving subproblems that share subsubproblems. While a straightforward recursive program solves common subsubproblems repeatedly, a dynamic programming algorithm solves every subsubproblem just once, saves the result, and reuses it when the subsubproblem is encountered again. This can reduce the time complexity from exponential to polynomial. 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. It provides the basis of a general method 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 in a prototype system CACHET and applied to numerous problems and succeeded on all of them.