AlgorithmsandDataStructures Part3
AlgorithmsandDataStructures Part3
Structures
Part 3: Computational Complexity and
Computability (Wikipedia Book 2014)
By Wikipedians
PDF generated using the open source mwlib toolkit. See [Link] for more information.
PDF generated at: Sun, 22 Dec 2013 14:54:36 UTC
Contents
Articles
Run time (program lifecycle phase) 1
Best, worst and average case 2
Big O notation 5
Computational complexity theory 17
Computability 29
Turing machine 34
Church–Turing thesis 51
Theoretical computer science 61
References
Article Sources and Contributors 64
Image Sources, Licenses and Contributors 66
Article Licenses
License 67
Run time (program lifecycle phase) 1
Implementation details
In certain cases, the execution of a program begins after a loader performs the necessary memory setup and links the
program with any dynamically linked libraries it needs. In some cases a language or implementation will have these
tasks done by the language runtime instead, though this is unusual in mainstream languages on common consumer
operating systems.
Some program debugging can only be performed (or is more efficient or accurate when performed) at runtime. Logic
errors and array bounds checking are examples. For this reason, some programming bugs are not discovered until the
program is tested in a "live" environment with real data, despite sophisticated compile-time checking and pre-release
testing. In this case, the end user may encounter a runtime error message.
When analyzing algorithms which often take a small time to complete, but periodically require a much larger time,
amortized analysis can be used to determine the worst-case running time over a (possibly infinite) series of
operations. This amortized worst-case cost can be much closer to the average case cost, while still providing a
guaranteed upper limit on the running time.
The worst-case analysis is related to the worst-case complexity.[2]
Practical consequences
Many problems with bad worst-case performance have good average-case performance. For problems we want to
solve, this is a good thing: we can hope that the particular instances we care about are average. For cryptography,
this is very bad: we want typical instances of a cryptographic problem to be hard. Here methods like random
self-reducibility can be used for some specific problems to show that the worst case is no harder than the average
case, or, equivalently, that the average case is no easier than the worst case.
On the other hand some algorithms like hash tables have very poor worst case behaviours, but a well written hash
table of sufficient size will statistically never give the worst case; the average number of operations performed
follows an exponential decay curve, and so the run time of an operation is statistically bounded.
Examples
Sorting algorithms
Algorithm Data Structure Time Complexity:Best Time Complexity:Average Time Complexity:Worst Space Complexity:Worst
Merge sort Array O(n log(n)) O(n log(n)) O(n log(n)) O(n)
• Insertion sort applied to a list of n elements, assumed to be all different and initially in random order. On average,
half the elements in a list A1 ... Aj are less than elementAj+1, and half are greater. Therefore the algorithm
compares the j+1-st element to be inserted on the average with half the already sorted sub-list, so tj = j/2. Working
out the resulting average-case running time yields a quadratic function of the input size, just like the worst-case
running time.
• Quicksort applied to a list of n elements, again assumed to be all different and initially in random order. This
popular sorting algorithm has an average-case performance of O(n log n), which contributes to making it a very
fast algorithm in practice. But given a worst-case input, its performance degrades to O(n2).
Data structures
Best, worst and average case 4
Data Time Time Time Time Time Time Time Time Space
structure Complexity: Complexity: Complexity: Complexity: Complexity: Complexity: Complexity: Complexity: Complexity:
Avg: Avg: Search Avg: Avg: Worst: Worst: Worst: Worst: Worst
Indexing Insertion Deletion Indexing Search Insertion Deletion
Singly O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
linked list
Doubly O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
linked list
Binary - O((log n)) O((log n)) O((log n)) - O(n) O(n) O(n) O(n)
search
tree
B-tree - O((log n)) O((log n)) O((log n)) - O((log n)) O((log n)) O((log n)) O(n)
Red-black - O((log n)) O((log n)) O((log n)) - O((log n)) O((log n)) O((log n)) O(n)
tree
AVL tree - O((log n)) O((log n)) O((log n)) - O((log n)) O((log n)) O((log n)) O(n)
• Linear search on a list of n elements. In the worst case, the search must visit every element once. This happens
when the value being searched for is either the last element in the list, or is not in the list. However, on average,
assuming the value searched for is in the list and each list element is equally likely to be the value searched for,
the search visits only n/2 elements.
Graph search
Node/Edge management Storage Add vertex Add edge Remove vertex Remove edge Query
incidence matrix O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|E|)
References
[1] Introduction to Algorithms (Cormen, Leiserson, Rivest, and Stein) 2001, Chapter 2 "Getting Started".
[2] Worst-case complexity (http:/ / www. fsz. bme. hu/ ~szirmay/ ray6. pdf)
• [Link]
Big O notation 5
Big O notation
In mathematics, big O notation
describes the limiting behavior of a
function when the argument tends
towards a particular value or infinity,
usually in terms of simpler functions. It
is a member of a larger family of
notations that is called Landau
notation, Bachmann–Landau
notation (after Edmund Landau and
Paul Bachmann), or asymptotic
notation. In computer science, big O
notation is used to classify algorithms
by how they respond (e.g., in their
processing time or working space
requirements) to changes in input size.
In analytic number theory, it is used to
estimate the "error committed" while
replacing the asymptotic size, or
asymptotic mean size, of an
arithmetical function, by the value, or Example of Big O notation: f(x) ∈ O(g(x)) as there exists c > 0 (e.g., c = 1) and x0 (e.g.,
x0 = 5) such that f(x) < cg(x) whenever x > x0.
mean value, it takes at a large finite
argument. A famous example is the
problem of estimating the remainder term in the prime number theorem.
Big O notation characterizes functions according to their growth rates: different functions with the same growth rate
may be represented using the same O notation. The letter O is used because the growth rate of a function is also
referred to as order of the function. A description of a function in terms of big O notation usually only provides an
upper bound on the growth rate of the function. Associated with big O notation are several related notations, using
the symbols o, Ω, ω, and Θ, to describe other kinds of bounds on asymptotic growth rates.
Big O notation is also used in many other fields to provide similar estimates.
Formal definition
Let f(x) and g(x) be two functions defined on some subset of the real numbers. One writes
if and only if there is a positive constant M such that for all sufficiently large values of x, f(x) is at most M multiplied
by g(x) in absolute value. That is, f(x) = O(g(x)) if and only if there exists a positive real number M and a real
number x0 such that
In many contexts, the assumption that we are interested in the growth rate as the variable x goes to infinity is left
unstated, and one writes more simply that f(x) = O(g(x)). The notation can also be used to describe the behavior of f
near some real number a (often, a = 0): we say
If g(x) is non-zero for values of x sufficiently close to a, both of these definitions can be unified using the limit
superior:
if and only if
Example
In typical usage, the formal definition of O notation is not used directly; rather, the O notation for a function f(x) is
derived by the following simplification rules:
• If f(x) is a sum of several terms, the one with the largest growth rate is kept, and all others omitted.
• If f(x) is a product of several factors, any constants (terms in the product that do not depend on x) are omitted.
For example, let , and suppose we wish to simplify this function, using O notation, to
describe its growth rate as x approaches infinity. This function is the sum of three terms: 6x4, −2x3, and 5. Of these
three terms, the one with the highest growth rate is the one with the largest exponent as a function of x, namely 6x4.
Now one may apply the second rule: 6x4 is a product of 6 and x4 in which the first factor does not depend on x.
Omitting this factor results in the simplified form x4. Thus, we say that f(x) is a "big-oh" of (x4). Mathematically, we
can write f(x) = O(x4). One may confirm this calculation using the formal definition: let f(x) = 6x4 − 2x3 + 5 and
g(x) = x4. Applying the formal definition from above, the statement that f(x) = O(x4) is equivalent to its expansion,
for some suitable choice of x0 and M and for all x > x0. To prove this, let x0 = 1 and M = 13. Then, for all x > x0:
so
Usage
Big O notation has two main areas of application. In mathematics, it is commonly used to describe how closely a
finite series approximates a given function, especially in the case of a truncated Taylor series or asymptotic
expansion. In computer science, it is useful in the analysis of algorithms. In both applications, the function g(x)
appearing within the O(...) is typically chosen to be as simple as possible, omitting constant factors and lower order
terms. There are two formally close, but noticeably different, usages of this notation: infinite asymptotics and
infinitesimal asymptotics. This distinction is only in application and not in principle, however—the formal definition
for the "big O" is the same for both cases, only with different limits for the function argument.
Big O notation 7
Infinite asymptotics
Big O notation is useful when analyzing algorithms for efficiency. For example, the time (or the number of steps) it
takes to complete a problem of size n might be found to be T(n) = 4n2 − 2n + 2. As n grows large, the n2 term will
come to dominate, so that all other terms can be neglected—for instance when n = 500, the term 4n2 is 1000 times as
large as the 2n term. Ignoring the latter would have negligible effect on the expression's value for most purposes.
Further, the coefficients become irrelevant if we compare to any other order of expression, such as an expression
containing a term n3 or n4. Even if T(n) = 1,000,000n2, if U(n) = n3, the latter will always exceed the former once n
grows larger than 1,000,000 (T(1,000,000) = 1,000,0003= U(1,000,000)). Additionally, the number of steps depends
on the details of the machine model on which the algorithm runs, but different types of machines typically vary by
only a constant factor in the number of steps needed to execute an algorithm. So the big O notation captures what
remains: we write either
or
and say that the algorithm has order of n2 time complexity. Note that "=" is not meant to express "is equal to" in its
normal mathematical sense, but rather a more colloquial "is", so the second expression is technically accurate (see
the "Equals sign" discussion below) while the first is a common abuse of notation.[1]
Infinitesimal asymptotics
Big O can also be used to describe the error term in an approximation to a mathematical function. The most
significant terms are written explicitly, and then the least-significant terms are summarized in a single big O term.
For example,
expresses the fact that the error, the difference , is smaller in absolute value than some
constant times when is close enough to 0.
Properties
If a function f(n) can be written as a finite sum of other functions, then the fastest growing one determines the order
of f(n). For example
In particular, if a function may be bounded by a polynomial in n, then as n tends to infinity, one may disregard
lower-order terms of the polynomial. O(nc) and O(cn) are very different. If c is greater than one, then the latter grows
much faster. A function that grows faster than nc for any c is called superpolynomial. One that grows more slowly
than any exponential function of the form is called subexponential. An algorithm can require time that is both
superpolynomial and subexponential; examples of this include the fastest known algorithms for integer factorization.
O(log n) is exactly the same as O(log(nc)). The logarithms differ only by a constant factor (since
) and thus the big O notation ignores that. Similarly, logs with different constant bases are
equivalent.
Exponentials with different bases, on the other hand, are not of the same order. For example, and are not of
the same order. Changing units may or may not affect the order of the resulting algorithm. Changing units is
equivalent to multiplying the appropriate variable by a constant wherever it appears. For example, if an algorithm
runs in the order of n2, replacing n by cn means the algorithm runs in the order of , and the big O notation
ignores the constant . This can be written as . If, however, an algorithm runs in the order of
Big O notation 8
, replacing n with cn gives . This is not equivalent to in general. Changing of variable may affect the order of th
resulting algorithm. For example, if an algorithm's running time is O(n) when measured in terms of the number n of
digits of an input number x, then its running time is O(log x) when measured as a function of the input number x
itself, because n = Θ(log x).
Product
Sum
Multiplication by a constant
Let k be a constant. Then:
if k is nonzero.
Multiple variables
Big O (and little o, and Ω...) can also be used with multiple variables. To define Big O formally for multiple
variables, suppose and are two functions defined on some subset of . We say
if and only if
Note that this definition allows all of the coordinates of to increase to infinity. In particular, the statement
(i.e., ).
It is worth noting that Rodney R. Howell in his paper [2] "On Asymptotic Notation with Multiple Variables" claims
that it is impossible to define Big O notation in multiple variables in a way that implies the properties commonly
used in algorithms analysis.
Big O notation 9
Matters of notation
Equals sign
The statement "f(x) is O(g(x))" as defined above is usually written as f(x) = O(g(x)). Some consider this to be an
abuse of notation, since the use of the equals sign could be misleading as it suggests a symmetry that this statement
does not have. As de Bruijn says, O(x) = O(x2) is true but O(x2) = O(x) is not. Knuth describes such statements as
"one-way equalities", since if the sides could be reversed, "we could deduce ridiculous things like n = n2 from the
identities n = O(n2) and n2 = O(n2)." For these reasons, it would be more precise to use set notation and write
f(x) ∈ O(g(x)), thinking of O(g(x)) as the class of all functions h(x) such that |h(x)| ≤ C|g(x)| for some constant C.
However, the use of the equals sign is customary. Knuth pointed out that "mathematicians customarily use the = sign
as they use the word 'is' in English: Aristotle is a man, but a man isn't necessarily Aristotle."[3]
Example
Suppose an algorithm is being developed to operate on a set of n elements. Its developers are interested in finding a
function T(n) that will express how long the algorithm will take to run (in some arbitrary measurement of time) in
terms of the number of elements in the input set. The algorithm works by first calling a subroutine to sort the
elements in the set and then perform its own operations. The sort has a known time complexity of O(n2), and after
the subroutine runs the algorithm must take an additional time before it terminates. Thus the
overall time complexity of the algorithm can be expressed as
This can perhaps be most easily read by replacing O(n2) with "some function that grows asymptotically no faster
than n2 ". Again, this usage disregards some of the formal meaning of the "=" and "+" symbols, but it does allow one
to use the big O notation as a kind of convenient placeholder.
Declaration of variables
Another feature of the notation, although less exceptional, is that function arguments may need to be inferred from
the context when several variables are involved. The following two right-hand side big O notations have
dramatically different meanings:
The first case states that f(m) exhibits polynomial growth, while the second, assuming m > 1, states that g(n) exhibits
exponential growth. To avoid confusion, some authors use the notation
Multiple usages
In more complicated usage, O(...) can appear in different places in an equation, even several times on each side. For
example, the following are true for
The meaning of such statements is as follows: for any functions which satisfy each O(...) on the left side, there are
some functions satisfying each O(...) on the right side, such that substituting all these functions into the equation
makes the two sides equal. For example, the third equation above means: "For any function , there
is some function such that ." In terms of the "set notation" above, the meaning is
that the class of functions represented by the left side is a subset of the class of functions represented by the right
side. In this use the "=" is a formal symbol that unlike the usual use of "=" is not a symmetric relation. Thus for
example does not imply the false statement .
double logarithmic Finding an item using interpolation search in a sorted array of uniformly distributed values.
logarithmic Finding an item in a sorted array with a binary search or a balanced search tree as well as all
operations in a Binomial heap.
linear Finding an item in an unsorted list or a malformed tree (worst case) or in an unsorted array;
adding two n-bit integers by ripple carry.
linearithmic, Performing a Fast Fourier transform; heapsort, quicksort (best and average case), or merge
loglinear, or sort
quasilinear
quadratic Multiplying two n-digit numbers by a simple algorithm; bubble sort (worst case or naive
implementation), Shell sort, quicksort (worst case), selection sort or insertion sort
L-notation or Factoring a number using the quadratic sieve or number field sieve
sub-exponential
exponential Finding the (exact) solution to the travelling salesman problem using dynamic programming;
determining if two logical statements are equivalent using brute-force search
factorial Solving the traveling salesman problem via brute-force search; generating all unrestricted
permutations of a poset; finding the determinant with expansion by minors; enumerating all
partitions of a set.
Big O notation 11
Little-o notation
The relation is read as " is little-o of ". Intuitively, it means that grows much
faster than , or similarly, the growth of is nothing compared to that of . It assumes that f and g
are both functions of one variable. Formally, f(n) = o(g(n)) as n → ∞ means that for every positive constant there
exists a constant N such that
Note the difference between the earlier formal definition for the big-O notation, and the present definition of little-o:
while the former has to be true for at least one constant M the latter must hold for every positive constant ,
however small. In this way little-o notation makes a stronger statement than the corresponding big-O notation: every
function that is little-o of g is also big-O of g, but not every function that is big-O g is also little-o of g (for instance g
itself is not, unless it is identically zero near ∞).
If g(x) is nonzero, or at least becomes nonzero beyond a certain point, the relation f(x) = o(g(x)) is equivalent to
For example,
•
•
•
Little-o notation is common in mathematics but rarer in computer science. In computer science the variable (and
function value) is most often a natural number. In mathematics, the variable and function values are often real
numbers. The following properties can be useful:
•
•
•
• (and thus the above properties apply with most combinations of o and O).
As with big O notation, the statement " is " is usually written as , which is a
slight abuse of notation.
Big O notation 12
where is some real number, or , where and are real functions defined in a neighbourhood of ,
and where is positive in this neighbourhood.
The first one (chronologically) is used in analytic number theory, and the other one in computational complexity
theory. When the two subjects meet, this situation is bound to generate confusion.
Simple examples
We have
,
and more precisely
.
We have
,
and more precisely
;
however
.
Big O notation 13
with the comment: "Although I have changed Hardy and Littlewood's definition of , I feel justified in doing so
because their definition is by no mean in wide use, and because there are other ways to say what they want to say in
the comparatively rare cases when their definition applies". However, the Hardy–Littlewood definition had been
well used for at least 25 years.[8]
is bounded
below by
asymptotically
asymptotically
On the is equal to
order of
asymptotically
Big O notation 14
Aside from the Big O notation, the Big Theta Θ and Big Omega Ω notations are the two most often used in computer
science; the small omega ω notation is occasionally used in computer science.
Aside from the Big O notation, the small o, Big Omega Ω and notations are the three most often used in number
theory; the small omega ω notation is never used in number theory.
which is an equivalence relation and a more restrictive notion than the relationship "f is Θ(g)" from above. (It
reduces to if f and g are positive real valued functions.) For example, 2x is Θ(x), but 2x − x is not
o(x).
Further reading
• Paul Bachmann. Die Analytische Zahlentheorie. Zahlentheorie. pt. 2 Leipzig: B. G. Teubner, 1894.
• Edmund Landau. Handbuch der Lehre von der Verteilung der Primzahlen. 2 vols. Leipzig: B. G. Teubner, 1909.
• G. H. Hardy. Orders of Infinity: The 'Infinitärcalcül' of Paul du Bois-Reymond, 1910.
• Donald Knuth. The Art of Computer Programming, Volume 1: Fundamental Algorithms, Third Edition.
Addison–Wesley, 1997. ISBN 0-201-89683-4. Section 1.2.11: Asymptotic Representations, pp. 107–123.
• Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. Introduction to Algorithms,
Second Edition. MIT Press and McGraw–Hill, 2001. ISBN 0-262-03293-7. Section 3.1: Asymptotic notation,
pp. 41–50.
• Michael Sipser (1997). Introduction to the Theory of Computation. PWS Publishing. ISBN 0-534-94728-X. Pages
226–228 of section 7.1: Measuring complexity.
• Jeremy Avigad, Kevin Donnelly. Formalizing O notation in Isabelle/HOL ([Link]
~avigad/Papers/[Link])
• Paul E. Black, "big-O notation" ([Link] in Dictionary of
Algorithms and Data Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology.
11 March 2005. Retrieved December 16, 2006.
• Paul E. Black, "little-o notation" ([Link] in Dictionary of
Algorithms and Data Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology.
17 December 2004. Retrieved December 16, 2006.
• Paul E. Black, "Ω" ([Link] in Dictionary of Algorithms and
Data Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology. 17 December
2004. Retrieved December 16, 2006.
• Paul E. Black, "ω" ([Link] in Dictionary of Algorithms and Data
Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology. 29 November 2004.
Retrieved December 16, 2006.
• Paul E. Black, "Θ" ([Link] in Dictionary of Algorithms and Data
Structures [online], Paul E. Black, ed., U.S. National Institute of Standards and Technology. 17 December 2004.
Retrieved December 16, 2006.
External links
• Introduction to Asymptotic Notations ([Link]
pdf)
• Landau Symbols ([Link]
• O-Notation Visualizer: Interactive Graphs of Common O-Notations ([Link]
[Link])
• Big-O Notation – What is it good for ([Link]
Computational complexity theory 17
Computational problems
Problem instances
A computational problem can be
viewed as an infinite collection of
instances together with a solution for
every instance. The input string for a
computational problem is referred to as
a problem instance, and should not be
confused with the problem itself. In
computational complexity theory, a
problem refers to the abstract question
to be solved. In contrast, an instance of
this problem is a rather concrete
utterance, which can serve as the input
for a decision problem. For example,
consider the problem of primality
testing. The instance is a number (e.g.
15) and the solution is "yes" if the
number is prime and "no" otherwise
(in this case "no"). Stated another way,
the instance is a particular input to the
problem, and the solution is the output
corresponding to the given input. A traveling salesman tour through Germany’s 15 largest cities.
To further highlight the difference between a problem and an instance, consider the following instance of the
decision version of the traveling salesman problem: Is there a route of at most 2000 kilometres passing through all of
Germany's 15 largest cities? The quantitative answer to this particular problem instance is of little use for solving
other instances of the problem, such as asking for a round trip through all sites in Milan whose total length is at most
10 km. For this reason, complexity theory addresses computational problems and not particular problem instances.
Function problems
A function problem is a computational problem where a single output (of a total function) is expected for every
input, but the output is more complex than that of a decision problem, that is, it isn't just yes or no. Notable examples
include the traveling salesman problem and the integer factorization problem.
It is tempting to think that the notion of function problems is much richer than the notion of decision problems.
However, this is not really the case, since function problems can be recast as decision problems. For example, the
multiplication of two integers can be expressed as the set of triples (a, b, c) such that the relation a × b = c holds.
Deciding whether a given triple is member of this set corresponds to solving the problem of multiplying two
numbers. Similarly, finding the minimum value of a mathematical function f(x) is equivalent to a search on k for the
problem of determining whether a feasible point exists for f(x)≤ k.
Turing machine
A Turing machine is a mathematical model of a general computing
machine. It is a theoretical device that manipulates symbols contained
on a strip of tape. Turing machines are not intended as a practical
computing technology, but rather as a thought experiment representing
a computing machine—anything from an advanced supercomputer to a
mathematician with a pencil and paper. It is believed that if a problem
can be solved by an algorithm, there exists a Turing machine that
An artistic representation of a Turing machine
solves the problem. Indeed, this is the statement of the Church–Turing
thesis. Furthermore, it is known that everything that can be computed
on other models of computation known to us today, such as a RAM machine, Conway's Game of Life, cellular
automata or any programming language can be computed on a Turing machine. Since Turing machines are easy to
analyze mathematically, and are believed to be as powerful as any other model of computation, the Turing machine
is the most commonly used model in complexity theory.
Many types of Turing machines are used to define complexity classes, such as deterministic Turing machines,
probabilistic Turing machines, non-deterministic Turing machines, quantum Turing machines, symmetric Turing
machines and alternating Turing machines. They are all equally powerful in principle, but when resources (such as
time or space) are bounded, some of these may be more powerful than others.
A deterministic Turing machine is the most basic Turing machine, which uses a fixed set of rules to determine its
future actions. A probabilistic Turing machine is a deterministic Turing machine with an extra supply of random bits.
The ability to make probabilistic decisions often helps algorithms solve problems more efficiently. Algorithms that
use random bits are called randomized algorithms. A non-deterministic Turing machine is a deterministic Turing
machine with an added feature of non-determinism, which allows a Turing machine to have multiple possible future
actions from a given state. One way to view non-determinism is that the Turing machine branches into many
possible computational paths at each step, and if it solves the problem in any of these branches, it is said to have
solved the problem. Clearly, this model is not meant to be a physically realizable model, it is just a theoretically
interesting abstract machine that gives rise to particularly interesting complexity classes. For examples, see
nondeterministic algorithm.
Complexity measures
For a precise definition of what it means to solve a problem using a given amount of time and space, a computational
model such as the deterministic Turing machine is used. The time required by a deterministic Turing machine M on
input x is the total number of state transitions, or steps, the machine makes before it halts and outputs the answer
("yes" or "no"). A Turing machine M is said to operate within time f(n), if the time required by M on each input of
length n is at most f(n). A decision problem A can be solved in time f(n) if there exists a Turing machine operating in
time f(n) that solves the problem. Since complexity theory is interested in classifying problems based on their
difficulty, one defines sets of problems based on some criteria. For instance, the set of problems solvable within time
f(n) on a deterministic Turing machine is then denoted by DTIME(f(n)).
Analogous definitions can be made for space requirements. Although time and space are the most well-known
complexity resources, any complexity measure can be viewed as a computational resource. Complexity measures are
very generally defined by the Blum complexity axioms. Other complexity measures used in complexity theory
include communication complexity, circuit complexity, and decision tree complexity.
The complexity of an algorithm is often expressed using big O notation.
For example, consider the deterministic sorting algorithm quicksort. This solves the problem of sorting a list of
integers that is given as the input. The worst-case is when the input is sorted or sorted in reverse order, and the
algorithm takes time O(n2) for this case. If we assume that all possible permutations of the input list are equally
likely, the average time taken for sorting is O(n log n). The best case occurs when each pivoting divides the list in
half, also needing O(n log n) time.
possible algorithms that solve a given problem. The phrase "all possible algorithms" includes not just the algorithms
known today, but any algorithm that might be discovered in the future. To show a lower bound of T(n) for a problem
requires showing that no algorithm can have time complexity lower than T(n).
Upper and lower bounds are usually stated using the big O notation, which hides constant factors and smaller terms.
This makes the bounds independent of the specific details of the computational model used. For instance, if
T(n) = 7n2 + 15n + 40, in big O notation one would write T(n) = O(n2).
Complexity classes
It turns out that PSPACE = NPSPACE and EXPSPACE = NEXPSPACE by Savitch's theorem.
Other important complexity classes include BPP, ZPP and RP, which are defined using probabilistic Turing
machines; AC and NC, which are defined using Boolean circuits and BQP and QMA, which are defined using
quantum Turing machines. #P is an important complexity class of counting problems (not decision problems).
Classes like IP and AM are defined using Interactive proof systems. ALL is the class of all decision problems.
Computational complexity theory 24
Hierarchy theorems
For the complexity classes defined in this way, it is desirable to prove that relaxing the requirements on (say)
computation time indeed defines a bigger set of problems. In particular, although DTIME(n) is contained in
DTIME(n2), it would be interesting to know if the inclusion is strict. For time and space requirements, the answer to
such questions is given by the time and space hierarchy theorems respectively. They are called hierarchy theorems
because they induce a proper hierarchy on the classes defined by constraining the respective resources. Thus there
are pairs of complexity classes such that one is properly included in the other. Having deduced such proper set
inclusions, we can proceed to make quantitative statements about how much more additional time or space is needed
in order to increase the number of problems that can be solved.
More precisely, the time hierarchy theorem states that
.
The space hierarchy theorem states that
.
The time and space hierarchy theorems form the basis for most separation results of complexity classes. For instance,
the time hierarchy theorem tells us that P is strictly contained in EXPTIME, and the space hierarchy theorem tells us
that L is strictly contained in PSPACE.
Reduction
Many complexity classes are defined using the concept of a reduction. A reduction is a transformation of one
problem into another problem. It captures the informal notion of a problem being at least as difficult as another
problem. For instance, if a problem X can be solved using an algorithm for Y, X is no more difficult than Y, and we
say that X reduces to Y. There are many different types of reductions, based on the method of reduction, such as
Cook reductions, Karp reductions and Levin reductions, and the bound on the complexity of reductions, such as
polynomial-time reductions or log-space reductions.
The most commonly used reduction is a polynomial-time reduction. This means that the reduction process takes
polynomial time. For example, the problem of squaring an integer can be reduced to the problem of multiplying two
integers. This means an algorithm for multiplying two integers can be used to square an integer. Indeed, this can be
done by giving the same input to both inputs of the multiplication algorithm. Thus we see that squaring is not more
difficult than multiplication, since squaring can be reduced to multiplication.
This motivates the concept of a problem being hard for a complexity class. A problem X is hard for a class of
problems C if every problem in C can be reduced to X. Thus no problem in C is harder than X, since an algorithm for
X allows us to solve any problem in C. Of course, the notion of hard problems depends on the type of reduction
being used. For complexity classes larger than P, polynomial-time reductions are commonly used. In particular, the
set of problems that are hard for NP is the set of NP-hard problems.
If a problem X is in C and hard for C, then X is said to be complete for C. This means that X is the hardest problem in
C. (Since many problems could be equally hard, one might say that X is one of the hardest problems in C.) Thus the
class of NP-complete problems contains the most difficult problems in NP, in the sense that they are the ones most
likely not to be in P. Because the problem P = NP is not solved, being able to reduce a known NP-complete problem,
Π2, to another problem, Π1, would indicate that there is no known polynomial-time solution for Π1. This is because a
polynomial-time solution to Π1 would yield a polynomial-time solution to Π2. Similarly, because all NP problems
can be reduced to the set, finding an NP-complete problem that can be solved in polynomial time would mean that
P = NP.
Computational complexity theory 25
P versus NP problem
The complexity class P is often seen as a mathematical
abstraction modeling those computational tasks that
admit an efficient algorithm. This hypothesis is called
the Cobham–Edmonds thesis. The complexity class
NP, on the other hand, contains many problems that
people would like to solve efficiently, but for which no
efficient algorithm is known, such as the Boolean
satisfiability problem, the Hamiltonian path problem
and the vertex cover problem. Since deterministic Diagram of complexity classes provided that P ≠ NP. The existence
Turing machines are special nondeterministic Turing of problems in NP outside both P and NP-complete in this case was
machines, it is easily observed that each problem in P is established by Ladner.
The question of whether P equals NP is one of the most important open questions in theoretical computer science
because of the wide implications of a solution.[] If the answer is yes, many important problems can be shown to have
more efficient solutions. These include various types of integer programming problems in operations research, many
problems in logistics, protein structure prediction in biology, and the ability to find formal proofs of pure
mathematics theorems. The P versus NP problem is one of the Millennium Prize Problems proposed by the Clay
Mathematics Institute. There is a US$1,000,000 prize for resolving the problem.
Intractability
Problems that can be solved in theory (e.g., given infinite time), but which in practice take too long for their
solutions to be useful, are known as intractable problems.[5] In complexity theory, problems that lack
polynomial-time solutions are considered to be intractable for more than the smallest inputs. In fact, the
Cobham–Edmonds thesis states that only those problems that can be solved in polynomial time can be feasibly
computed on some computational device. Problems that are known to be intractable in this sense include those that
are EXPTIME-hard. If NP is not the same as P, then the NP-complete problems are also intractable in this sense. To
see why exponential-time algorithms might be unusable in practice, consider a program that makes 2n operations
before halting. For small n, say 100, and assuming for the sake of example that the computer does 1012 operations
each second, the program would run for about 4 × 1010 years, which is the same order of magnitude as the age of the
universe. Even with a much faster computer, the program would only be useful for very small instances and in that
sense the intractability of a problem is somewhat independent of technological progress. Nevertheless a polynomial
time algorithm is not always practical. If its running time is, say, n15, it is unreasonable to consider it efficient and it
is still useless except on small instances.
What intractability means in practice is open to debate. Saying that a problem is not in P does not imply that all large
cases of the problem are hard or even that most of them are. For example the decision problem in Presburger
arithmetic has been shown not to be in P, yet algorithms have been written that solve the problem in reasonable times
in most cases. Similarly, algorithms can solve the NP-complete knapsack problem over a wide range of sizes in less
than quadratic time and SAT solvers routinely handle large instances of the NP-complete Boolean satisfiability
problem.
History
An early example of algorithm complexity analysis is the running time analysis of the Euclidean algorithm done by
Gabriel Lamé in 1844.
Before the actual research explicitly devoted to the complexity of algorithmic problems started off, numerous
foundations were laid out by various researchers. Most influential among these was the definition of Turing
machines by Alan Turing in 1936, which turned out to be a very robust and flexible notion of computer.
Fortnow & Homer (2003) date the beginning of systematic studies in computational complexity to the seminal paper
"On the Computational Complexity of Algorithms" by Juris Hartmanis and Richard Stearns (1965), which laid out
the definitions of time and space complexity and proved the hierarchy theorems. Also, in 1965 Edmonds defined a
"good" algorithm as one with running time bounded by a polynomial of the input size.[6]
Computational complexity theory 27
According to Fortnow & Homer (2003), earlier papers studying problems solvable by Turing machines with specific
bounded resources include John Myhill's definition of linear bounded automata (Myhill 1960), Raymond Smullyan's
study of rudimentary sets (1961), as well as Hisao Yamada's paper on real-time computations (1962). Somewhat
earlier, Boris Trakhtenbrot (1956), a pioneer in the field from the USSR, studied another specific complexity
measure.[7] As he remembers:
However, [my] initial interest [in automata theory] was increasingly set aside in favor of computational
complexity, an exciting fusion of combinatorial methods, inherited from switching theory, with the conceptual
arsenal of the theory of algorithms. These ideas had occurred to me earlier in 1955 when I coined the term
"signalizing function", which is nowadays commonly known as "complexity measure".
—Boris Trakhtenbrot, From Logic to Theoretical Computer Science – An Update. In: Pillars of Computer
Science, LNCS 4800, Springer 2008.
In 1967, Manuel Blum developed an axiomatic complexity theory based on his axioms and proved an important
result, the so-called, speed-up theorem. The field really began to flourish in 1971 when the US researcher Stephen
Cook and, working independently, Leonid Levin in the USSR, proved that there exist practically relevant problems
that are NP-complete. In 1972, Richard Karp took this idea a leap forward with his landmark paper, "Reducibility
Among Combinatorial Problems", in which he showed that 21 diverse combinatorial and graph theoretical problems,
each infamous for its computational intractability, are NP-complete.
Relationship between computability theory, complexity theory and formal language theory.
References
[1] See
[2] Uwe Schöning, "Graph isomorphism is in the low hierarchy", Proceedings of the 4th Annual Symposium on Theoretical Aspects of Computer
Science, 1987, 114–124; also: Journal of Computer and System Sciences, vol. 37 (1988), 312–323
[3] Lance Fortnow. Computational Complexity Blog: Complexity Class of the Week: Factoring. September 13, 2002. http:/ / weblog. fortnow.
com/ 2002/ 09/ complexity-class-of-week-factoring. html
[4] Boaz Barak's course on Computational Complexity (http:/ / www. cs. princeton. edu/ courses/ archive/ spr06/ cos522/ ) Lecture 2 (http:/ /
www. cs. princeton. edu/ courses/ archive/ spr06/ cos522/ lec2. pdf)
[5] Hopcroft, J.E., Motwani, R. and Ullman, J.D. (2007) Introduction to Automata Theory, Languages, and Computation, Addison Wesley,
Boston/San Francisco/New York (page 368)
[6] Richard M. Karp, "Combinatorics, Complexity, and Randomness", 1985 Turing Award Lecture
[7] Trakhtenbrot, B.A.: Signalizing functions and tabular operators. Uchionnye Zapiski Penzenskogo Pedinstituta (Transactions of the Penza
Pedagogoical Institute) 4, 75–87 (1956) (in Russian)
Computational complexity theory 28
Textbooks
• Arora, Sanjeev; Barak, Boaz (2009), Computational Complexity: A Modern Approach ([Link]
[Link]/theory/complexity/), Cambridge, ISBN 978-0-521-42426-4, Zbl 1193.68112 ([Link]
[Link]/zmath/en/search/?format=complete&q=an:1193.68112)
• Downey, Rod; Fellows, Michael (1999), Parameterized complexity ([Link]
frontpage/0,11855,5-0-22-1519914-0,[Link]?referer=[Link]/cgi-bin/search_book.
pl?isbn=0-387-94883-X), Berlin, New York: Springer-Verlag
• Du, Ding-Zhu; Ko, Ker-I (2000), Theory of Computational Complexity, John Wiley & Sons,
ISBN 978-0-471-34506-0
• Goldreich, Oded (2008), Computational Complexity: A Conceptual Perspective ([Link]
[Link]/~oded/[Link]), Cambridge University Press
• van Leeuwen, Jan, ed. (1990), Handbook of theoretical computer science (vol. A): algorithms and complexity,
MIT Press, ISBN 978-0-444-88071-0
• Papadimitriou, Christos (1994), Computational Complexity (1st ed.), Addison Wesley, ISBN 0-201-53082-1
• Sipser, Michael (2006), Introduction to the Theory of Computation (2nd ed.), USA: Thomson Course
Technology, ISBN 0-534-95097-3
• Garey, Michael R.; Johnson, David S. (1979), Computers and Intractability: A Guide to the Theory of
NP-Completeness, W. H. Freeman, ISBN 0-7167-1045-5
Surveys
• Khalil, Hatem; Ulery, Dana (1976), A Review of Current Studies on Complexity of Algorithms for Partial
Differential Equations ([Link] ACM '76 Proceedings of the
1976 Annual Conference, p. 197, doi: 10.1145/800191.805573 ([Link]
• Cook, Stephen (1983), "An overview of computational complexity", Commun. ACM (ACM) 26 (6): 400–408,
doi: 10.1145/358141.358144 ([Link] ISSN 0001-0782 ([Link]
[Link]/issn/0001-0782)
• Fortnow, Lance; Homer, Steven (2003), "A Short History of Computational Complexity" ([Link]
[Link]/~fortnow/papers/[Link]), Bulletin of the EATCS 80: 95–133
• Mertens, Stephan (2002), "Computational Complexity for Physicists", Computing in Science and Engg.
(Piscataway, NJ, USA: IEEE Educational Activities Department) 4 (3): 31–47, arXiv: cond-mat/0012185 (http://
[Link]/abs/cond-mat/0012185), doi: 10.1109/5992.998639 ([Link]
ISSN 1521-9615 ([Link]
External links
• The Complexity Zoo ([Link]
• Hazewinkel, Michiel, ed. (2001), "Computational complexity classes" ([Link]
[Link]?title=p/c130160), Encyclopedia of Mathematics, Springer, ISBN 978-1-55608-010-4
Computability 29
Computability
You might be looking for Computable function, Computability theory, Computation, or Theory of computation.
Computability is the ability to solve a problem in an effective manner. It is a key topic of the field of computability
theory within mathematical logic and the theory of computation within computer science. The computability of a
problem is closely linked to the existence of an algorithm to solve the problem.
The most widely-studied models of computability are the Turing-computable and μ-recursive functions, and the
lambda calculus, all of which have computationally equivalent power. Other forms of computability are studied as
well: computability notions weaker than Turing machines are studied in automata theory, while computability
notions stronger than Turing machines are studied in the field of hypercomputation.
Problems
A central idea in computability is that of a (computational) problem, which is a task whose computability can be
explored.
There are two key types of problems:
• A decision problem fixes a set S, which may be a set of strings, natural numbers, or other objects taken from some
larger set U. A particular instance of the problem is to decide, given an element u of U, whether u is in S. For
example, let U be the set of natural numbers and S the set of prime numbers. The corresponding decision problem
corresponds to primality testing.
• A function problem consists of a function f from a set U to a set V. An instance of the problem is to compute,
given an element u in U, the corresponding element f(u) in V. For example, U and V may be the set of all finite
binary strings, and f may take a string and return the string obtained by reversing the digits of the input (so
f(0101) = 1010).
Other types of problems include search problems and optimization problems.
One goal of computability theory is to determine which problems, or classes of problems, can be solved in each
model of computation.
sequence of a recursive function the functions and appear, then terms of the form 'g(5)=7' or 'h(3,2)=10'
appear. Each entry in this sequence needs to be an application of a basic function or follow from the entries
above by using composition, primitive recursion or μ-recursion. For instance if , then for 'f(5)=3' to a
terms like 'g(5)=6' and 'h(3,6)=3' must occur above. The computation terminates only if the final term gives the
value of the recursive function applied to the inputs.
String rewriting systems
including Markov algorithm, that uses grammar-like rules to operate on strings of symbols; also Post canonical
system.
Register machine
is a theoretically interesting idealization of a computer. There are several variants. In most of them, each
register can hold a natural number (of unlimited size), and the instructions are simple (and few in number), e.g.
only decrementation (combined with conditional jump) and incrementation exist (and halting). The lack of the
infinite (or dynamically growing) external store (seen at Turing machines) can be understood by replacing its
role with Gödel numbering techniques: the fact that each register holds a natural number allows the possibility
of representing a complicated thing (e.g. a sequence, or a matrix etc.) by an appropriate huge natural number
— unambiguity of both representation and interpretation can be established by number theoretical foundations
of these techniques.
Turing machine
Also similar to the finite state machine, except that the input is provided on an execution "tape", which the
Turing machine can read from, write to, or move back and forth past its read/write "head". The tape is allowed
to grow to arbitrary size. The Turing machine is capable of performing complex calculations which can have
arbitrary duration. This model is perhaps the most important model of computation in computer science, as it
simulates computation in the absence of predefined resource limits.
Multi-tape Turing machine
Here, there may be more than one tape; moreover there may be multiple heads per tape. Surprisingly, any
computation that can be performed by this sort of machine can also be performed by an ordinary Turing
machine, although the latter may be slower or require a larger total region of its tape.
P′′
Like Turing machines, P′′ uses an infinite tape of symbols (without random access), and a rather minimalistic
set of instructions. But these instructions are very different, thus, unlike Turing machines, P′′ does not need to
maintain a distinct state, because all “memory-like” functionality can be provided only by the tape. Instead of
rewriting the current symbol, it can perform a modular arithmetic incrementation on it. P′′ has also a pair of
instructions for a cycle, inspecting the blank symbol. Despite its minimalistic nature, it has become the
parental formal language of an implemented and (for entertainment) used programming language called
Brainfuck.
In addition to the general computational models, some simpler computational models are useful for special, restricted
applications. Regular expressions, for example, specify string patterns in many contexts, from office productivity
software to programming languages. Another formalism mathematically equivalent to regular expressions, Finite
automata are used in circuit design and in some kinds of problem-solving. Context-free grammars specify
programming language syntax. Non-deterministic pushdown automata are another formalism equivalent to
context-free grammars.
Different models of computation have the ability to do different tasks. One way to measure the power of a
computational model is to study the class of formal languages that the model can generate; in such a way is the
Chomsky hierarchy of languages is obtained.
Other restricted models of computation include:
Computability 31
Power of automata
With these computational models in hand, we can determine what their limits are. That is, what classes of languages
can they accept?
Concurrency-based models
A number of computational models based on concurrency have been developed, including the Parallel Random
Access Machine and the Petri net. These models of concurrent computation still do not implement any mathematical
functions that cannot be implemented by Turing machines.
Infinite execution
Imagine a machine where each step of the computation requires half the time of the previous step. If we normalize to
1 time unit the amount of time required for the first step, the execution would require
time to run. This infinite series converges to 2 time units, which means that this Turing machine can run an infinite
execution in 2 time units. This machine is capable of deciding the halting problem by directly simulating the
execution of the machine in question. By extension, any convergent series would work. Assuming that the series
converges to a value n, the Turing machine would complete an infinite execution in n time units.
Computability 34
Oracle machines
So-called Oracle machines have access to various "oracles" which provide the solution to specific undecidable
problems. For example, the Turing machine may have a "halting oracle" which answers immediately whether a given
Turing machine will ever halt on a given input. These machines are a central topic of study in recursion theory.
Limits of hyper-computation
Even these machines, which seemingly represent the limit of automata that we could imagine, run into their own
limitations. While each of them can solve the halting problem for a Turing machine, they cannot solve their own
version of the halting problem. For example, an Oracle machine cannot answer the question of whether a given
Oracle machine will ever halt.
References
• Michael Sipser (1997). Introduction to the Theory of Computation. PWS Publishing. ISBN 0-534-94728-X. Part
Two: Computability Theory, Chapters 3–6, pp. 123–222.
• Christos Papadimitriou (1993). Computational Complexity (1st ed.). Addison Wesley. ISBN 0-201-53082-1.
Chapter 3: Computability, pp. 57–70.
• S. Barry Cooper (2004). Computability Theory (1st ed.). Chapman & Hall/CRC. ISBN 978-1-58488-237-4.
Turing machine
Turing machines
Machine
• Universal Turing machine
• Alternating Turing machine
• Quantum Turing machine
• Non-deterministic Turing machine
• Read-only Turing machine
• Read-only right moving Turing machines
• Probabilistic Turing machine
• Multi-track Turing machine
• Turing machine equivalents
• Turing machine examples
Science
• Alan Turing
• Category:Turing machine
• v
• t
• e [1]
Turing machine 35
Informal description
For visualizations of Turing machines, see Turing machine gallery.
The Turing machine mathematically models a machine that mechanically operates on a tape. On this tape are
symbols, which the machine can read and write, one at a time, using a tape head. Operation is fully determined by a
finite set of elementary instructions such as "in state 42, if the symbol seen is 0, write a 1; if the symbol seen is 1,
change into state 17; in state 17, if the symbol seen is 0, write a 1 and change to state 6;" etc. In the original article
("On computable numbers, with an application to the Entscheidungsproblem", see also references below), Turing
imagines not a mechanism, but a person whom he calls the "computer", who executes these deterministic mechanical
rules slavishly (or as Turing puts it, "in a desultory manner").
More precisely, a Turing machine consists
of:
1. A tape divided into cells, one next to the
other. Each cell contains a symbol from
The head is always over a particular square of the tape; only a finite stretch of
some finite alphabet. The alphabet
squares is shown. The instruction to be performed (q4) is shown over the scanned
contains a special blank symbol (here square. (Drawing after Kleene (1952) p.375.)
written as '0') and one or more other
symbols. The tape is assumed to be
Turing machine 36
Formal definition
Hopcroft and Ullman (1979, p. 148) formally defined a (one-tape) Turing machine as a 7-tuple
where
• is a finite, non-empty set of states
• is a finite, non-empty set of the tape alphabet/symbols
• is the blank symbol (the only symbol allowed to occur on the tape infinitely often at any step during the
computation)
• is the set of input symbols
• is the initial state
• is the set of final or accepting states.
• is a partial function called the transition function, where L is left shift,
R is right shift. (A relatively uncommon variant allows "no shift", say N, as a third element of the latter set.)
Anything that operates according to these specifications is a Turing machine.
Turing machine 37
The 7-tuple for the 3-state busy beaver looks like this (see more about this busy beaver at Turing machine examples):
•
•
• ("blank")
•
• (the initial state)
•
• see state-table below
Initially all tape cells are marked with 0.
Write symbol Move tape Next state Write symbol Move tape Next state Write symbol Move tape Next state
0 1 R B 1 L A 1 L B
1 1 L C 1 R B 1 R HALT
Alternative definitions
Definitions in literature sometimes differ slightly, to make arguments or proofs easier or clearer, but this is always
done in such a way that the resulting machine has the same computational power. For example, changing the set
to , where N ("None" or "No-operation") would allow the machine to stay on the same tape
cell instead of moving left or right, does not increase the machine's computational power.
The most common convention represents each "Turing instruction" in a "Turing table" by one of nine 5-tuples, per
the convention of Turing/Davis (Turing (1936) in Undecidable, p. 126-127 and Davis (2000) p. 152):
(definition 1): (qi, Sj, Sk/E/N, L/R/N, qm)
( current state qi , symbol scanned Sj , print symbol Sk/erase E/none N , move_tape_one_square left
L/right R/none N , new state qm )
Other authors (Minsky (1967) p. 119, Hopcroft and Ullman (1979) p. 158, Stone (1972) p. 9) adopt a different
convention, with new state qm listed immediately after the scanned symbol Sj:
Turing machine 38
Example: state table for the 3-state 2-symbol busy beaver reduced to 5-tuples
Current state Scanned symbol Print symbol Move tape Final (i.e. next) state 5-tuples
A 0 1 R B (A, 0, 1, R, B)
A 1 1 L C (A, 1, 1, L, C)
B 0 1 L A (B, 0, 1, L, A)
B 1 1 R B (B, 1, 1, R, B)
C 0 1 L B (C, 0, 1, L, B)
C 1 1 N H (C, 1, 1, N, H)
In the following table, Turing's original model allowed only the first three lines that he called N1, N2, N3 (cf Turing
in Undecidable, p. 126). He allowed for erasure of the "scanned square" by naming a 0th symbol S0 = "erase" or
"blank", etc. However, he did not allow for non-printing, so every instruction-line includes "print symbol Sk" or
"erase" (cf footnote 12 in Post (1947), Undecidable p. 300). The abbreviations are Turing's (Undecidable p. 119).
Subsequent to Turing's original paper in 1936–1937, machine-models have allowed all nine possible types of
five-tuples:
Current m-configuration Tape Print-operation Tape-motion Final m-configuration 5-tuple 5-tuple 4-tuple
(Turing state) symbol (Turing state) comments
N3 qi Sj Print(Sk) None N qm (qi, Sj, Sk, "blank" = S0, (qi, Sj, Sk,
N, qm) 1=S1, etc. qm)
Any Turing table (list of instructions) can be constructed from the above nine 5-tuples. For technical reasons, the
three non-printing or "N" instructions (4, 5, 6) can usually be dispensed with. For examples see Turing machine
examples.
Turing machine 39
Less frequently the use of 4-tuples are encountered: these represent a further atomization of the Turing instructions
(cf Post (1947), Boolos & Jeffrey (1974, 1999), Davis-Sigal-Weyuker (1994)); also see more at Post–Turing
machine.
The "state"
The word "state" used in context of Turing machines can be a source of confusion, as it can mean two things. Most
commentators after Turing have used "state" to mean the name/designator of the current instruction to be
performed—i.e. the contents of the state register. But Turing (1936) made a strong distinction between a record of
what he called the machine's "m-configuration", (its internal state) and the machine's (or person's) "state of progress"
through the computation - the current state of the total system. What Turing called "the state formula" includes both
the current instruction and all the symbols on the tape:
Thus the state of progress of the computation at any stage is completely determined by the note of instructions
and the symbols on the tape. That is, the state of the system may be described by a single expression
(sequence of symbols) consisting of the symbols on the tape followed by Δ (which we suppose not to appear
elsewhere) and then by the note of instructions. This expression is called the 'state formula'.
—Undecidable, p.139–140, emphasis added
Earlier in his paper Turing carried this even further: he gives an example where he placed a symbol of the current
"m-configuration"—the instruction's label—beneath the scanned square, together with all the symbols on the tape
(Undecidable, p. 121); this he calls "the complete configuration" (Undecidable, p. 118). To print the "complete
configuration" on one line, he places the state-label/m-configuration to the left of the scanned symbol.
A variant of this is seen in Kleene (1952) where Kleene shows how to write the Gödel number of a machine's
"situation": he places the "m-configuration" symbol q4 over the scanned square in roughly the center of the 6
non-blank squares on the tape (see the Turing-tape figure in this article) and puts it to the right of the scanned square.
But Kleene refers to "q4" itself as "the machine state" (Kleene, p. 374-375). Hopcroft and Ullman call this composite
the "instantaneous description" and follow the Turing convention of putting the "current state" (instruction-label,
m-configuration) to the left of the scanned symbol (p. 149).
Example: total state of 3-state 2-symbol busy beaver after 3 "moves" (taken from example "run" in the figure
below):
1A1
This means: after three moves the tape has ... 000110000 ... on it, the head is scanning the right-most 1, and the state
is A. Blanks (in this case represented by "0"s) can be part of the total state as shown here: B01; the tape has a single
1 on it, but the head is scanning the 0 ("blank") to its left and the state is B.
"State" in the context of Turing machines should be clarified as to which is being described: (i) the current
instruction, or (ii) the list of symbols on the tape together with the current instruction, or (iii) the list of symbols on
the tape together with the current instruction placed to the left of the scanned symbol or to the right of the scanned
symbol.
Turing's biographer Andrew Hodges (1983: 107) has noted and discussed this confusion.
Turing machine 40
The table for the 3-state busy beaver ("P" = print/write a "1")
Tape symbol Current state A Current state B Current state C
Write symbol Move tape Next state Write symbol Move tape Next state Write symbol Move tape Next state
0 P R B P L A P L B
1 P L C P R B P R HALT
This finding is now taken for granted, but at the time (1936) it was
considered astonishing. The model of computation that Turing called Model of a Turing machine
his "universal machine"—"U" for short—is considered by some (cf
Davis (2000)) to have been the fundamental theoretical breakthrough that led to the notion of the stored-program
computer.
Turing's paper ... contains, in essence, the invention of the modern computer and some of the programming
techniques that accompanied it.
—Minsky (1967), p. 104
In terms of computational complexity, a multi-tape universal Turing machine need only be slower by logarithmic
factor compared to the machines it simulates. This result was obtained in 1966 by F. C. Hennie and R. E. Stearns.
(Arora and Barak, 2009, theorem 1.9)
There are a number of ways to explain why Turing machines are useful models of real computers:
1. Anything a real computer can compute, a Turing machine can also compute. For example: "A Turing machine
can simulate any type of subroutine found in programming languages, including recursive procedures and any of
the known parameter-passing mechanisms" (Hopcroft and Ullman p. 157). A large enough FSA can also model
any real computer, disregarding IO. Thus, a statement about the limitations of Turing machines will also apply to
real computers.
2. The difference lies only with the ability of a Turing machine to manipulate an unbounded amount of data.
However, given a finite amount of time, a Turing machine (like a real machine) can only manipulate a finite
amount of data.
3. Like a Turing machine, a real machine can have its storage space enlarged as needed, by acquiring more disks or
other storage media. If the supply of these runs short, the Turing machine may become less useful as a model. But
the fact is that neither Turing machines nor real machines need astronomical amounts of storage space in order to
Turing machine 43
perform useful computation. The processing time required is usually much more of a problem.
4. Descriptions of real machine programs using simpler abstract models are often much more complex than
descriptions using Turing machines. For example, a Turing machine describing an algorithm may have a few
hundred states, while the equivalent deterministic finite automaton (DFA) on a given real machine has
quadrillions. This makes the DFA representation infeasible to analyze.
5. Turing machines describe algorithms independent of how much memory they use. There is a limit to the memory
possessed by any current machine, but this limit can rise arbitrarily in time. Turing machines allow us to make
statements about algorithms which will (theoretically) hold forever, regardless of advances in conventional
computing machine architecture.
6. Turing machines simplify the statement of algorithms. Algorithms running on Turing-equivalent abstract
machines are usually more general than their counterparts running on real machines, because they have
arbitrary-precision data types available and never have to deal with unexpected conditions (including, but not
limited to, running out of memory).
One way in which Turing machines are a poor model for programs is that many real programs, such as operating
systems and word processors, are written to receive unbounded input over time, and therefore do not halt. Turing
machines do not model such ongoing computation well (but can still model portions of it, such as individual
procedures).
Concurrency
Another limitation of Turing machines is that they do not model concurrency well. For example, there is a bound on
the size of integer that can be computed by an always-halting nondeterministic Turing machine starting on a blank
tape. (See article on unbounded nondeterminism.) By contrast, there are always-halting concurrent systems with no
inputs that can compute an integer of unbounded size. (A process can be created with local storage that is initialized
with a count of 0 that concurrently sends itself both a stop and a go message. When it receives a go message, it
increments its count by 1 and sends itself a go message. When it receives a stop message, it stops with an unbounded
number in its local storage.)
Turing machine 44
History
They were described in 1936 by Alan Turing.
If one were able to solve the Entscheidungsproblem then one would have a "procedure for solving many (or
even all) mathematical problems".
—ibid., p. 92
By the 1928 international congress of mathematicians, Hilbert "made his questions quite precise. First, was
mathematics complete ... Second, was mathematics consistent ... And thirdly, was mathematics decidable?" (Hodges
p. 91, Hawking p. 1121). The first two questions were answered in 1930 by Kurt Gödel at the very same meeting
where Hilbert delivered his retirement speech (much to the chagrin of Hilbert); the third—the
Entscheidungsproblem—had to wait until the mid-1930s.
The problem was that an answer first required a precise definition of "definite general applicable prescription",
which Princeton professor Alonzo Church would come to call "effective calculability", and in 1928 no such
definition existed. But over the next 6–7 years Emil Post developed his definition of a worker moving from room to
room writing and erasing marks per a list of instructions (Post 1936), as did Church and his two students Stephen
Kleene and J. B. Rosser by use of Church's lambda-calculus and Gödel's recursion theory (1934). Church's paper
(published 15 April 1936) showed that the Entscheidungsproblem was indeed "undecidable" and beat Turing to the
punch by almost a year (Turing's paper submitted 28 May 1936, published January 1937). In the meantime, Emil
Post submitted a brief paper in the fall of 1936, so Turing at least had priority over Post. While Church refereed
Turing's paper, Turing had time to study Church's paper and add an Appendix where he sketched a proof that
Church's lambda-calculus and his machines would compute the same functions.
But what Church had done was something rather different, and in a certain sense weaker. ... the Turing
construction was more direct, and provided an argument from first principles, closing the gap in Church's
demonstration.
—Hodges p. 112
And Post had only proposed a definition of calculability and criticized Church's "definition", but had proved nothing.
It was stated above that 'a function is effectively calculable if its values can be found by some purely
mechanical process'. We may take this statement literally, understanding by a purely mechanical process one
which could be carried out by a machine. It is possible to give a mathematical description, in a certain normal
form, of the structures of these machines. The development of these ideas leads to the author's definition of a
computable function, and to an identification of computability with effective calculability. It is not difficult,
though somewhat laborious, to prove that these three definitions [the 3rd is the λ-calculus] are equivalent.
—Turing (1939) in The Undecidable, p. 160
When Turing returned to the UK he ultimately became jointly responsible for breaking the German secret codes
created by encryption machines called "The Enigma"; he also became involved in the design of the ACE (Automatic
Computing Engine), "[Turing's] ACE proposal was effectively self-contained, and its roots lay not in the EDVAC
[the USA's initiative], but in his own universal machine" (Hodges p. 318). Arguments still continue concerning the
origin and nature of what has been named by Kleene (1952) Turing's Thesis. But what Turing did prove with his
computational-machine model appears in his paper On Computable Numbers, With an Application to the
Entscheidungsproblem (1937):
[that] the Hilbert Entscheidungsproblem can have no solution ... I propose, therefore to show that there can be
no general process for determining whether a given formula U of the functional calculus K is provable, i.e. that
there can be no machine which, supplied with any one U of these formulae, will eventually say whether U is
provable.
—from Turing's paper as reprinted in The Undecidable, p. 145
Turing's example (his second proof): If one is to ask for a general procedure to tell us: "Does this machine ever print
0", the question is "undecidable".
Notes
[1] http:/ / en. wikipedia. org/ w/ index. php?title=Template:Turing& action=edit
[2] The idea came to him in mid-1935 (perhaps, see more in the History section) after a question posed by M. H. A. Newman in his lectures:
"Was there a definite method, or as Newman put it, a mechanical process which could be applied to a mathematical statement, and which
would come up with the answer as to whether it was provable" (Hodges 1983:93). Turing submitted his paper on 31 May 1936 to the London
Mathematical Society for its Proceedings (cf Hodges 1983:112), but it was published in early 1937 and offprints were available in February
1937 (cf Hodges 1983:129).
[3] See the definition of "innings" on Wiktionary
References
• Alan Turing, 1948, "Intelligent Machinery." Reprinted in "Cybernetics: Key Papers." Ed. C.R. Evans and A.D.J.
Robertson. Baltimore: University Park Press, 1968. p. 31.
• F. C. Hennie and R. E. Stearns. Two-tape simulation of multitape Turing machines. JACM, 13(4):533–546, 1966.
Computability theory
• Boolos, George; Richard Jeffrey (1989, 1999). Computability and Logic (3rd ed.). Cambridge UK: Cambridge
University Press. ISBN 0-521-20402-X.
• Boolos, George; John Burgess, Richard Jeffrey, (2002). Computability and Logic (4th ed.). Cambridge UK:
Cambridge University Press. ISBN 0-521-00758-5 (pb.) Check |isbn= value (help). Some parts have been
significantly rewritten by Burgess. Presentation of Turing machines in context of Lambek "abacus machines" (cf
Register machine) and recursive functions, showing their equivalence.
• Taylor L. Booth (1967), Sequential Machines and Automata Theory, John Wiley and Sons, Inc., New York.
Graduate level engineering text; ranges over a wide variety of topics, Chapter IX Turing Machines includes some
recursion theory.
• Martin Davis (1958). Computability and Unsolvability. McGraw-Hill Book Company, Inc, New York.. On pages
12–20 he gives examples of 5-tuple tables for Addition, The Successor Function, Subtraction (x ≥ y), Proper
Subtraction (0 if x < y), The Identity Function and various identity functions, and Multiplication.
• Davis, Martin; Ron Sigal, Elaine J. Weyuker (1994). Computability, Complexity, and Languages and Logic:
Fundamentals of Theoretical Computer Science (2nd ed.). San Diego: Academic Press, Harcourt, Brace &
Company. ISBN 0-12-206382-1.
• Hennie, Fredrick (1977). Introduction to Computability. Addison–Wesley, Reading, Mass. Unknown parameter
|unused_data= ignored (help). On pages 90–103 Hennie discusses the UTM with examples and flow-charts,
but no actual 'code'.
• John Hopcroft and Jeffrey Ullman, (1979). Introduction to Automata Theory, Languages and Computation (1st
ed.). Addison–Wesley, Reading Mass. ISBN 0-201-02988-X. Check |isbn= value (help). A difficult book.
Centered around the issues of machine-interpretation of "languages", NP-completeness, etc.
• Hopcroft, John E.; Rajeev Motwani, Jeffrey D. Ullman (2001). Introduction to Automata Theory, Languages, and
Computation (2nd ed.). Reading Mass: Addison–Wesley. ISBN 0-201-44124-1. Distinctly different and less
intimidating than the first edition.
• Stephen Kleene (1952), Introduction to Metamathematics, North–Holland Publishing Company, Amsterdam
Netherlands, 10th impression (with corrections of 6th reprint 1971). Graduate level text; most of Chapter XIII
Computable functions is on Turing machine proofs of computability of recursive functions, etc.
• Knuth, Donald E. (1973). Volume 1/Fundamental Algorithms: The Art of computer Programming (2nd ed.).
Reading, Mass.: Addison–Wesley Publishing Company.. With reference to the role of Turing machines in the
development of computation (both hardware and software) see 1.4.5 History and Bibliography pp. 225ff and 2.6
History and Bibliographypp. 456ff.
• Zohar Manna, 1974, Mathematical Theory of Computation. Reprinted, Dover, 2003. ISBN 978-0-486-43238-0
• Marvin Minsky, Computation: Finite and Infinite Machines, Prentice–Hall, Inc., N.J., 1967. See Chapter 8,
Section 8.2 "Unsolvability of the Halting Problem." Excellent, i.e. relatively readable, sometimes funny.
• Christos Papadimitriou (1993). Computational Complexity (1st ed.). Addison Wesley. ISBN 0-201-53082-1.
Chapter 2: Turing machines, pp. 19–56.
• Michael Sipser (1997). Introduction to the Theory of Computation. PWS Publishing. ISBN 0-534-94728-X.
Chapter 3: The Church–Turing Thesis, pp. 125–149.
• Stone, Harold S. (1972). Introduction to Computer Organization and Data Structures (1st ed.). New York:
McGraw–Hill Book Company. ISBN 0-07-061726-0.
• Peter van Emde Boas 1990, Machine Models and Simulations, pp. 3–66, in Jan van Leeuwen, ed., Handbook of
Theoretical Computer Science, Volume A: Algorithms and Complexity, The MIT Press/Elsevier, [place?], ISBN
Turing machine 49
0-444-88071-2 (Volume A). QA76.H279 1990. Valuable survey, with 141 references.
Church's thesis
• Nachum Dershowitz; Yuri Gurevich (September 2008). "A natural axiomatization of computability and proof of
Church's Thesis" ([Link] Bulletin of
Symbolic Logic 14 (3). Retrieved 2008-10-15.
• Roger Penrose (1989, 1990). The Emperor's New Mind (2nd ed.). Oxford University Press, New York.
ISBN 0-19-851973-7.
Other
• Martin Davis (2000). Engines of Logic: Mathematicians and the origin of the Computer (1st ed.). W. W. Norton
& Company, New York. ISBN 0-393-32229-7 pbk. Check |isbn= value (help).
• Robin Gandy, "The Confluence of Ideas in 1936", pp. 51–102 in Rolf Herken, see below.
• Stephen Hawking (editor), 2005, God Created the Integers: The Mathematical Breakthroughs that Changed
History, Running Press, Philadelphia, ISBN 978-0-7624-1922-7. Includes Turing's 1936–1937 paper, with brief
commentary and biography of Turing as written by Hawking.
• Rolf Herken (1995). The Universal Turing Machine—A Half-Century Survey. Springer Verlag.
ISBN 3-211-82637-8.
• Andrew Hodges, Alan Turing: The Enigma, Simon and Schuster, New York. Cf Chapter "The Spirit of Truth" for
a history leading to, and a discussion of, his proof.
Turing machine 50
• Ivars Peterson (1988). The Mathematical Tourist: Snapshots of Modern Mathematics (1st ed.). W. H. Freeman
and Company, New York. ISBN 0-7167-2064-7 (pbk.) Check |isbn= value (help).
• Paul Strathern (1997). Turing and the Computer—The Big Idea. Anchor Books/Doubleday.
ISBN 0-385-49243-X.
• Hao Wang, "A variant to Turing's theory of computing machines", Journal of the Association for Computing
Machinery (JACM) 4, 63–92 (1957).
• Charles Petzold, Petzold, Charles, The Annotated Turing ([Link] John Wiley &
Sons, Inc., ISBN 0-470-22905-5
• Arora, Sanjeev; Barak, Boaz, "Complexity Theory: A Modern Approach" ([Link]
theory/complexity/), Cambridge University Press, 2009, ISBN 978-0-521-42426-4, section 1.4, "Machines as
strings and the universal Turing machine" and 1.7, "Proof of theorem 1.9"
• A Note On Turing Machine Computability Of Rule Driven Systems, SIGACT News December 2005
External links
• Hazewinkel, Michiel, ed. (2001), "Turing machine" ([Link]
t094460), Encyclopedia of Mathematics, Springer, ISBN 978-1-55608-010-4
• Turing Machine on Stanford Encyclopedia of Philosophy ([Link]
• Detailed info on the Church–Turing Hypothesis ([Link] (Stanford
Encyclopedia of Philosophy)
• Turing Machine-Like Models ([Link]
html) in Molecular Biology, to understand life mechanisms with a DNA-tape processor.
• The Turing machine ([Link]
php)—Summary about the Turing machine, its functionality and historical facts
• The Wolfram 2,3 Turing Machine Research Prize ([Link]
Wolfram's $25,000 prize for the proof or disproof of the universality of the potentially smallest universal Turing
Machine. The contest has ended, with the proof affirming the machine's universality.
• " Turing Machine Causal Networks ([Link]
by Enrique Zeleny, Wolfram Demonstrations Project.
• Turing Machines ([Link]
Turing_Machines/) on the Open Directory Project
• Purely mechanical Turing Machine ([Link]
ChurchTuring thesis 51
Church–Turing thesis
In computability theory, the Church–Turing thesis (also known as the Turing–Church thesis, the
Church–Turing conjecture, Church's thesis, Church's conjecture, and Turing's thesis) is a combined
hypothesis ("thesis") about the nature of functions whose values are effectively calculable; or, in more modern terms,
functions whose values are algorithmically computable. In simple terms, the Church–Turing thesis states that a
function is algorithmically computable if and only if it is computable by a Turing machine.
Several independent attempts were made in the first half of the 20th century to formalize the notion of computability:
• American mathematician Alonzo Church created a method for defining functions called the λ-calculus,
• British mathematician Alan Turing created a theoretical model for machines, now called Turing machines, that
could carry out calculations from inputs,
• Kurt Gödel, with Jacques Herbrand, created a formal definition of a class of functions whose values could be
calculated by recursion.
All three computational processes (recursion, the λ-calculus, and the Turing machine) were shown to be
equivalent—all three approaches define the same class of functions.[1][2] This has led mathematicians and computer
scientists to believe that the concept of computability is accurately characterized by these three equivalent processes.
Informally, the Church–Turing thesis states that if some method (algorithm) exists to carry out a calculation, then the
same calculation can also be carried out by a Turing machine (as well as by a recursively definable function, and by
a λ-function).
Even though the three processes mentioned above proved to be equivalent, the fundamental premise behind the
thesis — the notion of what it means for a function to be effectively calculable — is "a somewhat vague intuitive
one".[3] Thus, the thesis, although it has near-universal acceptance, cannot be formally proven.
Formal statement
J.B. Rosser 1939 addresses the notion of "effective computability" as follows: "Clearly the existence of CC and RC
(Church's and Rosser's proofs) presupposes a precise definition of 'effective'. 'Effective method' is here used in the
rather special sense of a method each step of which is precisely predetermined and which is certain to produce the
answer in a finite number of steps".[4] Thus the adverb-adjective "effective" is used in a sense of "1a: producing a
decided, decisive, or desired effect", and "capable of producing a result".[5]
In the following, the words "effectively calculable" will mean "produced by any intuitively 'effective' means
whatsoever" and "effectively computable" will mean "produced by a Turing-machine or equivalent mechanical
device". Turing's "definitions" given in a footnote in his 1939 Ph.D. thesis Systems of Logic Based on Ordinals,
supervised by Church, are virtually the same:
"† We shall use the expression 'computable function' to mean a function calculable by a machine, and let
'effectively calculable' refer to the intuitive idea without particular identification with any one of these
definitions."[6]
The thesis can be stated as follows:
Every effectively calculable function is a computable function.[7]
Turing stated it this way:
"It was stated ... that 'a function is effectively calculable if its values can be found by some purely mechanical
process.' We may take this literally, understanding that by a purely mechanical process one which could be
carried out by a machine. The development ... leads to ... an identification of computability† with effective
calculability." († is the footnote above, ibid.)
ChurchTuring thesis 52
History
One of the important problems for logicians in the 1930s was David Hilbert's Entscheidungsproblem, which asked
whether there was a mechanical procedure for separating mathematical truths from mathematical falsehoods. This
quest required that the notion of "algorithm" or "effective calculability" be pinned down, at least well enough for the
quest to begin.[8] But from the very outset Alonzo Church's attempts began with a debate that continues to this day.[9]
Was the notion of "effective calculability" to be (i) an "axiom or axioms" in an axiomatic system, or (ii) merely a
definition that "identified" two or more propositions, or (iii) an empirical hypothesis to be verified by observation of
natural events, or (iv) or just a proposal for the sake of argument (i.e. a "thesis").
Circa 1930–1952
In the course of studying the problem, Church and his student Stephen Kleene introduced the notion of λ-definable
functions, and they were able to prove that several large classes of functions frequently encountered in number
theory were λ-definable.[10] The debate began when Church proposed to Gödel that one should define the
"effectively computable" functions as the λ-definable functions. Gödel, however, was not convinced and called the
proposal "thoroughly unsatisfactory".[11] Rather, in correspondence with Church (ca 1934–5), Gödel proposed
axiomatizing the notion of "effective calculability"; indeed, in a 1935 letter to Kleene, Church reported that:
"His [Gödel's] only idea at the time was that it might be possible, in terms of effective calculability as an
undefined notion, to state a set of axioms which would embody the generally accepted properties of this
notion, and to do something on that basis".
But Gödel offered no further guidance. Eventually, he would suggest his (primitive) recursion, modified by
Herbrand's suggestion, that Gödel had detailed in his 1934 lectures in Princeton NJ (Kleene and another student
Rosser transcribed the notes). But "he did not think that the two ideas could be satisfactorily identified "except
heuristically".[12]
Next, it was necessary to identify and prove the equivalence of two notions of effective calculability. Equipped with
the λ-calculus and "general" recursion, Stephen Kleene with help of Church and J. B. Rosser produced proofs (1933,
1935) to show that the two calculi are equivalent. Church subsequently modified his methods to include use of
Herbrand–Gödel recursion and then proved (1936) that the Entscheidungsproblem is unsolvable: There is no
generalized "effective calculation" (method, algorithm) that can determine whether or not a formula in either the
recursive- or λ-calculus is "valid" (more precisely: no method to show that a well formed formula has a "normal
form").[13]
Many years later in a letter to Davis (ca 1965), Gödel would confess that "he was, at the time of these [1934]
lectures, not at all convinced that his concept of recursion comprised all possible recursions".[14] By 1963–4 Gödel
would disavow Herbrand–Gödel recursion and the λ-calculus in favor of the Turing machine as the definition of
"algorithm" or "mechanical procedure" or "formal system".[15]
A hypothesis leading to a natural law?: In late 1936 Alan Turing's paper (also proving that the
Entscheidungsproblem is unsolvable) was delivered orally, but had not yet appeared in print. On the other hand,
Emil Post's 1936 paper had appeared and was certified independent of Turing's work.[16] Post strongly disagreed
with Church's "identification" of effective computability with the λ-calculus and recursion, stating:
"Actually the work already done by Church and others carries this identification considerably beyond the
working hypothesis stage. But to mask this identification under a definition . . . blinds us to the need of its
continual verification."[17]
Rather, he regarded the notion of "effective calculability" as merely a "working hypothesis" that might lead by
inductive reasoning to a "natural law" rather than by "a definition or an axiom".[18] This idea was "sharply" criticized
by Church.[19]
ChurchTuring thesis 53
Thus Post in his 1936[] paper was also discounting Kurt Gödel's suggestion to Church in 1934–5 that the thesis might
be expressed as an axiom or set of axioms.
Turing adds another definition, Rosser equates all three: Within just a short time, Turing's 1936–37 paper "On
Computable Numbers, with an Application to the Entscheidungsproblem" appeared. In it he stated another notion of
"effective computability" with the introduction of his a-machines (now known as the Turing machine abstract
computational model). And in a proof-sketch added as an "Appendix" to his 1936–37 paper, Turing showed that the
classes of functions defined by λ-calculus and Turing machines coincided.[20]
In a few years (1939) Turing would propose, like Church and Kleene before him, that his formal definition of
mechanical computing agent was the correct one.[21] Thus, by 1939, both Church (1934) and Turing (1939), neither
having knowledge of the other's efforts, had individually proposed that their "formal systems" should be definitions
of "effective calculability";[22] neither framed their statements as theses.
Rosser (1939) formally identified the three notions-as-definitions:
"All three definitions are equivalent, so it does not matter which one is used."[23]
Kleene proposes Church's Thesis: This left the overt expression of a "thesis" to Kleene. In his 1943 paper
Recursive Predicates and Quantifiers Kleene proposed his "THESIS I":
"This heuristic fact [general recursive functions are effectively calculable]...led Church to state the following
thesis(22). The same thesis is implicit in Turing's description of computing machines(23).
"THESIS I. Every effectively calculable function (effectively decidable predicate) is general[24]
recursive [Kleene's italics]
"Since a precise mathematical definition of the term effectively calculable (effectively decidable) has been
wanting, we can take this thesis ... as a definition of it..."[25]
"(22) references Church 1936
"(23) references Turing 1936–7
Kleene goes on to note that:
"...the thesis has the character of an hypothesis—a point emphasized by Post and by Church(24). If we consider
the thesis and its converse as definition, then the hypothesis is an hypothesis about the application of the
mathematical theory developed from the definition. For the acceptance of the hypothesis, there are, as we have
suggested, quite compelling grounds."
"(24) references Post 1936 of Post and Church's Formal definitions in the theory of ordinal
numbers, Fund. Math. vol 28 (1936) pp.11–21 (see ref. #2, Davis 1965:286).
Kleene's Church–Turing Thesis: A few years later (1952) Kleene would overtly name, defend, and express the two
"theses" and then "identify" them (show equivalence) by use of his Theorem XXX:
"Heuristic evidence and other considerations led Church 1936 to propose the following thesis.
Thesis I. Every effectively calculable function (effectively decidable predicate) is general recursive.[26]
Theorem XXX: "The following classes of partial functions are coextensive, i.e. have the same members: (a)
the partial recursive functions, (b) the computable functions. . . ".[27]
Turing's thesis: "Turing's thesis that every function which would naturally be regarded as computable is
computable under his definition, i.e. by one of his machines, is equivalent to Church's thesis by Theorem
XXX."[28]
ChurchTuring thesis 54
Later developments
An attempt to understand the notion of "effective computability" better led Robin Gandy (Turing's student and
friend) in 1980 to analyze machine computation (as opposed to human-computation acted out by a Turing machine).
Gandy's curiosity about, and analysis of, "cellular automata", "Conway's game of life", "parallelism" and "crystalline
automata" led him to propose four "principles (or constraints) ... which it is argued, any machine must satisfy."[29]
His most-important fourth, "the principle of causality" is based on the "finite velocity of propagation of effects and
signals; contemporary physics rejects the possibility of instantaneous action at a distance."[30] From these principles
and some additional constraints—(1a) a lower bound on the linear dimensions of any of the parts, (1b) an upper
bound on speed of propagation (the velocity of light), (2) discrete progress of the machine, and (3) deterministic
behavior—he produces a theorem that "What can be calculated by a device satisfying principles I–IV is
computable.[31] ".
In the late 1990s Wilfried Sieg analyzed Turing's and Gandy's notions of "effective calculability" with the intent of
"sharpening the informal notion, formulating its general features axiomatically, and investigating the axiomatic
framework".[32] In his 1997 and 2002 Sieg presents a series of constraints on the behavior of a computor—"a human
computing agent who proceeds mechanically"; these constraints reduce to:
• "(B.1) (Boundedness) There is a fixed bound on the number of symbolic configurations a computor can
immediately recognize.
• "(B.2) (Boundedness) There is a fixed bound on the number of internal states a computor can be in.
• "(L.1) (Locality) A computor can change only elements of an observed symbolic configuration.
• "(L.2) (Locality) A computor can shift attention from one symbolic configuration to another one, but the new
observed configurations must be within a bounded distance of the immediately previously observed configuration.
• "(D) (Determinacy) The immediately recognizable (sub-)configuration determines uniquely the next computation
step (and id [instantaneous description] )"; stated another way: "A computor's internal state together with the
observed configuration fixes uniquely the next computation step and the next internal state."[33]
The matter remains in active discussion within the academic community.[34]
All these contributions involve proofs that the models are computationally equivalent to the Turing machine; such
models are said to be Turing complete. Because all these different attempts at formalizing the concept of "effective
calculability/computability" have yielded equivalent results, it is now generally assumed that the Church–Turing
thesis is correct. In fact, Gödel (1936) proposed something stronger than this; he observed that there was something
"absolute" about the concept of "reckonable in S1":
"It may also be shown that a function which is computable ['reckonable'] in one of the systems Si, or even in a
system of transfinite type, is already computable [reckonable] in S1. Thus the concept 'computable'
['reckonable'] is in a certain definite sense 'absolute', while practically all other familiar metamathematical
concepts (e.g. provable, definable, etc.) depend quite essentially on the system to which they are defined"[39]
Variations
The success of the Church–Turing thesis prompted variations of the thesis to be proposed. For example, the Physical
Church–Turing thesis (PCTT) states:
"According to Physical CTT, all physically computable functions are Turing-computable"[42]
The Church–Turing thesis says nothing about the efficiency with which one model of computation can simulate
another. It has been proved for instance that a (multi-tape) universal Turing machine only suffers a logarithmic
slowdown factor in simulating any Turing machine.[43] No such result has been proved in general for an arbitrary but
reasonable model of computation. A variation of the Church–Turing thesis that addresses this issue is the Feasibility
Thesis[44] or (Classical) Complexity-Theoretic Church–Turing Thesis (SCTT), which is not due to Church or
ChurchTuring thesis 56
Turing, but rather was realized gradually in the development of complexity theory. It states:[45]
"A probabilistic Turing machine can efficiently simulate any realistic model of computation."
The word 'efficiently' here means up to polynomial-time reductions. This thesis was originally called Computational
Complexity-Theoretic Church–Turing Thesis by Ethan Bernstein and Umesh Vazirani (1997). The
Complexity-Theoretic Church–Turing Thesis, then, posits that all 'reasonable' models of computation yield the same
class of problems that can be computed in polynomial time. Assuming the conjecture that probabilistic polynomial
time (BPP) equals deterministic polynomial time (P), the word 'probabilistic' is optional in the Complexity-Theoretic
Church–Turing Thesis. A similar thesis, called the Invariant Thesis, was introduced by Cees F. Slot and Peter van
Emde Boas. It states: "Reasonable" machines can simulate each other within a polynomially bounded overhead in
time and a constant-factor overhead in space.[46] The thesis originally appeared in a paper at STOC'84, which was
the first paper to show that polynomial-time overhead and constant-space overhead could be simultaneously
achieved for a simulation of a Random Access Machine on a Turing machine.[47]
If BQP is shown to be a strict superset of BPP, it would invalidate the Complexity-Theoretic Church–Turing Thesis.
In other words, there would be efficient quantum algorithms that perform tasks that do not have efficient
probabilistic algorithms. This would not however invalidate the original Church–Turing thesis, since a quantum
computer can always be simulated by a Turing machine, but it would invalidate the classical Complexity-Theoretic
Church–Turing thesis for efficiency reasons. Consequently, the Quantum Complexity-Theoretic Church–Turing
thesis states:
"A quantum Turing machine can efficiently simulate any realistic model of computation."
Eugene Eberbach and Peter Wegner[48] claim that the Church–Turing thesis is sometimes interpreted too broadly,
stating "the broader assertion that algorithms precisely capture what can be computed is invalid". They claim that
forms of computation not captured by the thesis are relevant today, terms which they call super-Turing computation.
Philosophical implications
Philosophers have interpreted the Church–Turing thesis as having implications for the philosophy of mind; however,
many of the philosophical interpretations of the Thesis involve basic misunderstandings of the thesis statement.[49]
B. Jack Copeland states that it's an open empirical question whether there are actual deterministic physical processes
that, in the long run, elude simulation by a Turing machine; furthermore, he states that it is an open empirical
question whether any such processes are involved in the working of the human brain.[50] There are also some
important open questions which cover the relationship between the Church–Turing thesis and physics, and the
possibility of hypercomputation. When applied to physics, the thesis has several possible meanings:
1. The universe is equivalent to a Turing machine; thus, computing non-recursive functions is physically
impossible. This has been termed the Strong Church–Turing thesis and is a foundation of digital physics.
2. The universe is not equivalent to a Turing machine (i.e., the laws of physics are not Turing-computable), but
incomputable physical events are not "harnessable" for the construction of a hypercomputer. For example, a
universe in which physics involves real numbers, as opposed to computable reals, might fall into this category.
The assumption that incomputable physical events are not "harnessable" has been challenged, however,[51] by a
proposed computational process that uses quantum randomness together with a computational machine to hide the
computational steps of a Universal Turing Machine with Turing-incomputable firing patterns.
3. The universe is a hypercomputer, and it is possible to build physical devices to harness this property and calculate
non-recursive functions. For example, it is an open question whether all quantum mechanical events are
Turing-computable, although it is known that rigorous models such as quantum Turing machines are equivalent to
deterministic Turing machines. (They are not necessarily efficiently equivalent; see above.) John Lucas and Roger
Penrose[52] have suggested that the human mind might be the result of some kind of quantum-mechanically
enhanced, "non-algorithmic" computation, although there is no scientific evidence for this proposal.
ChurchTuring thesis 57
There are many other technical possibilities which fall outside or between these three categories, but these serve to
illustrate the range of the concept.
Non-computable functions
One can formally define functions that are not computable. A well-known example of such a function is the Busy
Beaver function. This function takes an input n and returns the largest number of symbols that a Turing machine
with n states can print before halting, when run with no input. Finding an upper bound on the busy beaver function is
equivalent to solving the halting problem, a problem known to be unsolvable by Turing machines. Since the busy
beaver function cannot be computed by Turing machines, the Church–Turing thesis states that this function cannot
be effectively computed by any method.
Several computational models allow for the computation of (Church-Turing) non-computable functions. These are
known as hypercomputers. Mark Burgin[53] argues that super-recursive algorithms such as inductive Turing
machines disprove the Church–Turing thesis. His argument relies on a definition of algorithm broader than the
ordinary one, so that non-computable functions obtained from some inductive Turing machines are called
computable. This interpretation of the Church–Turing thesis differs from the interpretation commonly accepted in
computability theory, discussed above. The argument that super-recursive algorithms are indeed algorithms in the
sense of the Church–Turing thesis has not found broad acceptance within the computability research
community.[citation needed]
Footnotes
[1] Church 1934:90 footnote in Davis 1952
[2] Turing 1936–7 in Davis 1952:149
[3] Kleene 1952:317
[4] Rosser 1939 in Davis 1965:225
[5] Merriam Webster's Ninth New Collegiate Dictionary
[6] A. M. Turing (1939), Systems of Logic Based on Ordinals (https:/ / webspace. princeton. edu/ users/ jedwards/ Turing Centennial 2012/ Mudd
Archive files/ 12285_AC100_Turing_1938. pdf) (Ph.D. thesis). Princeton University. p. 8.
[7] Gandy (Gandy 1980 in Barwise 1980:123) states it this way: What is effectively calculable is computable. He calls this "Church's Thesis", a
peculiar choice of moniker.
[8] Davis's commentary before Church 1936 An Unsolvable Problem of Elementary Number Theory in Davis 1965:88. Church uses the words
"effective calculability" on page 100ff.
[9] In his review of Church's Thesis after 70 Years edited by Adam Olszewski et al. 2006, Peter Smith's criticism of a paper by Muraswski and
Wolenski suggests 4 "lines" re the status of the Church–Turing Thesis: (1) empirical hypothesis (2) axiom or theorem, (3) definition, (4)
explication. But Smith opines that (4) is indistinguishable from (3), cf Smith (July 11, 2007) Church's Thesis after 70 Years at http:/ / www.
logicmatters. net/ resources/ pdfs/ CTT. pdf
[10] cf footnote 3 in Church 1936 An Unsolvable Problem of Elementary Number Theory in Davis 1965:89
[11] Dawson 1997:99
[12] Sieg 1997:160 quoting from the 1935 letter written by Church to Kleene, cf Footnote 3 in Gödel 1934 in Davis 1965:44
[13] cf Church 1936 in Davis 1965:105ff
[14] Davis's commentary before Gödel 1934 in Davis 1965:40
[15] For a detailed discussion of Gödel's adoption of Turing's machines as models of computation, see Shagrir date TBD at http:/ / edelstein. huji.
ac. il/ staff/ shagrir/ papers/ Goedel_on_Turing_on_Computability. pdf
[16] cf. Editor's footnote to Post 1936 Finite Combinatory Process. Formulation I. at Davis 1965:289.
[17] Post 1936 in Davis 1965:291 footnote 8
[18] Post 1936 in Davis 1952:291
[19] Sieg 1997:171 and 176–7
[20] Turing 1936–7 in Davis 1965:263ff
[21] Turing 1939 in Davis:160
[22] cf. Church 1934 in Davis 1965:100, also Turing 1939 in Davis 1965:160
[23] italics added, Rosser 1939 in Davis 1965:226
[24] An archaic usage of Kleene et al. to distinguish Gödel's (1931) "rekursiv" (a few years later named primitive recursion by Rózsa Péter (cf
Gandy 1994 in Herken 1994–5:68)) from Herbrand–Gödel's recursion of 1934 i.e. primitive recursion equipped with the additional mu
operator; nowadays mu-recursion is called, simply, "recursion".
ChurchTuring thesis 58
References
• Ben-Amram, A.M. (2005). "The Church-Turing Thesis and its Look-Alikes". SIGACT News 36 (3): 113–116.
doi: 10.1145/1086649.1086651 ([Link]
• Bernstein, E; Vazirani, U. (1997). "Quantum complexity theory". SIAM Journal on Computing 26 (5):
1411–1473. doi: 10.1137/S0097539796300921 ([Link]
• Blass, Andreas; Yuri Gurevich (2003). "Algorithms: A Quest for Absolute Definitions" ([Link]
[Link]/~gurevich/Opera/[Link]). Bulletin of European Association for Theoretical Computer Science
(81).
• Burgin, Mark (2005). "Super-recursive algorithms". Monographs in computer science. Springer.
ISBN 0-387-95569-0.
ChurchTuring thesis 59
• Church, Alonzo (1932). "A set of Postulates for the Foundation of Logic". Annals of Mathematics 33 (2):
346–366. doi: 10.2307/1968337 ([Link] JSTOR 1968337 ([Link]
org/stable/1968337).
• Church, Alonzo (1936). "An Unsolvable Problem of Elementary Number Theory". American Journal of
Mathematics 58 (58): 345–363. doi: 10.2307/2371045 ([Link] JSTOR 2371045
([Link]
• Church, Alonzo (1936). "A Note on the Entscheidungsproblem". Journal of Symbolic Logic (1): 40–41.
• Church, Alonzo (1941). The Calculi of Lambda-Conversion. Princeton: Princeton University Press.
• Cooper, S. B.; Odifreddi, P. (2003). "Incomputability in Nature". In S. B. Cooper & S. S. Goncharov.
Computability and Models: Perspectives East and West. Kluwer Academic/Plenum Publishers. pp. 137–160.
• Martin Davis, ed. (1965). The Undecidable, Basic Papers on Undecidable Propositions, Unsolvable Problems
And Computable Functions. New York: Raven Press. Includes original papers by Gödel, Church, Turing, Rosser,
Kleene, and Post mentioned in this section.
• Eberbach, E.; Wegner, P. (October 2003). "Beyond Turing Machines". Bulletin of the European Association for
Theoretical Computer Science (81): 279–304.
• Gandy, Robin (1980). "Church's Thesis and the Principles for Mechanisms". In H.J. Barwise, H.J. Keisler, and K.
Kunen. The Kleene Symposium. North-Holland Publishing Company. pp. 123–148.
• Gandy, Robin (1994–5). Rolf Herken, ed. The universal Turing Machine: A Half-Century Survey. New York:
Wien Springer–Verlag. pp. 51ff. ISBN 3-211-82637-8.
• Gödel, Kurt (1965) [1934]. "On Undecidable Propositions of Formal Mathematical Systems". In Davis, M. The
Undecidable. Kleene and Rosser (lecture note-takers); Institute for Advanced Study (lecture sponsor). New York:
Raven Press.
• Gödel, Kurt (1936). "On The Length of Proofs". Ergenbnisse eines mathematishen Kolloquiums (in German)
(Heft) (7): 23–24. Cited by Kleene (1952) as "Über die Lāange von Beweisen", in Ergebnisse eines math. Koll,
etc.
• Gurevich, Yuri (June 1988). "On Kolmogorov Machines and Related Issues". Bulletin of European Association
for Theoretical Computer Science (35): 71–82.
• Gurevich, Yuri (July 2000). "Sequential Abstract State Machines Capture Sequential Algorithms" (http://
[Link]/~gurevich/Opera/[Link]). ACM Transactions on Computational Logic 1 (1): 77–111.
doi: 10.1145/343369.343384 ([Link]
• Herbrand, Jacques (1932). "Sur la non-contradiction de l'arithmétique". Journal fur die reine und angewandte
Mathematik (166): 1–8.
• Hofstadter, Douglas R.. "Chapter XVII: Church, Turing, Tarski, and Others". Gödel, Escher, Bach: an Eternal
Golden Braid.
• Kleene, Stephen Cole (1935). "A Theory of Positive Integers in Formal Logic". American Journal of Mathematics
57 (57): 153–173 & 219–244. doi: 10.2307/2372027 ([Link] JSTOR 2372027
([Link]
• Kleene, Stephen Cole (1936). "Lambda-Definability and Recursiveness". Duke Mathematical Journal (2):
340–353.
• Kleene, Stephen Cole (1943). "Recursive Predicates and Quantifiers". American Mathematical Society
Transactions (Transactions of the American Mathematical Society, Vol. 53, No. 1) 54 (1): 41–73. doi:
10.2307/1990131 ([Link] JSTOR 1990131 ([Link]
1990131). Reprinted in The Undecidable, p. 255ff. Kleene refined his definition of "general recursion" and
proceeded in his chapter "12. Algorithmic theories" to posit "Thesis I" (p. 274); he would later repeat this thesis
(in Kleene 1952:300) and name it "Church's Thesis" (Kleene 1952:317) (i.e., the Church thesis).
• Kleene, Stephen Cole (1952). Introduction to Metamathematics. North-Holland. OCLC 523942 ([Link]
[Link]/oclc/523942).
ChurchTuring thesis 60
• Knuth, Donald (1973). The Art of Computer Programming. 1/Fundamental Algorithms (2nd ed.).
Addison–Wesley.
• Kugel, Peter (November 2005). "Communications of the ACM". It's time to think outside the computational box
48 (11).
• Lewis, H.R.; Papadimitriou, C.H. (1998). Elements of the Theory of Computation. Upper Saddle River, NJ, USA:
Prentice-Hall.
• Manna, Zohar (1974) [2003]. Mathematical Theory of Computation. Dover. ISBN 978-0-486-43238-0.
• Markov, A.A. (1960) [1954]. "The Theory of Algorithms". American Mathematical Society Translations 2 (15):
1–14.
• Pour-El, M.B.; Richards, J.I. (1989). Computability in Analysis and Physics. Springer Verlag.
• Rosser, J. B. (1939). "An Informal Exposition of Proofs of Godel's Theorem and Church's Theorem". The Journal
of Symbolic Logic (The Journal of Symbolic Logic, Vol. 4, No. 2) 4 (2): 53–60. doi: 10.2307/2269059 ([Link]
[Link]/10.2307/2269059). JSTOR 2269059 ([Link]
• Soare, Robert (1996). "Computability and Recursion". Bulletin of Symbolic Logic (2): 284–321.
• Syropoulos, Apostolos (2008). Hypercomputation: Computing Beyond the Church–Turing Barrier. Springer.
ISBN 9780-387308869.
• Turing, A. M. (1937) [Delivered to the Society November 1936], "On Computable Numbers, with an Application
to the Entscheidungsproblem" ([Link]
Proceedings of the London Mathematical Society, 2 42: 230–65, doi: 10.1112/plms/s2-42.1.230 ([Link]
org/10.1112/plms/s2-42.1.230) and Turing, A.M. (1938). "On Computable Numbers, with an Application to
the Entscheidungsproblem: A correction". Proceedings of the London Mathematical Society. 2 43 (1937).
pp. 544–6. doi: 10.1112/plms/s2-43.6.544 ([Link] (See also: Davis
1965:115ff)
• Olszewski, Adam (2006). Church's Thesis After 70 Years.
• Gabbay, D.M. (2001). Handbook of Philosophical Logic 1 (2nd ed.).
External links
• The Church–Turing Thesis ([Link] entry by B. Jack Copeland in the
Stanford Encyclopedia of Philosophy.
• Computation in Physical Systems ([Link] A
comprehensive philosophical treatment of relevant issues.
Theoretical computer science 61
Scope
It is not easy to circumscribe the theory areas precisely and the ACM's Special Interest Group on Algorithms and
Computation Theory (SIGACT) describes its mission as the promotion of theoretical computer science and notes:
The field of theoretical computer science is interpreted broadly so as to include algorithms, data
structures, computational complexity theory, distributed computation, parallel computation, VLSI,
machine learning, computational biology, computational geometry, information theory, cryptography,
quantum computation, computational number theory and algebra, program semantics and verification,
automata theory, and the study of randomness. Work in this field is often distinguished by its emphasis
on mathematical technique and rigor.
To this list, the ACM's journal Transactions on Computation Theory adds coding theory, computational learning
theory and theoretical computer science aspects of areas such as databases, information retrieval, economic models
and networks. Despite this broad scope, the "theory people" in computer science self-identify as different from the
"applied people." Some characterize themselves as doing the "(more fundamental) 'science(s)' underlying the field of
computing." Other "theory-applied people" suggest that it is impossible to separate theory and application. This
means, the so-called "theory people" regularly use experimental science(s) done in less-theoretical areas such as
software system research. This also means, there is more cooperation than mutually exclusive competition between
theory and application.
P = NP ?
Mathematical logic Automata Number theory Graph theory Computability theory Computational complexity
theory theory
GNITIRW-TERCES
History
While formal algorithms have existed for millennia (Euclid's algorithm for determining the greatest common divisor
of two numbers is still used in computation), it was not until 1936 that Alan Turing, Alonzo Church and Stephen
Kleene formalized the definition of an algorithm in terms of computation. While binary and logical systems of
mathematics had existed before 1703, when Gottfried Leibniz formalized logic with binary values for true and false.
While logical inference and mathematical proof had existed in ancient times, in 1931 Kurt Gödel proved with his
incompleteness theorem that there were fundamental limitations on what statements could be proved or disproved.
These developments have led to the modern study of logic and computability, and indeed the field of theoretical
computer science as a whole. Information theory was added to the field with a 1948 mathematical theory of
Theoretical computer science 62
communication by Claude Shannon. In the same decade, Donald Hebb introduced a mathematical model of learning
in the brain. With mounting biological data supporting this hypothesis with some modification, the fields of neural
networks and parallel distributed processing were established. In 1971, Stephen Cook and, working independently,
Leonid Levin, proved that there exist practically relevant problems that are NP-complete – a landmark result in
computational complexity theory.
With the development of quantum mechanics in the beginning of the 20th century came the concept that
mathematical operations could be performed on an entire particle wavefunction. In other words, one could compute
functions on multiple states simultaneously. This led to the concept of a quantum computer in the latter half of the
20th century that took off in the 1990s when Peter Shor showed that such methods could be used to factor large
numbers in polynomial time, which, if implemented, would render most modern public key cryptography systems
uselessly insecure.
Modern theoretical computer science research is based on these basic developments, but includes many other
mathematical and interdisciplinary problems that have been posed.
Organizations
• European Association for Theoretical Computer Science
• SIGACT
Conferences
• Annual ACM Symposium on Theory of Computing (STOC)[1]
• Annual IEEE Symposium on Foundations of Computer Science (FOCS)
• ACM–SIAM Symposium on Discrete Algorithms (SODA)
• Annual Symposium on Computational Geometry (SoCG)[2]
• International Colloquium on Automata, Languages and Programming (ICALP)
• Symposium on Theoretical Aspects of Computer Science (STACS)
• International Conference on Theory and Applications of Models of Computation (TAMC)
• European Symposium on Algorithms (ESA)
• IEEE Symposium on Logic in Computer Science (LICS)
• International Symposium on Algorithms and Computation (ISAAC)
• Workshop on Approximation Algorithms for Combinatorial Optimization Problems (APPROX)
• Workshop on Randomization and Computation (RANDOM)
• Computational Complexity Conference (CCC)
• ACM Symposium on Parallelism in Algorithms and Architectures (SPAA)
• ACM Symposium on Principles of Distributed Computing (PODC)
• International Symposium on Fundamentals of Computation Theory (FCT)[3]
Notes
[1] The 2007 Australian Ranking of ICT Conferences (http:/ / www. core. edu. au/ rankings/ Conference Ranking Main. html): tier A+.
[2] The 2007 Australian Ranking of ICT Conferences (http:/ / www. core. edu. au/ rankings/ Conference Ranking Main. html): tier A.
[3] FCT 2011 (http:/ / fct11. ifi. uio. no/ ) (retrieved 2013-06-03)
Further reading
• Martin Davis, Ron Sigal, Elaine J. Weyuker, Computability, complexity, and languages: fundamentals of
theoretical computer science, 2nd ed., Academic Press, 1994, ISBN 0-12-206382-1. Covers theory of
computation, but also program semantics and quantification theory. Aimed at graduate students.
External links
• Theoretical Computer Science at PSG College of Technology, Coimbatore ([Link]
department/appmaths)
• SIGACT directory of additional theory links ([Link]
• Theory Matters Wiki ([Link] Theoretical Computer Science (TCS) Advocacy Wiki
• [ne[Link] Usenet [Link]]
• List of academic conferences in the area of theoretical computer science ([Link]
confsearch/faces/pages/[Link]?topic=Theory&sortMode=1&graphicView=1) at confsearch ([Link]
[Link])
• Theoretical Computer Science - StackExchange ([Link] a Question and Answer
site for researchers in theoretical computer science
• Computer Science Animated ([Link]
• [Link] Massachusetts Institute of Technology
Article Sources and Contributors 64
Best, worst and average case Source: [Link] Contributors: [Link], AdSR, Altenmann, Andreas Kaufmann, Angela,
Beekeepingschool, Brazzy, Brighterorange, Brycehughes, Cedar101, Charles Matthews, Charvest, DWay, Dark Silver Crow, Dcoetzee, DevastatorIIC, Dfletter, Dieter Simon, EagleFan, Ed Poor,
Fasten, Gardar Rurak, Gautham tpsz, Grinning Fool, Ianb1469, Jacobko, JavierMC, Kgautam28, Lee Daniel Crocker, Liso, Localh77, Malcohol, Materialscientist, Michael Hardy, Mike Rosoft,
Mostargue, Muro de Aguas, Nard the Bard, Nayuki, Octalc0de, Ohnoitsjamie, Paul G, Pgan002, Phils, Pol098, Populus, Pownuk, Radagast83, Reinyday, RobinK, Rory096, Ruud Koot, Sabbut,
Scasa155, Some jerk on the Internet, Spidern, Spl, Taemyr, TakuyaMurata, The Anome, Timwi, [Link], Wolfkeeper, ﻣﺎﻧﻲ, 54 anonymous edits
Big O notation Source: [Link] Contributors: [Link], 4v4l0n42, A-Ge0, A. Pichler, ABCD, Abdull, Adashiel, Addps4cat, Aelvin,
Ahmad Faridi, Ahoerstemeier, Alan smithee, Alex Selby, Algoman101, Alksentrs, AllanBz, Altenmann, AnOddName, Andre Engels, Andreas Kaufmann, Andyhowlett, Ankit Maity, Anonymous
Dissident, Anthony Appleyard, Apanag, Arjayay, Arno Matthias, Arthur Rubin, Arunmoezhi, Arvindn, Ascánder, AvicAWB, AxelBoldt, B4hand, BMB, Bagsc, Barak Sh, Baronjonas, Ben pcc,
BenFrantzDale, Bergstra, Bhny, Bird of paradox, Bkell, Bomazi, Booyabazooka, Borgx, Brad7777, Breno, Brion VIBBER, Btyner, Bubba73, Buster79, C45207, CBKAtTopsails, CRGreathouse,
Calculuslover, Cbarlow3, Charles Matthews, CharlesGillingham, ChazBeckett, ChrisForno, ChrisGualtieri, Colfulus, Compotatoj, Connelly, Conversion script, Cookie4869, CosineKitty, Curb
Chain, Curps, Cybercobra, CyborgTosser, Czar, D4g0thur, DFS454, Dachshund, Dadudadu, Damian Yerrick, Danakil, Danny, Dark Charles, David Eppstein, Davidwt, Dcljr, Dcoetzee, Dean p
foster, Deeparnab, Den fjättrade ankan, Derlay, Dhuss, Diberri, Diego diaz espinoza, Dionyziz, Dmr2, DniQ, Donfbreed, Doradus, Dr. Universe, DrHow, Draco flavus, Drpaule, Duagloth,
Dysprosia, EconoPhysicist, Efnar, El C, Elephant in a tornado, Eleveneleven, Elias, EmilJ, Enochlau, Epachamo, Eric119, Ernie shoemaker, Eus Kevin, FauxFaux, Fayenatic london, Fede Reghe,
Felix Wiemann, Fennec, FiachraByrne, Fibonacci, FilipeS, Flouran, Foxjwill, Fredrik, Fvw, Gadig, Gene Ward Smith, GeordieMcBain, Giftlite, Gilliam, Gjd001, Glassmage, Glrx, Gracenotes,
Graham87, Gremagor, Gutza, [Link], Haham hanuka, Hans Adler, Hdante, Head, Headbomb, HenningThielemann, Henrygb, Hermel, Hlg, Ichernev, Intgr, InverseHypercube, Isis, Ixfd64,
JHMM13, JIP, Jacobolus, James.S, Jaredwf, Javit, Jeronimo, Jim1138, Jleedev, JoeKearney, JoergenB, JohnWStockwell, Jolsfa123, Jonathanzung, Josephjeevan, JoshuaZ, Jowan2005, Jpkotta,
Jthillik, Justin W Smith, Jwh335, Kan8eDie, Katsushi, KneeLess, KoenDelaere, Koertefa, Koffieyahoo, Kri, LC, LOL, Lambiam, Lamro, Leithp, Leonard G., LeonardoGregianin, Leycec, Linas,
[Link], Lugnad, Luqui, MFH, MIT Trekkie, Macrakis, Mad Jaqk, Maksim-e, Manmanmamamamama, Marc van Leeuwen, MarkOlah, MathMartin, Matiasholte, Mattbuck, McKay, Mcstrother,
Melcombe, Meldraft, Michael Hardy, Michael Rogers, Michael Slone, Miguel, Mike Schwartz, Mindmatrix, Mitchoyoshitaka, Miym, Mobius, Modeha, Mpagano, Mrypsilon, Mstuomel, Mxn,
Najeeb1010, Nbarth, NehpestTheFirst, Neilc, Nejko, NeoUrfahraner, Netheril96, Ngorade, Nils Grimsmo, NovaDog, O Pavlos, Oleg Alexandrov, Oliphaunt, Opelio, Optikos, Ott2, PGWG,
PL290, Patrick, Patrick Lucas, Paul August, PaulTanenbaum, Paxcoder, Pcuff, Pete4512, PhilKnight, Philip Trueman, Plutor, Poor Yorick, Prosfilaes, Prumpf, Quendus, Qwfp, R'n'B, R.e.b.,
R3m0t, Raknarf44, Rebroad, Reinderien, Retrolord, RexNL, Rfl, Rgiuly, Riceplaytexas, Rjwilmsi, RobertBorgersen, RobinK, Rockingravi, Rogerdpack, Rovenhot, Royote, Rschwieb, Ruud
Koot, Sabalka, Sameer0s, Sapphorain, SchfiftyThree, Sciurinæ, ScotsmanRS, Shalom Yechiel, Shellgirl, Shizhao, Shoessss, Shreevatsa, Simetrical, Simon Fenney, Skaraoke, Sligocki, Smjg,
Sophus Bie, Spitzak, [Link], Stephen Compall, Stevenj, Stevertigo, Stimpy, Suruena, Svick, Sydbarrett74, Syncategoremata, Szepi, TNARasslin, Taemyr, TakuyaMurata, Tardis,
Tarotcards, Taw, The Anome, TheBiggestFootballFan, TheSeven, Thenub314, Tide rolls, Timwi, Toby Bartels, Tony Fox, Tosha, Tritium6, [Link], Ultimus, Universalss, User A1,
Vanisheduser12a67, Vecter, Vedant, VictorAnyakin, Walrus068, WavePart, Wavelength, Whosyourjudas, Whouk, Widr, Wikibuki, Writer on wiki, Wtmitchell, Yarin Kaul, ZAB, Zack,
Zeitgeist2.718, Zero sharp, ZeroOne, ZiggyMo, Zowch, Zundark, Zvika, Île flottante, 711 anonymous edits
Computational complexity theory Source: [Link] Contributors: [Link], 16@r, [Link], [Link], [Link], APH,
Aaron Nitro Danielson, Abatasigh, Adavidb, AidaFernandaUFPE, Alexbrandts, Alotau, Altenmann, Andrei Stroe, Andris, Aphaia, ArnoldReinhold, Arthaey, Arthur Rubin, Arvindn, Ascánder,
Auminski, AvicAWB, AvnishIT, AxelBoldt, Barcex, Bassbonerocks, Battamer, Beland, Ben Standeven, Bethnim, Bgwhite, Bkell, Blokhead, Bo Jacoby, Booyabazooka, Bouke, Brad7777,
Braincricket, Brianbjparker, Bruno Unna, Bsotomay, Bubba73, C. lorenz, CRGreathouse, Calculuslover800, Carbo1200, Cesarsorm, Chalst, Charles Matthews, CharlesGillingham, Charvest,
Chealer, Chinju, Chowbok, [Link], Cngoulimis, ConceptExp, Contrasedative, Conversion script, Creidieki, D climacus, [Link], Daniel Quinlan, David Eppstein, David Gerard,
David Newton, [Link], DavidSJ, Dcoetzee, Decrease789, Deflagg, Deltahedron, DerGraph, Dissident, Djhulme, Dlu776, Dmcq, Dmitri pavlov, Dmyersturnbull, Docu, Doradus,
Dragonflare82, Drizzd, Droll, Déjà Vu, E23, Egriffin, Ehsan, Ekotkie, Epbr123, ErrantX, Erudecorp, [Link], Everyking, Flammifer, Four Dog Night, Fredrik, Fuujuhi, GPhilip, Gaius
Cornelius, Gdr, Getonyourfeet, Giftlite, GrEp, Graham87, GregorB, Groupthink, Grsbmd, GulDan, Harryboyles, Hazmat2, Headbomb, Hegariz, Henning Makholm, Henrygb, Hermel, Hfastedge,
Hiihammuk, Hmonroe, Huynl, Ink-Jetty, Intgr, InverseHypercube, Ixfd64, JRSpriggs, Jaksmata, Jamesd9007, Jeff Dahl, Jimbreed, Jitse Niesen, Jleedev, Jlpinar83, Jmencisom, John Vandenberg,
JohnBlackburne, Johnuniq, Julianiacoponi, Klausness, Knutux, Koavf, Konstable, Krishnachandranvn, Kurykh, LC, LJosil, Larry laptop, Leibniz, Linas, Little_guru, LokiClock, Looxix, Magmi,
Manway, MarcelB612, MassimoLauria, Mastergreg82, MathMartin, Maurice Carbonaro, Mav, McKay, Mdd, Michael Hardy, MichiHenning, Mik01aj, Mikeblas, Miym, Mpatel, Muditjai,
Multipundit, Mycer1nus, N12345n, Nixdorf, Nneonneo, Obradovic Goran, Oleg Alexandrov, Omicronpersei8, Orange Suede Sofa, OrgasGirl, Orz, [Link], Pcap, Pete142, Phil Boswell,
Philip Trueman, Pichpich, Policron, Populus, Postrach, Powo, PrologFan, Prumpf, Quackor, Quotient group, RainR, Readams, Rednas1234, Rend, RexNL, Rich Farmbrough, Ripper234,
Rjwilmsi, Robert Merkel, RobinK, Rogerdpack, Ruud Koot, Ryguasu, Ryulong, Sae1962, Scottcraig, Shenme, Siddhant, SimonTrew, Skippydo, SpaceMoose, Staszek Lem, Stevenmitchell,
Stevertigo, Talldean, Tarotcards, Tdgs, Tejas81, Template namespace initialisation script, The Anome, The Thing That Should Not Be, Themusicgod1, Tim32, Timwi, Tkgd2007, Tobias
Bergemann, Toddy1, Triwas, Trovatore, Twri, Van Parunak, VictorAnyakin, Walkerma, Waltnmi, Wavelength, Wernher, WikHead, WikiSlasher, Wikiklrsc, Wvbailey, Xiaoyang, Yill577, Ylloh,
Youandme, Young Pioneer, Zipcube, 242 , דוד שיanonymous edits
Computability Source: [Link] Contributors: 2ndMouse, Abatasigh, Aldur42, AshtonBenson, Ashutosh y0078, Bakilas, Ben Standeven,
BenRG, Bidabadi, CBM, CRGreathouse, Chaos, ChrisGualtieri, Dcoetzee, Disavian, Discospinster, Dmcq, [Link], Ewlyahoocom, Farzaneh, Giftlite, Haham hanuka, Hairy Dude, Hans
Adler, Harrigan, Hauke Pribnow, Javalenok, Jpvinall, Kbh3rd, Kizeral, Koavf, Ksyrie, Michael Hardy, Miym, Oleg Alexandrov, PJTraill, Pcap, Peter M Gerdes, Peterdjones, Readams, Ruud
Koot, Saforrest, Salgueiro, SamuelRiv, Sligocki, Steinsomers, Tachyon01, Timwi, Tobias Bergemann, Trevor Andersen, Trevor MacInnis, Trovatore, UKoch, Vectro, Waldir, Winston365,
Yill577, Yoderj, Zero sharp, 90 anonymous edits
Turing machine Source: [Link] Contributors: -Ril-, Abovechief, Abune, Accelerometer, Ad88110, AdamPeterman, Ahasn, Ahoerstemeier,
Ahpook, Alain Vey, Alamino, Alaniaris, Alejo2083, Alex Vinokur, Alexakh, Aliazimi, Allan McInnes, Altenmann, Altg20April2nd, Andre Engels, Anonymous Dissident, Antandrus, Anton203,
Apocalyps956, ArmadniGeneral, Artur adib, Arvindn, Ashutosh y0078, Ask123, Asmeurer, AxelBoldt, [Link], Barak, BearMachine, [Link], BenRG, Bensin, Bigmantonyd, BillyPreset,
Blahma, Blaxthos, Blehfu, BorgHunter, Brest, Brion VIBBER, Brouhaha, Bryan Derksen, Byrial, CBM, CRGreathouse, Cal 1234, Calibwam, Calliopejen1, Can't sleep, clown will eat me,
Carleas, Centrx, Cgay88, Chas zzz brown, Cheran, Cholmes75, Chridd, Chris Pressey, Chrsimon, Claygate, Cloversmate, Cocteau834, Cole Kitchen, Conversion script, Creidieki, CryptoDerk,
D6, DARTH SIDIOUS 2, DKqwerty, DYLAN LENNON, Dac04, Damian Yerrick, DanielCristofani, Davewho2, David Eppstein, David H Braun (1964), David Koller, DavisSta, Dcoetzee,
Derek Ross, Dicklyon, Diego Queiroz, Dominus, Doradus, Dratman, DroEsperanto, Droll, Drunkasian, [Link], Duxwing, Dzonatas, Ec5618, Edetic, Edward, Ehn, Ellywa, Ender2101,
ErikTheBikeMan, Eszett, Eubulides, Eus Kevin, Ewakened, False vacuum, Ferkel, Fleuryeric, Frap, Ftiercel, Fuzheado, GabrielF, Gachet, Gaius Cornelius, Gavia immer, Gdr, Gene Nygaard,
GermanX, Ggwine, Giftlite, Gioto, Glacialfox, Glome83, Golbez, GrafZahl, Graham87, GrahamDavies, Greenmatter, Grover cleveland, Gtxfrance, Gubbubu, Gwern, Gwythoff, Haeisen, Hairy
Dude, HamburgerRadio, HarisM, Harmil, Head, HenryCorp, Heooo, Heron, HeyStopThat, Howard McCay, Hu12, Hydrogen Iodide, Hzenilc, IMSoP, IShadowed, Iamfscked, Ieee8023, Ilia Kr.,
Iridescent, Isaac Rabinovitch, J. Spencer, JForget, JMK, JRSpriggs, JSimmonz, Jakenath, Jan Hidders, Jaredwf, Jauhienij, Jayc, Jeph paul, Jheiv, Jiawhein, Jidan, Jinwicked, Johnuniq, Jon
Awbrey, Jpbowen, Jpmelos, JpurvisUM, Jsorr, Jurvetson2, [Link], Kadin2048, Kaisershatner, Karl Dickman, Kevin143, Khym Chanur, King mike, Kirsted, Kku, Klickagent, Kne1p, Kntg,
Knutux, Krauss, Kris Schnee, L Kensington, LC, Laminatrix, LarryLACa, Ld100, Liftarn, Lingwitt, LittleDan, Loisel, Lokentaren, LoopZilla, Lotje, Lousyd, LucasVB, MDoggNoGFresh, MSGJ,
Machine Elf 1735, Maester mensch, Malleus Fatuorum, [Link], Martynas Patasius, Materialscientist, MathMartin, Matman132, MattGiuca, Merzbow, Metaeducation, Meursault2004,
Michael Hardy, Mitch Ames, Miym, Mmernex, MoraSique, Mormegil, Mousomer, Mrengy, Mvanveen, Nagato, Nanshu, Napoleon Dynamite42, NapoliRoma, Nikitadanilov, Nitishkorula, Nuno
Tavares, Nynexman4464, Obradovic Goran, Oleg Alexandrov, Olivier, Oneiros, Opticon, OrgasGirl, Ott2, P.L.A.R., Pagw, Parhamr, [Link], Patrick, Paul Stansifer, Pcap, Penumbra2000,
Pet5, Pexatus, Pfhyde, Phil Boswell, Philip Trueman, Pinethicket, Pleasantville, Plumpy, Policron, Polymath69, Populus, Pritamworld, Prolog, Psinu, Punctilius, Q17, QuiteUnusual, R.e.s., RCX,
Ramesh Chandra, Raul654, Rbkillea, Readams, Reedy, Reinderien, Rjpryan, Rjwilmsi, Roadrunner, Rob-nick, Robert Merkel, RobertG, RossPatterson, Rp, Ruud Koot, Saforrest, Satyr9, Schadel,
ScottSteiner, Sheerfirepower, Shell Kinney, Shizhao, Shreevatsa, SimonP, Sligocki, Slike2, Slowking Man, Smimram, Smmurphy, Snoyes, SpNeo, Spikey, Stevertigo, Strangethingintheland,
Streakofhope, Sun Creator, Sundar, Supertouch, Svick, Sviemeister, Syko, Szhu008, TShilo12, TakuyaMurata, Tarcieri, Tarotcards, TedColes, That Guy, From That Show!, The Anome,
Thecheesykid, Themfromspace, Therebelcountry, Theroadislong, Three887, Tide rolls, Tillwe, Timwi, TobiasKlaus, Tom-, TomT0m, Topbanana, Tristanb, Trovatore, UberScienceNerd,
Vasyaivanov, Ventolin, Verne Equinox, VictorAnyakin, Vineetgupta, Vrenator, Wavelength, Wednesday Next, Wenzchen, WikiTony999, Wikiwikifast, Wolfrock, Wshun, Wuffe, Wvbailey,
XJaM, Yan Kuligin, Yipdw, Yourmomblah, Zbxgscqf, Zeno Gantner, Александър, ﺳﻌﯽ, 524 anonymous edits
Church–Turing thesis Source: [Link] Contributors: "alyosha", [Link], Alan Liefting, Aldux, Allan McInnes, AmirOnWiki, Anthony,
Arthur Rubin, AshtonBenson, Auntof6, AxelBoldt, BMF81, Ben Standeven, Bender235, Benplowman, Bkell, Bluewaves, Brighterorange, C. A. Russell, [Link], CBM, CRGreathouse, Caesura,
Article Sources and Contributors 65
Charles Matthews, CharlesGillingham, Chinju, Chris the speller, Christofurio, Claygate, Cole Kitchen, Connelly, Conversion script, Cornflake pirate, Costyn, Crowsnest, Cybercobra, Cyfal,
DA3N, DanielVallstrom, Danski14, Daran, Davehi1, David Eppstein, Dbenbenn, Dcattell, Dmd, Download, DrDnar, Dratman, Drilnoth, Dvgrn, Edward, Electron9, Elmiguel409, False vacuum,
Frankman, Fredkinfollower, Fromageestciel, Fsiler, Gavia immer, Gdr, Gene Nygaard, Giftlite, Gioto, GlaedrH, Gpgra, Greg Kuperberg, Gregbard, GregorB, Hairy Dude, Hans Adler,
Headbomb, HenryHRich, Heooo, Hkmaly, Htkym, Icek, Imz, InverseHypercube, Ivoras, Jaxad0127, Jerzy, Jonesey95, Jordgette, Jouster, Jpgordon, Julesd, Jushi, Kavya Manohar,
Kazkaskazkasako, Kizeral, Kjell André, Kntg, Knutux, Kurykh, Lambiam, Larry V, Leibniz, Lockfoot, Lollerskates, MER-C, Machine Elf 1735, Markhurd, Marq91, MartinHarper,
Marudubshinki, MathMartin, Mathias Barra, Matrixnaz, MattGiuca, MatthewIreland, Mav, Maxim Razin, Mdebets, Michael Hardy, Michael Slone, MichaelBillington, Miserlou, Miym, Mo ainm,
Morton Shumway, Multipundit, Mwaisberg, Neilc, NekoDaemon, Neocapitalist, Nihiltres, Ninly, Nk, Ocolon, Oliver Pereira, OrgasGirl, [Link], Pcap, Pde, Pgr94, Philip Trueman, Pierre
de Lyon, Pmt6sbc, Prometheus00, Psychonaut, Qaem, Quest for Truth, RP88, Rapsar, Rcaetano, Rich Farmbrough, Rjwilmsi, Roadrunner, RobinK, Robma, Ross Fraser, Ruud Koot, S Chapin,
Salvar, Sam Douglas, Sam Staton, Sampletalk, Schneelocke, SeeNoEvil, Sep102, Serketan, Shreevatsa, Simetrical, SimonP, Skeptical scientist, Skomorokh, Smimram, Smyth, Softtest123,
Soler97, Spellchecker, StN, Sunrise, Tabletop, Tagib, Tassedethe, TedColes, Tesi1700, Tigga, Timeroot, Timwi, Trovatore, Tygrrr, Wavelength, Widr, Wragge, Wvbailey, Xamuel, Yuriz,
Zemoxian, Zundark, ﺳﻌﯽ, 143 anonymous edits
Theoretical computer science Source: [Link] Contributors: Arapajoe, Arbor, Arindamp, Balamurugan Kanakaraj, Ben1220, Brianbjparker,
Bsod2, Chricho, Christian75, Cic, Cogiati, Computhematics, David Eppstein, [Link], Dv82matt, EoGuy, Fortnow, GPhilip, GeorgeLouis, Giftlite, Gregbard, HRV, Haon, Hermel, Ian
Rastall, Ideogram, Impaciente, Intgr, Irwangatot, Ivan Štambuk, JLaTondre, Jaime v torres heredia, Jeff Erickson, Jimmaths, [Link], Kilva, Lmatt, Mahanga, Maurice Carbonaro,
[Link], Mejoribus, Merzul, Miym, Mrseacow, Neutral current, OrangeDog, Palaeovia, Papppfaffe, [Link], Pcap, Powo, Prari, Protez, RekishiEJ, Renku, Robertekraut,
RobinK, Rodrigo Folha, Ruud Koot, SLi, Salt Yeung, SamuelRiv, Sarimurat, Sbshah25, SchreyP, SpyMagician, Squids and Chips, Stan Shebs, Surlyduff50, Thore Husfeldt, Tobias Bergemann,
Zedoul, Zhoadon, Лев Дубовой, 82 anonymous edits
Image Sources, Licenses and Contributors 66
License
Creative Commons Attribution-Share Alike 3.0
//[Link]/licenses/by-sa/3.0/