13.12.2012 Views

Theoretical and Experimental DNA Computation (Natural ...

Theoretical and Experimental DNA Computation (Natural ...

Theoretical and Experimental DNA Computation (Natural ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

64 3 Models of Molecular <strong>Computation</strong><br />

putation that proceeds by the execution of a single operation per time step).<br />

In [30], Berry <strong>and</strong> Boudol describe a machine that may be used by theorists<br />

in the field of concurrent programming. This research is concerned with the<br />

study of machine models that allow multiple processes executing in parallel.<br />

We briefly describe their Chemical Abstract Machine (CHAM) in the next<br />

section, but first describe its origins.<br />

Most concurrency models are based on architectural principles, for example,<br />

networks of processes communicating via “channels” or “threads.” In<br />

[20], Banâtre <strong>and</strong> Le Métayer argue that the imposition of architectual control<br />

structures in programming languages actually hinders the programmer,<br />

rather than helping him or her. They quote Ch<strong>and</strong>y <strong>and</strong> Misra [41]:<br />

The basic problem in programming is managing complexity. We cannot<br />

address that problem as long as we lump together concerns about<br />

the core problem to be solved, the language in which the program is<br />

to be written, <strong>and</strong> the hardware on which the program is to execute.<br />

Program development should begin by focusing attention on the problem<br />

the be solved <strong>and</strong> postponing considerations of architecture <strong>and</strong><br />

language constructs.<br />

Banâtre <strong>and</strong> Le Métayer argue that it should be possible to construct an abstract,<br />

high-level version of a program to solve a given problem, <strong>and</strong> that that<br />

should be free from artificial sequentiality due to architectural constraints.<br />

They cite the simple example of finding the maximum element in a nonempty<br />

set [21].<br />

In a “traditional”, imperative language, the code may look like this. Note<br />

that n denotes the size of the set, which is stored in the array set[].<br />

maximum ← set[0]<br />

for loop =1ton − 1 do begin<br />

c ← set[loop]<br />

if c > maximum then maximum ← c<br />

end<br />

In this case the program takes the initial maximum to be the first element,<br />

<strong>and</strong> then scans the set in a linear fashion. If an element is found that is larger<br />

than the current maximum, then that element becomes the current maximum,<br />

<strong>and</strong> so on until the end of the set is reached.<br />

The program imposes a total ordering on the comparisons of the elements<br />

when, in fact, the maximum of a set can be computed by performing comparisons<br />

in any order:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!