Separation of Correctness and Complexity in Algorithm Design

In this paper we propose a new approach to the design of algorithms. This approach is based on the view that all algorithms are composed of a computation and a control component, and that these components can be designed separately. The computation component is responsible for the correctness of an algorithm. It embodies the computational knowledge about a problem domain that is needed to solve the corresponding problem. The control component governs complexity aspects of the solution method by directing the usage of the computational knowledge. This bisection allows the problem of how to construct an algorithm to be split into two smaller problems: "What are the elementary units of computational knowledge for the problem at hand?" and "In what order should these units be used to (efficiently) obtain a solution." This way, the concerns of correctness and complexity are separated. We assert that there are many advantages in separating correctness and complexity in algorithm design. Hence, we examine properties of programming formalisms that influence the possibility of separating the design of the computation and control components of an algorithm.

[1]  Jim Davies,et al.  Science of Computer Programming , 2014 .

[2]  Jean-Marie Jacquet Conclog: A Methodological Approach to Concurrent Logic Programming , 1991, Lecture Notes in Computer Science.

[3]  Donald Ervin Knuth,et al.  The Art of Computer Programming , 1968 .

[4]  Andreas Maaßen Parallel Programming with Data Structures and Higher Order Functions , 1992, Sci. Comput. Program..

[5]  Martin Rem,et al.  Associons: A Program Notation with Tuples Instead of Variables , 1981, TOPL.

[6]  Robin Milner,et al.  Communication and concurrency , 1989, PHI Series in computer science.

[7]  BackusJohn Can programming be liberated from the von Neumann style , 1978 .

[8]  Ingo Br,et al.  Prolog programming for artificial intelligence , 1990 .

[9]  Patrick J. Hayes,et al.  Computation and Deduction , 1973, MFCS.

[10]  P. Hudak Exploring parafunctional programming: separating the what from the how , 1988, IEEE Software.

[11]  John W. Backus,et al.  Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs , 1978, CACM.

[12]  Edsger W. Dijkstra,et al.  A Discipline of Programming , 1976 .

[13]  Robert A. Kowalski,et al.  Algorithm = logic + control , 1979, CACM.

[14]  Daniel Le Métayer,et al.  Programming by multiset transformation , 1993, CACM.

[15]  J. W. Backus,et al.  Can programming be liberated from the von Neumann style , 1977 .

[16]  Allen Van Gelder,et al.  Computer Algorithms: Introduction to Design and Analysis , 1978 .

[17]  K. Mani Chandy,et al.  Parallel program design - a foundation , 1988 .

[18]  Leonie Moench Computer Algorithms Introduction To Design And Analysis , 2016 .

[19]  Lambert G. L. T. Meertens,et al.  Constructing a Calculus of Programs , 1989, MPC.

[20]  Anne Kaldewaij,et al.  Programming - the derivation of algorithms , 1990, Prentice Hall international series in computer science.