Квантовые алгоритмы — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Алгоритм нахождения периода)
м (rollbackEdits.php mass rollback)
 
(не показаны 3 промежуточные версии 2 участников)
Строка 128: Строка 128:
 
[[Файл:Quantum algorithm. QFT. Graph3.jpg|270px|thumb|right|]]Поэтому вместо этого мы применим <tex>QFT</tex> и будем полагаться на его свойства, чтобы получить информацию, которая нам нужна. Идея в следующем: есть периодическая функция с периодом <tex>r</tex>, после применения <tex>QFT</tex>, получим новую периодическую функцию с периодом <tex>N/r</tex>, где <tex>N</tex> {{---}} модуль, с которым мы работаем:
 
[[Файл:Quantum algorithm. QFT. Graph3.jpg|270px|thumb|right|]]Поэтому вместо этого мы применим <tex>QFT</tex> и будем полагаться на его свойства, чтобы получить информацию, которая нам нужна. Идея в следующем: есть периодическая функция с периодом <tex>r</tex>, после применения <tex>QFT</tex>, получим новую периодическую функцию с периодом <tex>N/r</tex>, где <tex>N</tex> {{---}} модуль, с которым мы работаем:
  
<tex>\sqrt{\dfrac{r}{N}} \sum\limits_{i=0}^{N/r-1} |ir+x_0 \rangle \xrightarrow{QFT_N} \dfrac{1}{\sqrt{r}} \sum\limits_{i=0}^{r-1} |i\dfrac{N}{r} \rangle φ_i</tex>, где <tex>φ_i</tex> - некоторый неважный период, возникающий из линейного сдвига <tex>x_0</tex>.
+
<tex>\sqrt{\dfrac{r}{N}} \sum\limits_{i=0}^{N/r-1} |ir+x_0 \rangle \xrightarrow{QFT_N} \dfrac{1}{\sqrt{r}} \sum\limits_{i=0}^{r-1} |i\dfrac{N}{r} \rangle φ_i</tex>, где <tex>φ_i</tex> {{---}} некоторый неважный период, возникающий из линейного сдвига <tex>x_0</tex>.
  
 
Так мы уже можем измерить и извлечь <tex>m\dfrac{N}{r}</tex>, для некоторого целого <tex>m</tex>.
 
Так мы уже можем измерить и извлечь <tex>m\dfrac{N}{r}</tex>, для некоторого целого <tex>m</tex>.
Строка 162: Строка 162:
  
 
[[Категория: Дискретная математика и алгоритмы]]
 
[[Категория: Дискретная математика и алгоритмы]]
 +
 +
[[Категория: Схемы из функциональных элементов]]

Текущая версия на 19:32, 4 сентября 2022

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


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

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

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

Пример:

В виде круга изображён Hadamard gate.

Если

x 000 001 010 011 100 101 110 111
f(x) 0 1 0 1 1 0 1 0

то 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:{0,1}n{0,1}, такая, что f(xS)=f(x) с неизвестным S{0,1}n. Найти S за минимальное количество обращений к функции f.

Пример:

В виде круга изображён Hadamard gate.

Если

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

то S=110.

Реализация

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

Аналогично предыдущему алгоритму все возможные суперпозиции передаём в "черный ящик", полученный результат опять пропускаем через гейт Адамара. В конце измеряем полученные значения, которые будут являться некоторой строкой y, дающей ноль при скалярном умножении на искомую S ((y1S1)+(y2S2)++(ynSn)). После n1 итерации алгоритма получим систему из n1 линейных уравнений; решив эту систему уравнений, найдём искомую S:

{y1s=0,y2s=0,yn1s=0,

где yis=yi1s1+yi2s2++yinsn, и yij,sj{0,1}, при i=1,,n1 и j=1,,n.

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

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

Реализация

Чтобы решить задачу, воспользуемся квантовым преобразованием Фурье[6](далее QFT). QFT — гейт, который реализует матрицу дискретного преобразования Фурье[7] над квантовым состоянием. Для начала инициализируем начальные кубиты состоянием ноль. Проводим их всех через гейт QFT и получаем все возможные равновероятные суперпозиции всех булевых состояний N такие, что:

|0|0QFTN1NN1x=0|x|0

Суперпозиции передаём в гейт Uf, который реализует унитарное преобразование[8], которое переводит |x|0 в |x|f(x):

1NN1x=0|x|0Uf1NN1x=0|x|f(x)

Чтобы получить из этого периодическую суперпозицию, мы измеряем |f и поскольку f периодическая, её прообраз это f(x0), такой что {x0,x0+r,x0+2r,,x0+(Nr1)r)}:

1NN1x=0|x|f(x)measure|frNN/r1i=0|ir+x0|f(x0)

Теперь наш первый регистр находится в периодической суперпозиции, где период такой же, как период функции, но мы не можем сразу его просто измерить, потому что мы можем измерить другое значение |f, ведь мы получили периодическую суперпозицию, которая случайно линейно смещена и мы не получим никакой полезной информации.

Quantum algorithm. QFT. Graph3.jpg
Поэтому вместо этого мы применим QFT и будем полагаться на его свойства, чтобы получить информацию, которая нам нужна. Идея в следующем: есть периодическая функция с периодом r, после применения QFT, получим новую периодическую функцию с периодом N/r, где N — модуль, с которым мы работаем:

rNN/r1i=0|ir+x0QFTN1rr1i=0|iNrφi, где φi — некоторый неважный период, возникающий из линейного сдвига x0.

Так мы уже можем измерить и извлечь mNr, для некоторого целого m.

Теперь мы повторяем алгоритм, чтобы получить несколько различных кратных Nr. Как только у нас будет достаточно значений, мы можем вычислить их наибольший общий делитель[9], который, с некоторой вероятностью, будет искомым периодом r, при этом вероятность ошибки будет экспоненциально падать с каждой попыткой.

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

Сложность

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

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

См.также

Примечания

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