``An Incremental Algorithm for Satisfying Hierarchies of Multi-way, Dataflow Constraints''

Bradley T. Vander Zanden

Appears in ACM Transactions on Programming Languages and Systems, 18(1), January 1996, pp. 30-72.

Available via anonymous ftp to cs.utk.edu in

pub/bvz/papers/quickplan-toplas.ps.Z.

Abstract

One-way dataflow constraints have gained popularity in many types of interactive systems because of their simplicity, efficiency, and manageability. Although it is widely acknowledged that multi-way dataflow constraints could make it easier to specify certain relationships in these applications, concerns about their predictability and efficiency have impeded their acceptance. Constraint hierarchies have been developed to address the predictability problem and incremental algorithms have been developed to address the efficiency problem. However, existing incremental algorithms for satisfying constraint hierarchies encounter two difficulties: (1) they are incapable of guaranteeing an acyclic solution if a constraint hierarchy has one or more cyclic solutions, and (2) they require worst-case exponential time to satisfy systems of multi-output constraints. This paper surmounts these difficulties by presenting an incremental algorithm called QuickPlan that satisfies in worst case O(N^2)) time any hierarchy of multi-way, multi-output dataflow constraints that has at least one acyclic solution, where N is the number of constraints. With benchmarks and real problems that can be solved efficiently using existing algorithms, its performance is competitive or superior. With benchmarks and real problems that cannot be solved using existing algorithms or that cannot be solved efficiently, QuickPlan finds solutions and does so efficiently, typically in O(N) time or less. QuickPlan is based on the strategy of propagation of degrees of freedom. The only restriction it imposes is that every constraint method must use all of the variables in the constraint as either an input or an output variable. This requirement is met in every constraint-based, interactive application that we have developed or seen.