  Richard Feynman's observation that quantum mechanical effects could not be
simulated efficiently on a computer led to speculation that computation in
general could be done more efficiently if it used quantum effects. This
speculation appeared justified when Peter Shor described a polynomial time
quantum algorithm for factoring integers.
  In quantum systems, the computational space increases exponentially with the
size of the system which enables exponential parallelism. This parallelism
could lead to exponentially faster quantum algorithms than possible
classically. The catch is that accessing the results, which requires
measurement, proves tricky and requires new non-traditional programming
techniques.
  The aim of this paper is to guide computer scientists and other
non-physicists through the conceptual and notational barriers that separate
quantum computing from conventional computing. We introduce basic principles of
quantum mechanics to explain where the power of quantum computers comes from
and why it is difficult to harness. We describe quantum cryptography,
teleportation, and dense coding. Various approaches to harnessing the power of
quantum parallelism are explained, including Shor's algorithm, Grover's
algorithm, and Hogg's algorithms. We conclude with a discussion of quantum
error correction.
