Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Квантовые вычисления. Теория и практика. Учебник

.pdf
Скачиваний:
3
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
Глава 5. Алгоритм Саймона
f(x) = f(x)), так что действия с XOR в данном случае можно и не писать.
Далее, после повторного применения двухкубитного опе­ратора Адамара к верхним кубитам, система будет находить­ся в таком состоянии:
1
00 01 10 11 (00)

4
00 01 10 11 (01)f 

00 01 10 11 (10)f 

00 01 10 11 (11)f .

Так как в оракуле содержится информация о том, что s = 01, функция f(x) будет давать одинаковые ответы для входящих двоичных строк 00 и 01, а также для 10 и 11. Зна­чит, можно заменить f(01) на f(00), а f(11) – на f(10):
1
00 01 10 11 (00)

4
00 01 10 11 (00)f 

f
f
00 01 10 11 (10)f 

00 01 10 11 (10)f

1
00 10 (00) 00 10 (10)


2
После этого можно перегруппировать элементы в выра­жении и получить следующее:
1
00 (00) (10) 10 (00) (10)
ff ff .


2
Здесь видно, что при измерении два верхних кубита мо­гут дать только два результата: 00 или 10. Отсюда можно
ff .
111
Глава 5. Алгоритм Саймона
легко найти s, зная следующий факт: в алгоритме Саймона в результате измерения верхних (входящих) кубитов в ре­зультате получаются только те двоичные строки, которые при скалярном умножении на неизвестную строку s дают ре­зультат 0.
Разберемся со скалярным произведением, применяемым в алгоритме Саймона. Будем обозначать его точкой, а обыч­ное умножение – знаком «» и на примере покажем, что происходит при таком измерении. В качестве демонстрации посчитаем скалярное произведение двух строк, не относя­щихся к нашему примеру: 110 и 101. Для такого действия мы должны поразрядно умножить эти две двоичные строки, а затем посчитать исключающее ИЛИ для всех результатов такого умножения:
110 101 (1 1) (1 0) (0 1) 1 0 0 1.
Скалярное произведение двух двоичных строк всегда бу­дет равно 0 либо 1. Некоторая строка будет присутствовать в возможных значениях, получаемых после измерения верх­них кубитов, только в том случае, если ее скалярное произ­ведение на строку s равно нулю. Алгоритм Саймона нужно запускать несколько раз, пока не будут получены n – 1 раз­личных значений двоичной строки, где n – число входящих кубитов. При этом строка, состоящая из нулей, не в счет, так как ее скалярное произведение на любую возможную строку s всегда равно нулю.
Итак, воспользуемся этим знанием и вернемся к примеру с двухкубитными входными значениями. Из расчетов, при­веденных выше, видно, что при скрытом значении s, равном 01, алгоритм может выдать при измерении только два значе­ния: 00 и 10. К примеру, мы запустили алгоритм Саймона и получили при измерении случайное значение 00. По приве­денным до этого причинам это значение не дает информации о том, какой может быть строка s. Запустим алгоритм еще
112
Глава 5. Алгоритм Саймона
раз. Допустим, при этом будет получено значение 10. Тогда мы можем легко найти s, решив уравнение
10 0s .
Перепишем уравнение, обозначив элементы строки s как
и s2:
s
1
(1 ) (0 ) 0ss .
12
Правая скобка при любом s
равна нулю. Для того чтобы
2
общий результат был равен 0, левая скобка также должна обнулиться. Это возможно только при s становится ясно, что s
не может равняться нулю, так как
2
, равном 0. Тогда
1
строка s не может состоять исключительно из нулей. Сле­довательно, s
= 1 и s = 01. Такие расчеты можно произве-
2
сти для строки s большей длительности, решив n – 1 урав­нений. Почему число уравнений не равно n, как в обычной системе уравнений с n неизвестными? Это обусловлено тем, что нам заранее известно, что s 0…0. Также нам известно, что мы имеем дело со строками, состоящими только из ну­лей и единиц.
Это означает, что при максимальном везении (когда в ре­зультате измерения все время будут получаться уникальные строки) достаточно запустить квантовый алгоритм n – 1 чис­ло раз. Однако, если некоторые строки при измерении бу­дут повторяться, число запусков увеличится. Но есть боль­шая вероятность того, что это число будет не очень сильно превышать n. Вкупе с тем фактом, что сложность решения системы уравнений является полиномиальной, получаем значительное ускорение расчетов по сравнению с экспонен­циально сложным классическим решением задачи Саймона.
Как вы увидели, алгоритм Саймона помимо квантового алгоритма включает классическую часть, связанную с по­иском числа s на основе полученных при запуске квантово­го алгоритма битовых строк. Такой подход, когда наиболее
113
Глава 5. Алгоритм Саймона
сложная часть задачи выполняется на квантовом компьюте­ре, а элементарные расчеты производятся на классическом, распространен в квантовых вычислениях, так как обеспечи­вает максимально эффективное использование преимуществ квантового компьютера. При этом классический компьютер выполняет ту часть работы, для которой квантовый компью­тер использовать нецелесообразно.
Контрольные вопросы
1. Что будет получено в результате работы алгоритма
Саймона?
2. Почему скрытая строка не может состоять только
из нулей?
3. Какое количество шагов требуется классическому компьютеру для решения задачи Саймона в лучшем и худ­шем случаях? За счет чего квантовый компьютер решает эту задачу эффективнее?
4. Какое минимальное число раз требуется запустить квантовую часть алгоритма Саймона?
5. Какие действия выполняют квантовый и классиче­ский компьютеры при работе алгоритма Саймона?
ГЛАВА 6. АЛГОРИТМ БЕРНШТЕЙНА –
ВАЗИРАНИ
В алгоритме Бернштейна – Вазирани заложена простая идея: оракул реализует функцию f(x), которая принимает на вход двоичную строку и выдает результат 0 или 1 в зави­симости от того, каким будет результат скалярного произве­дения входящей строки (назовем ее x) и некоторого скрытого значения a. Под скалярным произведением мы будем пони­мать то же самое, что и в алгоритме Саймона (в его класси­ческой части), обозначая скалярное произведение точкой, а обычное произведение – крестиком:
( ) ( ) ( ) ... ( )
fx a x a x a x .
На вход оракула подается n кубитов регистра x, которые представляют разряды входной строки, а также есть еще один кубит (обозначим его как y), который на выходе из ора­кула будет находиться в состоянии y f(x):
11 22
n
xx
U
y
f
yf (x)
nn
При нахождении числа a с помощью классических вы­числений сложность алгоритма составляет O(n). При таком способе решения нужно подавать на вход функции f(x) сте­пени двойки, получая на выходе разряд числа a, соответ­ствующий разряду x
, содержащему единицу. Например,
i
если скрытая строка a равна 010, то процесс ее поразрядного поиска выглядит так:
(100) 010 100 (0 1) (1 0) (0 0) 0af ax;
1
(010) 010 010 (0 0) (1 1) (0 0) 1af ax
2
(001) 010 001 (0 0) (1 0) (0 1) 0af ax   
3
;
.
115
Глава 6. Алгоритм Бернштейна – Вазирани
Мы действительно получили значение a = 010, но при этом совершили число действий, равное трем – по числу разрядов в искомом скрытом значении a. Алгоритм Берн­штейна – Вазирани позволяет найти число a за O(1), то есть за один запуск оракула. Достигается это за счет того, что на его вход подается суперпозиция всех возможных состоя­ний входного регистра. Схема алгоритма реализуется таким образом:
|0²
|0²
n
X
H
H
n
U
f
H
n
Эта схема выглядит как алгоритм Дойча – Йожи, но, как можно догадаться, она отличается внутренним устройством оракула U
.
f
123
|0²
|0²
H
H
H
U
f
H
|0²
HX
Рассмотрим пример работы такой схемы для n = 2 и a = 10. Перед началом действия оракула система находится в состо­янии
1
 
