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

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

.pdf
Скачиваний:
3
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
Глава 7. Алгоритм Гровера
это именно то состояние, которое соответствует искомому идентификатору записи в таблице. На этом моменте в дело вступает, собственно, сам алгоритм Гровера, позволяющий с большой вероятностью после измерения получить именно тот идентификатор, который нам нужен.
Для того чтобы собрать квантовую схему, реализующую работу с четырьмя идентификаторами, мы будем использо­вать два кубита для записи самих идентификаторов и допол­нительно еще один кубит, который будет играть вспомога­тельную роль:
1 2 3
|0²
|0²
H
H
H
H
X
X
H
X
H
X
|0²
H
X
X
X
На данной схеме два верхних кубита содержат все суще­ствующие в таблице идентификаторы, а нижний (вспомога­тельный) кубит помогает отметить искомый идентификатор. В начале схемы верхние кубиты приводятся в состояние су­перпозиции с помощью операторов Адамара. Третий кубит сначала приводится в состояние 1, а затем также с помощью оператора Адамара переводится в состояние суперпозиции. Таким образом, во временной точке 1 получается такое со­стояние квантовой схемы:
1
 
1

22
1

00 0 1 01 0 1 10 0 1 11 0 1


22
010101

22
00 01 10 11 0 1

121
.
Глава 7. Алгоритм Гровера
Далее начинается первая часть самой первой итерации. Наступает время отметить правильный ответ, сделав соот­ветствующее состояние отличным по знаку от остальных со­стояний, составляющих суперпозицию. Это производится с помощью вентиля Тоффоли, располагающегося между вре­менными метками 1 и 2. Получаем состояние в точке 2:
1

22

00 0 1 01 0 1 10 0 1 11 0 1


1
.
Здесь роль оракула, который находит и помечает нуж­ный идентификатор, выполняет вентиль Тоффоли – доста­точно простой оператор, хотя понятно, что в реальности оракул, определяющий подходящую под некоторые требу­емые условия запись из таблицы, может (или даже скорее должен) быть гораздо сложнее. Но так как данный оракул не является ключевой частью алгоритма Гровера, то мы ставим простейший (насколько это позволяет задача) опе­ратор – в данном случае это оператор Тоффоли. Конечно, он ничего не «знает» об искомой записи, а просто ставит отметку на предварительно произвольно выбранном нами идентификаторе. В данном примере мы заранее решили, что это будет идентификатор 11. Оператор Тоффоли управ­ляет третьим кубитом, применяя к нему оператор X в том случае, когда оба верхних кубита находятся в состоянии 1. При этом на третьем кубите возникает состояние, отлича­ющееся от его предыдущего состояния наличием минуса перед скобкой, но мы видим, что этот минус можно выне­сти за скобку и отнести к состоянию |11 двух верхних ку­битов.
00 01 10 11 0 1

22
122
Глава 7. Алгоритм Гровера
Итак, метка для искомого идентификатора добавлена, и пусть в данный момент она не поможет выделить искомый идентификатор при измерении, но у нас есть вторая часть итерации, которая может усилить амплитуду, а точнее, увеличить модуль амплитуды при искомом id. Но для на­чала наглядно представим состояние кубитов, отвечающих за кодирование идентификаторов. В данном случае это бу­дут два верхних кубита. Мы представим их состояние с по­мощью единичной окружности, вертикальная ось которой показывает амплитуду искомого состояния, а горизонталь­ная ось – амплитуду состояния суперпозиции всех состоя­ний кроме искомого. Вектор c здесь соответствует такому состоянию двухкубитной системы, когда все четыре базис­ных состояния имеют одинаковую амплитуду, равную 0,5 (это соответствует состоянию кубитов во временной точке 1) (рис. 7.1).
1
a
c
b
T
01
Рис. 7.1. Начальное состояние кубитов
123
Глава 7. Алгоритм Гровера
Конечно, такой способ представления состояния систе­мы кубитов, хотя и является наглядным, тем не менее име­ет свои ограничения. В частности, на нем удобно отображать только действительные амплитуды. Также, так как мы раз­биваем базисные состояния на две условных группы: ис­комые состояния (в разбираемом примере – одно искомое состояние, но может быть и несколько) и остальные, у со­стояний внутри группы амплитуды должны быть одинако­выми. Но в данном алгоритме эти условия соблюдаются, так что такие ограничения графического отображения не будут нам мешать. Этот график не только поможет нам понять, что происходит при каждой итерации, но и даст возможность увидеть, что для успешной работы алгоритма может потре­боваться определенное количество таких итераций.
Найдем координаты вектора c. Для этого нужно иметь в виду, что, рассматривая два кубита, мы имеем четыре ба­зисных состояния, находящихся в суперпозиции. Амплиту­да каждого вектора равна 0,5. Представим вектор c как ком­бинацию векторов a и b:
1
cba
00 01 10 11 cos sin

