Квантовые алгоритмы — различия между версиями
Строка 6: | Строка 6: | ||
=== Постановка задачи === | === Постановка задачи === | ||
{{Задача | {{Задача | ||
− | |definition=Пусть имеется функция <tex> f: A \rightarrow B </tex>, такая, что <tex>f(x)=xu\ | + | |definition=Пусть имеется функция <tex> f: A \rightarrow B </tex>, такая, что <tex>f(x)=xu\pmod2</tex> с неизвестным <tex>u</tex>. Найти <tex>u</tex> за минимальное количество обращений к функции <tex>f</tex>. |
}} | }} | ||
'''Пример:''' | '''Пример:''' | ||
− | [[Файл:Quantumalgorithm.Paritycheck.png|470px|thumb|right|В виде круга изображён | + | [[Файл:Quantumalgorithm.Paritycheck.png|470px|thumb|right|В виде круга изображён Hadamard gate.]] |
{| style="background-color:#CCC;margin:0.5px" | {| style="background-color:#CCC;margin:0.5px" | ||
!style="background-color:#EEE"| <tex>x</tex> | !style="background-color:#EEE"| <tex>x</tex> | ||
Строка 26: | Строка 26: | ||
|style="background-color:#FFF;padding:2px 10px"| '''0''' | |style="background-color:#FFF;padding:2px 10px"| '''0''' | ||
|style="background-color:#FFF;padding:2px 10px"| '''1''' | |style="background-color:#FFF;padding:2px 10px"| '''1''' | ||
+ | |style="background-color:#FFF;padding:2px 10px"| '''0''' | ||
|style="background-color:#FFF;padding:2px 10px"| '''1''' | |style="background-color:#FFF;padding:2px 10px"| '''1''' | ||
|style="background-color:#FFF;padding:2px 10px"| '''0''' | |style="background-color:#FFF;padding:2px 10px"| '''0''' | ||
|style="background-color:#FFF;padding:2px 10px"| '''1''' | |style="background-color:#FFF;padding:2px 10px"| '''1''' | ||
− | |||
|}<tex>u = 101</tex> | |}<tex>u = 101</tex> | ||
=== Реализация === | === Реализация === | ||
− | Для начала инициализируем начальные <tex>n</tex> кубитов состоянием ноль. Проводим их всех через | + | Для начала инициализируем начальные <tex>n</tex> кубитов состоянием ноль. Проводим их всех через гейт Адамара (англ. ''Hadamard gate'')<ref>[https://en.wikipedia.org/wiki/Hadamard_transform#Quantum_computing_applications Wikipedia {{---}} Hadamard gate]</ref> и получаем все возможные суперпозиции. Суперпозиции передаём в "черный ящик", который реализован в виде вентиля <tex>U_f</tex>. Сам результат опять пропускаем через гейт Адамара. В конце измеряем результат, который будет являться искомой <tex>u</tex>. |
В качестве бита, который будет содержать ответ, будет использоваться суперпозиция: | В качестве бита, который будет содержать ответ, будет использоваться суперпозиция: | ||
Строка 49: | Строка 49: | ||
|definition=Пусть имеется функция <tex> f: A \rightarrow B </tex>, такая, что <tex>f(x+S)=f(x)</tex> с неизвестным <tex>S</tex>. Найти <tex>S</tex> за минимальное количество обращений к функции <tex>f</tex>. | |definition=Пусть имеется функция <tex> f: A \rightarrow B </tex>, такая, что <tex>f(x+S)=f(x)</tex> с неизвестным <tex>S</tex>. Найти <tex>S</tex> за минимальное количество обращений к функции <tex>f</tex>. | ||
}} | }} | ||
− | [[Файл:Quantumalgorithm.Simonalgorithm.png|470px|thumb|right|В виде круга изображён | + | [[Файл:Quantumalgorithm.Simonalgorithm.png|470px|thumb|right|В виде круга изображён Hadamard gate.]] |
'''Пример:''' | '''Пример:''' | ||
{| style="background-color:#CCC;margin:0.5px" | {| style="background-color:#CCC;margin:0.5px" | ||
Строка 98: | Строка 98: | ||
=== Постановка задачи === | === Постановка задачи === | ||
{{Задача | {{Задача | ||
− | |definition=Пусть имеется функция <tex> f: \{0,\ldots,N-1\} \rightarrow S </tex>, такая, что <tex>f(x+r\ | + | |definition=Пусть имеется функция <tex> f: \{0,\ldots,N-1\} \rightarrow S </tex>, такая, что <tex>f(x+r\pmod N)=f(x)</tex> с неизвестным периодом <tex>r</tex>. Найти <tex>r</tex> за минимальное количество обращений к функции <tex>f</tex>. |
}} | }} | ||
Строка 114: | Строка 114: | ||
\end{vmatrix}</tex>, где <tex>ω = e^{\dfrac{2πi}{N}} </tex> | \end{vmatrix}</tex>, где <tex>ω = e^{\dfrac{2πi}{N}} </tex> | ||
− | Так аналогично предыдущему алгоритму, но | + | Так аналогично предыдущему алгоритму, но используя '''''QFT''''', получаем результат вида <tex>m\dfrac{N}{r}</tex>, где <tex>m</tex> - какое-то натуральное число, возникающее в ходе алгоритма, мешающее нам сразу найти период, <tex>N</tex> - модуль, <tex>r</tex> - период. Выполнив данный алгоритм <tex>n</tex> раз, найдём наибольший общий делитель<ref>[https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B8%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%B9_%D0%BE%D0%B1%D1%89%D0%B8%D0%B9_%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C Википедия {{---}} Наибольший общий делитель]</ref> от <tex>n</tex> полученных чисел, который, с некоторой вероятностью, будет искомым периодом <tex>r</tex>, при этом вероятность ошибки будет экспоненциально падать с каждой попыткой. |
''Примечание:'' Алгоритм нахождения периода используется в алгоритме Шора<ref>[https://en.wikipedia.org/wiki/Shor%27s_algorithm Wikipedia {{---}} Shor's algorithm]</ref>, который позволяет решать задачу [[Разложение на множители (факторизация)|факторизации числа]]. | ''Примечание:'' Алгоритм нахождения периода используется в алгоритме Шора<ref>[https://en.wikipedia.org/wiki/Shor%27s_algorithm Wikipedia {{---}} Shor's algorithm]</ref>, который позволяет решать задачу [[Разложение на множители (факторизация)|факторизации числа]]. |
Версия 23:11, 1 ноября 2018
Определение: |
Квантовый алгоритм (англ. quantum algorithm) представляет собой классический алгоритм, который задает последовательность унитарных операций (гейтов, или вентилей) с указанием, над какими именно кубитами[1] их надо совершать. |
Содержание
Алгоритм проверки чётности
Постановка задачи
Задача: |
Пусть имеется функция | , такая, что с неизвестным . Найти за минимальное количество обращений к функции .
Пример:
0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
Реализация
Для начала инициализируем начальные [2] и получаем все возможные суперпозиции. Суперпозиции передаём в "черный ящик", который реализован в виде вентиля . Сам результат опять пропускаем через гейт Адамара. В конце измеряем результат, который будет являться искомой .
кубитов состоянием ноль. Проводим их всех через гейт Адамара (англ. Hadamard gate)В качестве бита, который будет содержать ответ, будет использоваться суперпозиция:
Выразим неизвестную:
Сложность
Классический алгоритм:
.Квантовый алгоритм: [3], а конкретно параллелизму[4].
. Такая сложность достигается благодаря квантовым свойстваАлгоритм Саймона
Постановка задачи
Задача: |
Пусть имеется функция | , такая, что с неизвестным . Найти за минимальное количество обращений к функции .
Пример:
000 | 010 | 001 | 100 | 010 | 000 | 100 | 001 |
Реализация
Задача похожа на задачу нахождения коллизии, так как необходимо найти два значения, при которых их выходные значения будет одинаковыми, затем вычислить между ними разницу, которая и будет ответом задачи.
Аналогично предыдущему алгоритму вычисляем результат, который будет являться некоторой строкой, дающей при скалярном умножении на искомую
ноль. После итерации алгоритма получим систему из линейных уравнений; решив эту систему уравнений, найдём искомую .
Особенности алгоритма:
- для решения СЛАУ [5] необходим препроцессинг на классическом компьютере;
- алгоритм может допускать ошибку(возможно, какие-то уравнения не будут линейно независимыми и система не будет иметь решений) с вероятностью при одном цикле прохода алгоритма. Этого можно избежать, если прогнать алгоритм несколько раз, так для раз, вероятность будет равна: . Например, при вероятность будет .
Сложность
Классический алгоритм:
.Квантовый алгоритм:
.Алгоритм нахождения периода
Постановка задачи
Задача: |
Пусть имеется функция | , такая, что с неизвестным периодом . Найти за минимальное количество обращений к функции .
Перефразируем задачу: у нас есть периодичная функция, для которой необходимо найти её период, путём нахождения коллизии.
Реализация
Чтобы решить задачу, воспользуемся квантовым преобразованием Фурье[6](англ. Quantum Fourier transform; далее QFT). QFT — гейт, который реализует матрицу дискретного преобразования Фурье[7] над квантовым состоянием. Идея в следующем: есть периодическая функция с периодом , после QFT, получим новую периодическую функцию с периодом , где — модуль, с которым мы работаем.
, где
Так аналогично предыдущему алгоритму, но используя QFT, получаем результат вида [8] от полученных чисел, который, с некоторой вероятностью, будет искомым периодом , при этом вероятность ошибки будет экспоненциально падать с каждой попыткой.
, где - какое-то натуральное число, возникающее в ходе алгоритма, мешающее нам сразу найти период, - модуль, - период. Выполнив данный алгоритм раз, найдём наибольший общий делительПримечание: Алгоритм нахождения периода используется в алгоритме Шора[9], который позволяет решать задачу факторизации числа.
Сложность
Классический алгоритм:
.Квантовый алгоритм:
.См.также
- Квантовые гейты
- Алгоритм Гровера
- Алгоритм Шора
- Веб-приложение, использующее WebGL, чтобы имитировать до 22 кубитов на GPU
- Веб-приложение, для написания и визуализации квантовых алгоритмов
- Языки программирования для квантового компьютера
Примечания
- ↑ Википедия — Кубит
- ↑ Wikipedia — Hadamard gate
- ↑ Википедия — Квантовый компьютер
- ↑ Википедия — Квантовый параллелизм
- ↑ Википедия — Система линейных алгебраических уравнений
- ↑ Wikipedia — Quantum Fourier transform
- ↑ Википедия — Дискретное преобразование Фурье
- ↑ Википедия — Наибольший общий делитель
- ↑ Wikipedia — Shor's algorithm