Быстрые квантовые алгоритмы
Экспоненциально точное определение собственных чисел.
Для увеличения точности мы будем использовать, наряду с , операторы
для всех
. Числа мы можем быстро возводить в степень, а операторы, вообще говоря, — нет. Но оператор умножения на число
обладает следующим замечательным свойством:
![(U_a)^p = U_{a^p\bmod q}.](/sites/default/files/tex_cache/0058bba71454d665a3c2ce436961ed3d.png)
![\Lambda((U_a)^{2^j})=\Lambda(U_b)](/sites/default/files/tex_cache/d16935a890f0d2ea85aca50e2a9a8e68.png)
![b\equiv a^{2^j}\pmod q](/sites/default/files/tex_cache/fbd065e54a63c786e40508c539457060.png)
![b](/sites/default/files/tex_cache/92eb5ffee6ae2fec3ad71c777531578f.png)
Вход: и
- Вычисление степеней
(
) по модулю
(классическое).
- Cоздание
штук квантовых регистров, содержащих базисное состояние
.
- Вычисление наибольшего общего знаменателя (классическое).
Ответ: (с вероятностью ошибки
, где
)
Вернемся к схеме упоминаемой ранее. Мы находили собственное число для некоторого собственного вектора
. Этот же вектор останется собственным и для любой степени оператора
, поэтому можно на одном и том же квантовом регистре искать собственное число для
, оно равно
; для
оно равно
;...
Другими словами, мы можем с точностью определить значения
по модулю 1. Но это позволяет определить
с точностью
за полиномиальное время
.
Идея доказательства. Множество возможных значений удобно представлять в виде окружности единичной длины. Зная
с точностью
, мы выделяем дугу в
от всей окружности. Знание
с точностью
позволяет выделить две дуги длиной
каждая, причем только одна из них имеет непустое пересечение с предыдущей дугой.
Важные замечания.
- Существенно, что вектор
не портится во время вычислений.
- Все вычисление в целом зависит от параметров
и
. Cуммарная вероятность ошибки не превышает
, где
. Если требуется получить ответ с вероятностью ошибки
, следует положить
,
, где
— некоторая константа. При этом получается квантовая схема размера
.