Квантовая схема алгоритма Гровера
ет обычный процессор при помощи каких-либо хитроумных устройств, которые позволяют выполнять две основные задачи:
подготовка необходимых унитарных преобразований для выбранного квантового алгоритма и инициализация входных куби-
тов. На выходе этого «квантового сопроцессора» будут производиться измерения, а их результат сообщаться основному
процессору, производящему вычисления. Таким образом, программировать само квантовое вычислительное устройство
никто не будет; его будет «программировать» классический компьютер — настраивать гейты, связывать их друг с другом,
инициализировать кубиты и запускать квантовые вычисления. [3]
Квантовая схема алгоритма Гровера представлена на рис. 6.
Рассмотрим неупорядоченную базу данных схемотехнических решений, содержащую 25000 файлов. Необходимо,
быстро найти ровно один файл. Для того чтобы решить эту задачу на обычном компьютере, в худшем случае, придётся
перебрать все 25000
файлов, а в среднем 12500. На квантовом компьютере необходимо и достаточно произвести 158
итераций, чтобы найти данный файл. В общем случае алгоритм Гровера позволяет выполнить поиск требуемой файла
за
𝑂𝑂�√𝑁𝑁�
шагов. [6]
Описание модели:
программа для моделирования представляет собой функцию
Grover()
, принимающая
в качестве параметров количество кубитов (параметр
qbitsCountParam
), порядковый номер искомого базисного со-
стояния (параметр
stateNumParam
) и количество дополнительных итераций (параметр
iterationsCountParam
). Ниже
пошагово рассмотрено подробное описание кода этой функции.
Инициализация квантового регистра.
Состояние квантового регистра из n кубитов представляет собой произведение Кронекера (тензорное) вектор-
столбцов состояний соответствующих кубитов, как показано в выражении:
|0 … 0
𝑁𝑁
⟩
= |0
⟩
⨂
|0
⟩
⨂
…
⨂
|0
⟩
𝑁𝑁
=
�
1
0…
0
�
,
где знак
⨂
означает тензорное умножение, N — количество базисных состояний.
Расчета начального состояния регистра реализован в следующем коде с использованием встроенной функции про-
изведения Кронекера
kron()
:
Переменная
qbit
содержит вектор-солбец
�
1
0
�
, являющийся выражением состояния
|0
⟩
. Результат вычисления со-
стояния регистра для 2-х кубитов присвоен переменной
registerState
строкой ниже, а цикл
for…end
предназачен для
вычисления состояния регистра из 3 и более кубитов. Количество кубитов определяется по значению переменной
qbitsCountParam,
задаваемой пользователем при вызове пользовательской функции
Grover()
. Результат работы это-
го блока кода присваивается переменной
registerState
.
Вычисление многокубитного гейта Адамара.
Матрица многокубитового гейта Адамара вычислена с помощью встроенной функции
hadamard()
. Эта функция
в качестве параметра принимает размерность квадратной матрицы Адамара. Размерность равна количеству базисных
состояний рассматриваемого регистра. Количество состояний N вычислено по формуле:
N =
2
𝑛𝑛
,
где N — количество базисных состояний, а n — количество кубитов.
“Young Scientist”
Do'stlaringiz bilan baham: |