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
Magic sets and other strange ways to implement logic programs (extended abstract)
PODS '86 Proceedings of the fifth ACM SIGACT-SIGMOD symposium on Principles of database systems
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
Acta Informatica
A practical algorithm for exact array dependence analysis
Communications of the ACM
Optimization of functional programs by grammar thinning
ACM Transactions on Programming Languages and Systems (TOPLAS)
Systematic derivation of incremental programs
Science of Computer Programming
Discovering auxiliary information for incremental computation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Algebra of programming
A bounds inference method for vector-based memoization
ICFP '97 Proceedings of the second ACM SIGPLAN international conference on Functional programming
Program derivation via list introduction
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)
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)
Efficiency by Incrementalization: An Introduction
Higher-Order and Symbolic Computation
Program improvement by internal specialization
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Algorithmic Language and Program Development
Algorithmic Language and Program Development
The Design and Analysis of Computer Algorithms
The Design and Analysis of Computer Algorithms
A Generic Program for Sequential Decision Processes
PLILPS '95 Proceedings of the 7th International Symposium on Programming Languages: Implementations, Logics and Programs
Tupling Functions with Multiple Recursion Parameters
WSA '93 Proceedings of the Third International Workshop on Static Analysis
A New Meta-complexity Theorem for Bottom-Up Logic Programs
IJCAR '01 Proceedings of the First International Joint Conference on Automated Reasoning
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
Optimizing Ackermann's function by incrementalization
Proceedings of the 2003 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
From datalog rules to efficient programs with time and space guarantees
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
Optimizing aggregate array computations in loops
ACM Transactions on Programming Languages and Systems (TOPLAS)
Table design in dynamic programming
Information and Computation
Maximum segment sum is back: deriving algorithms for two segment problems with bounded lengths
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)
Hi-index | 0.00 |
This paper describes a systematic method for optimizing recursive functions using both indexed and recursive data structures. The method is based on two critical ideas: first, determining a minimal input increment operation so as to compute a function on repeatedly incremented input; second, determining appropriate additional values to maintain in appropriate data structures, based on what values are needed in computation on an incremented input and how these values can be established and accessed. Once these two are determined, the method extends the original program to return the additional values, derives an incremental version of the extended program, and forms an optimized program that repeatedly calls the incremental program. The method can derive all dynamic programming algorithms found in standard algorithm textbooks. There are many previous methods for deriving efficient algorithms, but none is as simple, general, and systematic as ours.