1

22
010101

22
00 01 10 11 0 1

.
После действия оракула (временная точка 2) система переходит в такое состояние, при котором верхние кубиты
116
Глава 6. Алгоритм Бернштейна – Вазирани
остаются без изменений, а на нижнем кубите образуется су­перпозиция состояний, соответствующих результатам рабо­ты оракула для каждого базисного состояния кубитов вход­ного регистра:
1
     

22

22

22
1
 

22

22
000 001 010 011 101 100 111 110

22
1
00 0 1 01 0 1 10 1 0 11 1 0


1
00 0 1 01 0 1 10 0 1 11 0 1


00 0 (10 00) 1 (10 00)
22
1
1
1

01 0 (10 01) 1 (10 01)

10 0 (10 10) 1 (10 10)

11 0 (10 11) 1 (10 11)

1

Общий вид состояния системы после действия оракула можно представить в таком виде:
00 01 10 11 0 1

22
1
.
 .
010101

22
n
21
1
n
1
x
2
2
fx
()
(1) 0 1
0
x

117
Глава 6. Алгоритм Бернштейна – Вазирани
Далее во временной точке 3 после применения операто­ров Адамара к входному регистру получаем следующее со­стояние:
1
  .
Здесь мы видим, что состояние верхних кубитов после измерения будет равно скрытой строке a, которую мы и на­ходили с помощью данного алгоритма. Для любого значения скрытой строки расчеты будет аналогичными.
10 0 1

