Определение квантового вычисления. Примеры
Квантовый поиск: алгоритм Гровера.
Итак, мы имеем определение квантового вычисления. Теперь можно заняться сравнением эффективности классического и квантового вычисления. Во введении упоминались три основных примера, для которых квантовое вычисление оказывается, по-видимому, эффективнее классического. Мы начнем с того из них, в котором квантовое вычисление заведомо эффективнее (хотя ускорение лишь "полиномиальное").
Дадим определение универсальной переборной задачи в классической и квантовой постановке.
Пусть имеется устройство (см. рисунок), которое по входам и
определяет значение некоторого предиката
. Нас интересует предикат
. Это похоже на определение класса NP, но сейчас нам недоступна внутренняя структура устройства, вычисляющего предикат
. В таких условиях на классическом компьютере значение предиката
нельзя вычислить быстрее, чем за
шагов, где
— количество битов в записи
.
Оказывается, что на квантовом компьютере можно вычислить значение предиката и даже найти
, на котором выполнено
, за время
. Получены также и нижние оценки, показывающие, что в этой постановке квантовые устройства дают лишь полиномиальное ускорение по сравнению с классическими.
В квантовой постановке задача выглядит так. Вход по-прежнему классический, но сам "черный ящик" — квантовое устройство, и вход
(варианты ответа) мы будем считать квантовым. Поэтому наш оракул (или "черный ящик") задает оператор
, действующий по правилу
![U_x|y\rangle= \left\{ \begin{array}{rl} |y\rangle, \quad & \mbox{если}\ \calA(x,y)=0, \\ -|y\rangle, \quad & \mbox{если}\ \calA(x,y)=1. \end{array} \right.](/sites/default/files/tex_cache/d69c91efb9f50942423aaf045285e6e8.png)
Нужно вычислить значение и найти "ответ"
(при котором выполнен
).
Результаты, о которых уже упоминалось, формулируются так (см.[31, 48]): существуют две константы и
такие, что есть схема размера
, решающая задачу для любого предиката
; а для любой схемы размера
существует предикат
, при котором задача не решается на этой схеме (т.е. схема дает неправильный ответ с вероятностью
).
Мы разберем упрощенную постановку: считаем, что "ответ" существует и единствен, обозначим его через ; нужно найти
. Схема, которую мы для этого построим, будет примером "прямого" квантового вычисления; она будет описана в терминах преобразований базисных векторов.
Рассмотрим два оператора:
![&U=I-2\ket{y_0}\bra{y_0}](/sites/default/files/tex_cache/9e5e6c25a646eef07bfdc8c0c9cd4707.png)
и
![&V=I-2\ket{\xi}\bra{\xi}, \quad\mathrm{где}\ \ket{\xi}=\frac{1}{\sqrt{N}}\sum_{y}^{}\ket{y}.](/sites/default/files/tex_cache/2bfe19bb45331fbe6b19cd232dd57767.png)
Оператор в матричной форме может быть записан так (напомним, что
):
![V=\begin{pmatrix} 1-\frac{2}{N}&\dots&-\frac{2}{N}\\ \vdots&\ddots&\vdots\\ -\frac{2}{N}&\dots&1-\frac{2}{N} \end{pmatrix}.](/sites/default/files/tex_cache/f8fd302d53af52f718f09fb501321e33.png)
Оператор нам задан (это оракул). Построим квантовую схему, вычисляющую
. Действовать будем так: переведем
в
некоторым оператором
, затем применим оператор
, после чего применим
.
Построить оператор , который переводит
в
, просто. Это
, где оператор
— из стандартного базиса (см.
"Базисы для квантовых схем"
). Действительно,
.
Теперь построим реализацию оператора . Используем обратимую классическую схему, реализующую оператор
,
![\begin{align*} Z\ket{a_0,\dots,a_n}&\ =\ \ket{a_0\oplus f(a_1,a_2,\dots,a_n),a_1,\dots,a_n}; \\ f(a_1,\dots,a_n)&\ =\ \left\{ \begin{array}{rl} 1,\ & \mbox{если}\ a_1=\ldots=a_n=0,\\ 0,\ & \mbox{если}\ \exists\, j: a_j\ne0. \end{array} \right. \end{align*}](/sites/default/files/tex_cache/f335151d6ca462836da34645e485dcfa.png)
![Z=\widehat{f_{\oplus}}](/sites/default/files/tex_cache/5afbcfcc6505253fca53a68e238557d9.png)
![f](/sites/default/files/tex_cache/8fa14cdd754f91cc6554c9e71929cce7.png)
![Z](/sites/default/files/tex_cache/21c2e59531c8710156d34a3c30ac81d5.png)
Схема, реализующая оператор , изображена на рис. рис. 8.1.. Центральная часть, включающая в себя
,
и
, реализует оператор
. В схеме используется оператор
(
из стандартного базиса).
Заметим, что и
действуют тождественно на векторах с нулевыми значениями q-битов, взятых напрокат. Поэтому решающую роль играет оператор
, действующий на вспомогательный q-бит, который также не меняется после всего вычисления.
Пусть вас не смущает то, что действует только на "управляемый" q-бит, а меняется в результате весь вектор. Вообще, различие между "чтением" и "записью" в квантовом случае неабсолютно и зависит от выбора базиса. Приведем соответствующий пример.
Напишем матрицу в базисе
для каждого из q-бит. Другими словами, запишем матрицу для оператора
. Схема для этого оператора изображена на рис. рис. 8.2. Используя равенство
, найдем действие
на базисном векторе:
![\begin{align*} X\ket{a,b}&=\frac{1}{2}\left(H\otimes H\right) \Lambda(\sx)\sum\limits_{c,d}^{}(-1)^{ac+bd}\ket{c,d}=\\ &=\frac{1}{2}\left(H\otimes H\right) \sum\limits_{c,d}^{}(-1)^{ac+bd}\ket{c,c\oplus d}=\\ &=\frac{1}{4} \sum\limits_{a',b',c,d}^{}(-1)^{a'c+b'(c+d)} (-1)^{ac+bd}\ket{a',b'}=\\ &=\frac{1}{4}\sum_{a',b'}^{} 2\delta_{b,b'}\cdot2\delta_{a,(a'+b')} \ket{a',b'}=\ket{a\oplus b,b}. \end{align*}](/sites/default/files/tex_cache/b622c737a5877c096370e648f102f859.png)
![\frac{1}{\sqrt2}\left(\ket0\pm\ket1\right)](/sites/default/files/tex_cache/f92d0edcb80f575257f8ecb60f2376c5.png)
Задача 8.2. Что будет, если изменить базис только в одном бите? Например, как будет выглядеть матрица оператора, схема которого изображена на рисунке? Попробуйте также поменять базис в другом бите.
Вернемся к построению схемы для универсальной переборной задачи. Оракул нам задан, и мы реализовали оператор
. Из вектора
можно получить вектор
применением оператора
(
). Теперь с помощью операторов
и
построим из вектора
искомый вектор
. Для этого будем поочередно действовать операторами
:
![\dots V\,U\,V\,U\,\ket\xi=(VU)^s\ket\xi.](/sites/default/files/tex_cache/7e08e8d927bd04fd5d282323d9f61040.png)
![\calL=\CC(\ket\xi,\ket{y_0})](/sites/default/files/tex_cache/04dd3975ecdb7e39b53edd1fbd918794.png)
![VU](/sites/default/files/tex_cache/bce87c857571353d52a984d051446b37.png)
![\ket{\xi}](/sites/default/files/tex_cache/f542b1e2a9c48605d7d1e3dc4ff43f1e.png)
![VU](/sites/default/files/tex_cache/bce87c857571353d52a984d051446b37.png)
Композиция двух отражений относительно двух прямых есть поворот на удвоенный угол между этими прямыми. Угол легко вычислить, , т.е. эти прямые почти перпендикулярны. Поэтому можно написать
, где
— поворот на малый угол
. Но тогда
, где
— поворот на угол
. Знак нас не интересует (фазовые множители не меняют вероятностей). При больших
имеем
. Тогда после
итераций исходный вектор повернется на угол
и станет близок к искомому вектору. Это и означает, что система окажется в состоянии
с вероятностью, близкой к единице.
Если решается переборная задача в общей постановке (т.е. ответов может быть несколько, а может не быть вообще), требуются дополнительные технические ухищрения. Число шагов для поворота от исходного вектора к какому-нибудь вектору из подпространства, порожденного векторами ответов, обратно пропорционально корню из числа решений.