2
   
В этих преобразованиях используется тот факт, что век­тор b, расположенный по горизонтали, представляет супер­позицию всех состояний (кроме искомого), взятых с равной амплитудой, а вектор a – само искомое состояние. Отсюда выразим синус и косинус угла , а затем найдем сам угол:
124

3
1
3
cos
2

1
3
;
2
1
cos 00 01 10 sin 11
.
Глава 7. Алгоритм Гровера
1
sin2

;
.
6
Итак, мы узнали, что координаты вектора c равны
3
0,5). Далее во временной точке 2, то есть после при-
;
(
2
менения оракула, искомому состоянию присваивается ми­нус, поэтому вертикальная координата вектора c стано­вится отрицательной, так что новый вектор c
получается
1b
из вектора c как отражение относительно горизонтальной оси на угол . Для нашего примера координаты вектора c
3
(
–0,5) (рис. 7.2).
;
равны
1b
2
1
a
c
b
T
01
Рис. 7.2. Отражение вектора состояния
относительно горизонтальной оси
T
c
1b
125
Глава 7. Алгоритм Гровера
В названии вектора c1b цифра 1 нижнего индекса оз­начает то, что это первая итерация, а буква b показывает, что отражение идет относительно вектора b, находящегося на горизонтальной оси. Также обратите внимание, что угол между векторами c и c (обозначим его как U
составляет 2. Общий вид оператора
1b
), помечающего минусом искомое со-
b
стояние a:
UI aa .
2
b
В нашем примере этот оператор будет равен
1000 0000 100 0
   
0100 0000 010 0
 
U
 
b
 
0010 0000 001 0
 
0001 0001 000 1
 
2
.
А теперь применим полученный оператор к состоянию двух верхних кубитов во временной точке 1 и получим при этом вектор c
:
1b
100 0 1 1
 
010 0 1 1
cUc
 
1
bb
 
001 0 1 1

000 1 1 1

11 22

.
Во второй части первой итерации также происходит от­ражение вектора текущего состояния, но теперь уже относи­тельно вектора c (рис. 7.3).
Мы получаем новый вектор c на угол 2 (при этом угол между векторами b и c 3). Как несложно догадаться, в названии вектора c
, отстоящий от вектора c
1c
составляет
1c
циф-
1c
ра 1 также означает то, что этот вектор получается на первой итерации, а буква c в нижнем индексе означает, что угол c
1c
получен отражением относительно вектора c.
126
Глава 7. Алгоритм Гровера
1
c
1c
a
c
b
T
01
Рис. 7.3. Отражение относительно начального состояния
T
c
1b
Обозначим оператор, производящий отражение относи­тельно вектора c, как U
22

UccI
c
:
c
1111 10 00
   
1111 01 00
1
   
1111 00 10
4
 
1111 00 01
 
1111
 
1111
1
2
 
11 11

111 1

.
Применим этот оператор к вектору c1b, получая вектор c1c:
1111 1 0
 
1111 1 0
11
cUc
 
11
ccb
 
22
11 11 1 0

111 1 1 1


.
127
Глава 7. Алгоритм Гровера
Вектор c1c – это итоговый вектор первой итерации, так что можно уже вывести формулу для величины угла между вектором b и итоговым вектором после n итераций: (1 + 2n). Если число итераций n подобрано правильно, то итоговый угол будет равен или максимально близок к 90 гра­дусам, а это означает, что такой вектор совпадет или почти совпадает с вектором a. Значит, при измерении кубитов, кодирующих идентификаторы записей таблицы, с большой вероятностью будет получено искомое состояние. Выведем формулу для подсчета количества итераций:
(1 2 )2n
  ;
n

2
.
2
В том случае, если получено дробное число n, его необхо­димо округлить до ближайшего целого. В таком случае при измерении будет небольшая вероятность получить неверный ответ, так что нужно совершить несколько запусков и после­дующих измерений кубитов. Если при этом нужно посчи­тать вероятности получить правильный ответ, то это неслож­но сделать, зная координаты итогового вектора.
Найдем n для нашего примера:

26
n

1
.
3
Мы видим, что для получения искомого вектора в нашем примере достаточно одной итерации, и так как n – целое чис­ло, полученный ответ будет точным, то есть итоговый угол будет равен 90 градусам.
Мы рассмотрели случай, когда искомая запись явля­ется единственной. Если же таких записей несколько, то
128
КОНТРОЛЬНЫЕ ВОПРОСЫ
в качестве вектора a нужно взять суперпозицию базисных векторов состояний, соответствующих искомым записям, с равными амплитудами. При большом N угол становит­ся малым, так что необходимое количество итераций будет приблизительно равно
N
n
где K – количество искомых состояний.
Для случая с одним искомым состоянием эта формула также справедлива.
,
4
K
Контрольные вопросы
1. Какую задачу решает алгоритм Гровера?
2. Какова сложность поиска записи в неотсортированной
таблице с использованием классического компьютера?
3. Каким образом оракул помечает искомые записи в та­блице? Почему эту отметку нельзя обнаружить при измере­нии кубитов, если не пользоваться алгоритмом Гровера?
4. Если использовать для описания действий, происходя­щих при работе алгоритма Гровера, единичную окружность, то что будут обозначать горизонтальная и вертикальная оси?
5. Как определить нужное количество итераций при ра­боте алгоритма Гровера?
6. Какое количество итераций потребуется сделать, если общее число записей равно четырем, а искомая запись одна?
7. Почему при работе алгоритма Гровера не всегда удает­ся точно привести вектор состояния к вектору искомого со­стояния? Что в таких случаях рекомендуется делать?
8. Почему нужно знать количество искомых записей в та­блице? Если искомых записей в таблице несколько, потребу­ется ли запускать алгоритм Гровера повторно?
9. Какие вспомогательные действия производит класси­ческий компьютер при работе алгоритма Гровера?
ГЛАВА 8. АЛГОРИТМ ШОРА
8.1. Асимметричное шифрование
Квантовые вычисления какое-то время ассоциировались с возможностью взламывать зашифрованные сообщения. Хотя это и не главное, чем могут быть полезны квантовые алгоритмы, но именно благодаря освещению в прессе воз­можной угрозы для зашифрованной информации квантовые вычисления стали известны широкой публике. И все это из­за того, что алгоритм Шора предоставил возможность быстро находить простые множители для больших чисел, на кото­рых основаны способы шифрования, считавшиеся до того времени надежными. И хотя для того, чтобы продемонстри­ровать полную мощь алгоритма, нужно такое количество кубитов, которое вряд ли появится в ближайшее время, мы можем уже сейчас ознакомиться с областью, в которой кван­товые вычисления демонстрируют возможности, недоступ­ные классическим компьютерам.
Для начала ознакомимся с асимметричным шифровани­ем – идеей, которая когда-то казалась удачной, но сейчас уже не кажется таковой в свете развития квантовых вычис­лений. Введем условные наименования: назовем пользова­телем того участника, который создает ключи для шифро­вания, чтобы получать информацию от своего собеседника в зашифрованном виде, а потом может расшифровывать ее. Основной смысл такого шифрования состоит в том, что поль­зователь может поделиться со своим собеседником откры­тым (публичным) ключом, представляющим собой большое число, с помощью которого собеседник может зашифровать сообщение и отправить его пользователю.
Для того чтобы расшифровать сообщение, одного публич­ного ключа гипотетически может быть достаточно, но нуж­но разложить его на два простых числа, а это не такая уж и
130