2
Контрольные вопросы
1. Какие действия выполняет оракул в задаче, решаемой
алгоритмом Бернштейна – Вазирани?
2. Опишите процесс поиска скрытой строки на классиче-
ском компьютере. Какую сложность имеет данный поиск?
3. Какова сложность алгоритма Бернштейна – Вазирани? За счет чего достигается преимущество перед алгоритмом, используемым классическим компьютером?
4. На какой алгоритм похож алгоритм Бернштейна – Ва­зирани? В чем отличие от данного алгоритма?
5. Что будет получено в результате измерения кубитов по­сле того, как отработает алгоритм Бернштейна – Вазирани?
ГЛАВА 7. АЛГОРИТМ ГРОВЕРА
Предположим, что нам требуется найти некоторую запись в таблице в базе данных. Записи в данной таблице не отсорти­рованы, так что применить алгоритмы наподобие бинарного поиска не получится. Если мы говорим о классических вычис­лениях, то здесь единственный способ найти искомую запись – перебирать все записи подряд, пока не попадется нужная.
Сложность такого перебора равна O(N), где N – количе­ство записей в таблице. В среднем потребуется просмотреть половину таблицы, так как искомая запись может попасться раньше. Здесь мы пока говорим о поиске единственной за­писи, но возможны также и случаи, когда нужно найти не­сколько записей.
Мы должны определить id (идентификатор) записи, то есть некоторое уникальное число, с которым она соотнесена. Этот id мы и будем искать среди других неотсортированных идентификаторов. Квантовый алгоритм Гровера поможет найти эту запись гораздо быстрее, так как его временная сложность равна O( жится в таблице, тем более выгодно будет применить алго­ритм Гровера вместо классического поиска, так как ускоре­ние будет квадратичным.
Так как мы кодируем идентификаторы с помощью базис­ных состояний системы кубитов, то при наличии n кубитов мы можем закодировать N = 2 имея систему из 12 кубитов, можно получить 4096 идентифи­каторов, это будут числа от 0 до 4095 включительно.
Лов Кумар Гровер, автор этого алгоритма, придумал его в 1996 году. Идея алгоритма состоит в том, что оракул нахо­дит нужную запись и помечает ее идентификатор, умножая соответствующее ему базовое состояние на –1. Таким об­разом, в суперпозиции базисных состояний, каждое из ко­торых соответствует идентификатору записи в таблице, по-
). Чем большее число записей содер-
n
идентификаторов. Например,
119
Глава 7. Алгоритм Гровера
является одно базисное состояние, которое имеет знак, противоположный всем остальным идентификаторам. Алго­ритму Гровера остается лишь сделать так, чтобы при измере­нии был получен нужный идентификатор. После этого зада­ча считается выполненной.
Внутри алгоритма Гровера есть часть, которую нужно за­пустить определенное число раз, так как алгоритм является итерационным. Для того чтобы знать, какое число итераций нужно запустить, мы должны предварительно посчитать это число до запуска алгоритма Гровера.
Простейший пример, на котором можно начать рассма­тривать работу алгоритма Гровера, – система их двух кубитов. С помощью двух кубитов можно закодировать четыре иденти­фикатора: 00, 01, 10, 11. В обычных условиях заранее неиз­вестно, который из них является соответствующим искомой записи, но для разбора алгоритма представим, что мы ищем запись с идентификатором 11. Мы не будем разбирать работу оракула, который определяет, какая запись подходит под тре­буемые условия, так как это выходит за рамки собственно алго­ритма Гровера (к тому же задача определения подходящей за­писи может быть в каждом случае индивидуальной и при этом решаться аналогично классическому варианту), и создадим максимально упрощенный оракул, который уже запрограмми­рован таким образом, что он выбирает тот идентификатор, ко­торый мы должны определить, демонстрируя работу алгорит­ма, и помечает этот идентификатор, умножая его на –1.
Используя суперпозицию, можно добиться того, что все идентификаторы записей будут одновременно находиться в квантовой схеме. Но обнаружить, какой из них помечен минусом, сразу не удастся, так как при измерении будет по­лучено любое из этих четырех состояний с одинаковой веро­ятностью, равной 0,25. Причем даже в том случае, когда мы получим после измерения искомое состояние 11, для нас ни­коим образом не представится возможность определить, что
120