Incremental computation takes advantage of repeated computations on inputs that differ slightly from one another, computing each output efficiently by exploiting the previous output. This paper gives an overview of a general and systematic approach to incrementalization: given a program f and an operation \Phi, the approach yields an incremental program that computes f(x \Phi y) efficiently by using the result of f(x), the intermediate results of f(x), and auxiliary information of f(x) that can be inexpensively maintained. Since every non-trivial computation proceeds by iteration or recursion, the approach can be used for achieving efficient computation by computing each iteration incrementally using an appropriate incremental program. This approach has applications in interactive systems, optimizing compilers, transformational programming, and many other areas, where problems were previously solved mostly in ad hoc and often error-prone ways. The design and implementation of a prototype system, CACHET,
|
5825
|
Introduction to Algorithms
– Cormen, Leiserson, et al.
- 2001
|
|
2004
|
The Design and Analysis of Computer Algorithms
– Aho, Hopcroft, et al.
- 1974
|
|
1153
|
A Discipline of Programming
– Dijkstra
- 1976
|
|
529
|
A transformation system for developing recursive programs
– Burstall, Darlington
- 1977
|
|
504
|
Data structures and network algorithms
– Tarjan
- 1983
|
|
425
|
The Science of Programming
– Gries
- 1981
|
|
352
|
The omega test: a fast and practical integer programming algorithm for dependence analysis
– Pugh
- 1991
|
|
260
|
Three partition refinement algorithms
– Paige, Tarjan
- 1987
|
|
215
|
A data structure for dynamic trees
– Sleator, Tarjan
- 1983
|
|
211
|
KIDS: A semiautomatic program development system
– Smith
- 1990
|
|
188
|
The Synthesizer Generator: A System for Constructing Language-Based Editors
– Reps, Teitelbaum
- 1988
|
|
137
|
Data structures for on-line updating of minimum spanning trees, with applications
– Frederickson
- 1985
|
|
125
|
CENTAUR: The System
– Borras, Clement, et al.
- 1988
|
|
122
|
An incremental constraint solver
– Freeman-Benson, Maloney, et al.
- 1990
|
|
111
|
Sparsification - a technique for speeding up dynamic graph algorithms
– Eppstein, Galil, et al.
- 1992
|
|
105
|
A deductive approach to program synthesis
– Manna, Waldinger
- 1980
|
|
82
|
The promotion and accumulation strategies in transformational programming
– Bird
- 1984
|
|
79
|
An incremental algorithm for a generalization of the shortestpath problem. Jounal of Algorithms
– Ramalingam, Reps
- 1996
|
|
78
|
Incremental Context-Dependent Analysis for Language Based Editors
– Reps, Teitelbaum, et al.
- 1983
|
|
74
|
Finite differencing of computable expressions
– Paige, Koenig
- 1982
|
|
73
|
Reduction of operator strength
– ALLEN, COCKE, et al.
- 1981
|
|
72
|
memo’ functions and machine learning
– Michie
- 1968
|
|
68
|
Tabulation Techniques for Recursive Programs
– Bird
- 1980
|
|
63
|
Automatic complexity analysis
– Rosendahl
|
|
60
|
Incremental evaluation of computational circuits
– Alpern, Hoover, et al.
- 1990
|
|
59
|
Mechanical program analysis
– Wegbreit
- 1975
|
|
57
|
Lazy memo-functions
– Hughes
- 1985
|
|
54
|
Maintenance of a minimum spanning forest in a dynamic planar graph
– Eppstein, Italiano, et al.
- 1990
|
|
54
|
The Craft of Programming
– Reynolds
- 1981
|
|
52
|
Incremental computation via function caching
– Pugh, Teitelbaum
- 1989
|
|
50
|
Analysis and caching of dependencies
– Abadi, Lampson, et al.
- 1996
|
|
44
|
Incremental data flow analysis algorithms
– Ryder, Paull
- 1988
|
|
42
|
Formal program construction by transformations—computer-aided, intuition guided programming
– Bauer, Möller, et al.
- 1989
|
|
40
|
The Analysis of Algorithms
– Purdom, Brown
- 1985
|
|
39
|
Programming languages and their compilers: Preliminary notes
– Cocke, Schwartz
- 1970
|
|
39
|
Automating derivation of incremental programs
– Zhang, Liu
- 1998
|
|
32
|
Automatic accurate time-bound analysis for high-level languages
– Liu, Gomez
- 1998
|
|
32
|
ªImproved Data Structures for Fully Dynamic Biconnectivity,º
– Rauch
- 1994
|
|
31
|
Static caching for incremental computation
– Liu, Stoller, et al.
- 1998
|
|
29
|
Efficient Synthesis of Gaussian Filters by Cascaded Uniform Filters
– Wells
- 1986
|
|
28
|
Non-Restoring Integer Square Root: A Case Study
– O’Leary, Leeser, et al.
- 1995
|
|
27
|
Eliminating Redundant Recursive Calls
– Cohen
- 1983
|
|
27
|
Programming with invariants
– Paige
- 1986
|
|
27
|
INC: A language for incremental computations
– Yellin, Strom
- 1991
|
|
26
|
Transformational design and implementation of a new efficient solution to the ready simulation problem
– Bloom, Paige
- 1995
|
|
26
|
Building friendly parsers
– Jalili, Gallier
- 1982
|
|
26
|
Lazy strength reduction
– Knoop, Ruthing, et al.
- 1993
|
|
24
|
A note on a standard strategy for developing loop invariants and loops
– Gries
- 1982
|
|
24
|
Discovering auxiliary information for incremental computation
– Liu, Stoller, et al.
- 1996
|
|
24
|
A categorized bibliography on incremental computation
– Ramalingam, Reps
- 1993
|