Sections 1, 2 study deterministic computations. Non-deterministic aspects of computations (inputs, interaction, errors, randomization, etc.) are crucial and challenging in advanced theory and practice. Defining them as an extension of deterministic computations is simple. The latter, however, while simpler conceptually, require elaborate models for definition. These models may be sophisticated if we need a precise measurement of all required resources. However, if we only need to define what is computable and get a very rough magnitude of the needed resources, all reasonable models turn out equivalent, even to the simplest ones. We will pay significant attention to this surprising and important fact. The simplest models are most useful for proving negative results and the strongest ones for positive results.
We start with terminology common to all models, gradually making it more specific to the models we actually study. Computations consist of events and can be represented as graphs, where edges between events reflect various relations. Nodes and edges will have attributes called labels, states, values, colors, parameters, etc. We require different labels for any two edges with the same source. Edges of one, called causal, run from each event x to all events essential for the occurrence or attributes of x. They form a directed acyclic graph (though cycles are sometimes added artificially to mark the input parts of the computation).
We will study only synchronous computations. Their nodes have a time parameter. It reflects logical steps, not necessarily a precise value of any physical clock. Causal edges only run between events with close (typically, consecutive) values of time. One event among the causes of a node is called its parent. Pointer edges connect the parent of each event to all its other possible causes. Pointers reflect the connection between simultaneous events that allows them to interact and have a joint effect. The subgraph of events at a particular value of time (with pointers and attributes) is an instant memory configuration of the model.
Each non-terminal configuration has active nodes/edges around which it may change. The models with only a single active area at any step of the computation are sequential. Others are called parallel.
The following measures of computing resources of a machine A on input x will be used throughout the course:
Time: The greatest depth
of causal chains is the number of
computation steps. The volume
is the combined number of active
edges during all steps. Time
is used (depending on the context)
as either depth or volume, which coincide for sequential models.
Space:
or
of a synchronous computation is the
greatest (over time) size of its configurations. Sometimes excluded are nodes
unchanged since the input.
Note that time complexity is robust only up to a constant factor: a machine can be modified into a new one with a larger alphabet of labels, representing several locations in one. It would produce identical results in a fraction of time and space (provided that the time limits are sufficient for the transformation of the input into and output from the new alphabet).
.
.
(
and
).
Here are a few examples of frequently appearing growth rates: negligible
; moderate
(called polynomial or P, like in P-time);
infeasible
; another infeasible:
.
The reason for ruling out exponential (and neglecting logarithmic) rates is that the known Universe is too small to accommodate exponents. Its radius is about 45 billion light years ≈ 1061.5 Plank Units. A system of >> R1.5 particles packed in R Plank Units radius collapses rapidly, be it Universe-sized or a neutron star. So the number of particles is < 1092 ≈ 2305 << 444 << 5!!.