Квантовые алгоритмы

Материал из Викиконспекты
Перейти к: навигация, поиск
Определение:
Квантовый алгоритм (англ. quantum algorithm) представляет собой классический алгоритм, который задает последовательность унитарных операций (гейтов, или вентилей) с указанием, над какими именно кубитами[1] их надо совершать.


Алгоритм проверки чётности

Постановка задачи

Задача:
Пусть имеется функция f:AB, такая, что f(x)=xu(mod2) с неизвестным u. Найти u за минимальное количество обращений к функции f.

Пример:

В виде круга изображён Hadamard gate.
x 000 001 010 011 100 101 110 111
f(x) 0 1 0 1 0 1 0 1
u=101

Реализация

Для начала инициализируем начальные n кубитов состоянием ноль. Проводим их всех через гейт Адамара (англ. Hadamard gate)[2] и получаем все возможные суперпозиции. Суперпозиции передаём в "черный ящик", который реализован в виде вентиля Uf. Сам результат опять пропускаем через гейт Адамара. В конце измеряем результат, который будет являться искомой u.

В качестве бита, который будет содержать ответ, будет использоваться суперпозиция: =12(01)

Выразим неизвестную: 00012n/2x{0,1}nx12n/2x{0,1}n(1)xux→∣u

Сложность

Классический алгоритм: O(n).

Квантовый алгоритм: O(1). Такая сложность достигается благодаря квантовым свойства[3], а конкретно параллелизму[4].

Алгоритм Саймона

Постановка задачи

Задача:
Пусть имеется функция f:AB, такая, что f(x+S)=f(x) с неизвестным S. Найти S за минимальное количество обращений к функции f.
В виде круга изображён Hadamard gate.

Пример:

x 000 001 010 011 100 101 110 111
f(x) 000 010 001 100 010 000 100 001
S=101

Реализация

Задача похожа на задачу нахождения коллизии, так как необходимо найти два значения, при которых их выходные значения будет одинаковыми, затем вычислить между ними разницу, которая и будет ответом задачи.

Аналогично предыдущему алгоритму вычисляем результат, который будет являться некоторой строкой, дающей при скалярном умножении на искомую S ноль. После n1 итерации алгоритма получим систему из n1 линейных уравнений; решив эту систему уравнений, найдём искомую S.

{y11S1+y11S2++y1nSn=0,y21S1+y22S2++y2nSn=0,yn11S1+yn12S2++yn1nSn=0.

Особенности алгоритма:

  • для решения СЛАУ [5] необходим препроцессинг на классическом компьютере;
  • алгоритм может допускать ошибку(возможно, какие-то уравнения не будут линейно независимыми и система не будет иметь решений) с вероятностью ε<14 при одном цикле прохода алгоритма. Этого можно избежать, если прогнать алгоритм несколько раз, так для 4m раз, вероятность будет равна: ε4m<εm. Например, при m=10 вероятность будет ε40<120000.

Сложность

Классический алгоритм: O(2n/2).

Квантовый алгоритм: O(n).

Алгоритм нахождения периода

Постановка задачи

Задача:
Пусть имеется функция f:{0,,N1}S, такая, что f(x+r(modN))=f(x) с неизвестным периодом r. Найти r за минимальное количество обращений к функции f.


Перефразируем задачу: у нас есть периодичная функция, для которой необходимо найти её период, путём нахождения коллизии.

Quantumalgorithm.QFT.png

Реализация

r и N/r — периоды функций

Чтобы решить задачу, воспользуемся квантовым преобразованием Фурье[6](англ. Quantum Fourier transform; далее QFT). QFT — гейт, который реализует матрицу дискретного преобразования Фурье[7] над квантовым состоянием. Идея в следующем: есть периодическая функция с периодом r, после QFT, получим новую периодическую функцию с периодом N/r, где N — модуль, с которым мы работаем.

QFTN=1N|11111ω2w3ωN11ω3ω6ω2(N1)1ωN1ω2(N1)ω(N1)(N1)|, где ω=e2πiN

Так аналогично предыдущему алгоритму, но используя QFT, получаем результат вида mNr, где m - какое-то натуральное число, возникающее в ходе алгоритма, мешающее нам сразу найти период, N - модуль, r - период. Выполнив данный алгоритм n раз, найдём наибольший общий делитель[8] от n полученных чисел, который, с некоторой вероятностью, будет искомым периодом r, при этом вероятность ошибки будет экспоненциально падать с каждой попыткой.

Примечание: Алгоритм нахождения периода используется в алгоритме Шора[9], который позволяет решать задачу факторизации числа.

Сложность

Классический алгоритм: O(r).

Квантовый алгоритм: O(logN).

См.также

Примечания

Источники информации