Since all unitary transformations are linear operators, any operation performed on a quantum state is simultaneous applied to all its basevectors, thus
This unique feature of quantum computers is called quantum parallelism.
Since the number of basevectors exponentially increases with the number of qubits, it is possible to solve certain problems (e.g. prime factorisation of large numbers, see section 4) in polynomial time (i.e. the number of elementary operations is a polynomial in the length of the input) where a classical computer would need an exponential number of steps.
One obvious problem of quantum computing is its restriction to
reversible computations.
Consider a simple arithmetical operation like integer division by 2
(
for even
and
for
odd
).
Clearly, this operation is non-reversible since
.
However, if we use a second register with the initial value ,
then we can define an operator
witch matches the condition
or
respectively.
The behaviour of
is undefined and can be set
arbitrarily under the condition that
is unitary1.
Generally it can be said that for any function
(or equivalently
) there exists
a unitary operator
(thus
working on two
qubits registers) with
.
While keeping a copy of the argument will allow us to compute non reversible functions this also forces us to provide extra storage for intermediate results. In longer calculations this would leave us with a steadily increasing amount of ``junk'' bits which are of no concern for the final result.
A simple and elegant solution of this problem was proposed by Bennet
[3,4].
If a composition of two non-reversible functions is
to be computed, the scratch space for the intermediate result
can be ``recycled'' using the following procedure:
The last step is merely the inversion of the first step and uncomputes the intermediate result. The second register can then be reused for further computations.
If the computation of a function fills a scratch register with the
junk bits
(i.e.
), a
similar procedure can free the register again:
Again, the last step is the inversion of the first.
The intermediate step is a FANOUT operation which copies the
function result into an additional empty (i.e. in substate )
register.