Квантовые компьютеры. С точки зрения традиционного программиста-математика. Часть 6
В прошлой части мы рассмотрели, как выглядят квантовые цепи с традиционными логическими операциями над данными. Сегодня мы рассмотрим два классических квантовых алгоритма, которые дают существенный выигрыш в производительности по сравнению с классическими алгоритмами решения этих задач.
Рассмотрим квантовую цепь с функцией
Я обозначил знаком
Итак, для такой квантовой цепи, которая реализует эту функцию
Используем параллелизм, подаем на вход это цепи суперпозицию всех возможных состояний разрядности n
В этом случае на выходе из данной цепи мы получим повтор аргумента и результат с маской "исключающего или" входящего кубита
И здесь у нас есть несколько приемов, чтобы обработать результат этого параллелизма. Самый очевидный, это подать на вход
В этом случае, операция
Но распространен также прием, который мы использовали в прошлой части: на вход
разбивается на суперпозицию двух возможных состояний кубита
Далее используем тот математический факт, что
получаем в итоге:
Так как функция
В первом случае
Во втором случае
Или, если этот минус изобразить в виде
И наконец, с учетом повтора состояния
То есть в результате такого находчивого приема мы получаем на выходе для тех
Этим приемом мы воспользовались в прошлой части, когда решали задачу с черным ящиком. Но прием можно применить и в других задачах. Вот мы и рассмотрим один из таких алгоритмов - алгоритм Дойча-Йожи.
Алгоритм Дойча-Йожи
Один из первых квантовых алгоритмов. Задача поставлена следующим образом. Есть некоторая функция - черный ящик. На вход принимает n-разрядное двоичное число. На выходе скрытая функция черного ящика выдает результат размером всего один бит.
В зависимости от некоторого скрытого параметра черного ящика, данная функция либо выдает результатом одно и то же значение для любого аргумента. Либо ровно для половины всех аргументов функция выдает результатом 1, а для второй половины аргументов результатом будет 0.
И нам нужно установить - какой тип черного ящика перед нами. Тот который выдает константу для всех значений, или тот который выдает два разных бита.
С классическим алгоритмом все элементарно. Нам надо взять и направить в черный ящик минимум
По теории вероятностей, для больших
Аналогично в случае, если мы получили несколько константных результатов, то с очень высокой вероятностью перед нами ящик первого типа - константный. Но это только вероятностный ответ. Если мы хотим получить ответ с вероятностью 1, то нам надо подать на вход
Другое дело квантовый алгоритм. Допустим мы воспользуемся приемом, описанным выше. Тогда у нас будет суперпозиция всех состояний от
При этом те аргументы, для которых скрытая функция черного ящика возвращает 0 будут со знаком +, для которых скрытая функция черного ящика возвращает 0 будут со знаком -. Что это нам дает?
Рассмотрим первый случай, если это функция константная, то все состояния будут с одинаковым знаком, либо все с плюсом, либо все с минусом.
Такое состояние можно получить если подать на вход n-кубитного гейта Адамара состояние
А значит, если мы на выходе квантовой цепи поставим еще один гейт Адамара, то благодаря обратимости, мы получим исходное состояние.
Если мы измерим этот результат, то очевидно мы получим результат
Рассмотрим второй случай, функция черного ящика не константная и выдает для половины всех аргументов 0, а для остальных аргументов 1.
В этом случае, после применения приема выше, мы получим суперпозицию состояний с разными знаками. Ровно половина знаков будет +, ровно половина знаков будет -.
Что будет если мы подадим такое состояние в гейт Адамара?
Вспоминаем формулу для гейта Адамара разрядности n
но мы не будем вычислять все амплитуды, а просто немного разобьем данную сумму на две части, нас интересует итоговая амплитуда у состояния
И получаем, что для состояния
а для состояния
Ну и наконец, если мы подаем на вход гейта Адамара суперпозицию таких состояний
Ну и , наконец, вспоминаем, что ровно половина аргументов дает 0 и ровно другая половина аргументов дает 1. Значит
Ведь ровно половина результатов будет с плюсом и ровно половина с минусом.
И значит вероятность при измерении результата получить результатом
И в этом и состоит суть алгоритма. Если мы получаем в результате измерения нули по всем разрядам, то это константный черный ящик. Если получаем в результате измерения ненулевое значение, то это ящик, в котором половина аргументов дает 0, а другая половина дает 1.
Приведем полную квантовую цепь для алгоритма Дойча-Йожи. Она ничем не отличается от схемы, что мы использовали в прошлой задаче, только другой черный ящик и другая интерпретация результатов.
Задача Саймона
Тема непростая, все никак не мог зайти на эту задачу с каким то простым объяснением. Вот, что в итоге получилось.
Итак, сначала сама задача с примерами.
У нас есть некоторый черный ящик. Этому черному ящику мы скармливаем произвольное число
Где
Ну, и понятно, что для всех остальных аргументов, значение черного ящика уникально
Разберем конкретный пример. Допустим, параметр трехразрядного черного ящика, который нам нужно отыскать равен
Для каких значений черный ящик будет возвращать одинаковые результаты. По условию задачи, это пары,
Для таких пар наш черный ящик должен выдавать одинаковый уникальный результат. В остальном наш черный ящик ничем не ограничен. Например, черный ящик может работать вот так:
Но это мы пока только разобрались с тем, как работает черный ящик. А теперь разберемся с задачей Саймона: имея такой черный ящик, найти скрытый параметр s обратившись к ящику минимальное число раз.
Как решить задачу на традиционном компьютере? Очевидно, нам нужно "скармливать" черному ящику различные аргументы, пока у нас не возникнет хотя бы одного совпадения результатов черного ящика. Допустим в задаче выше мы перебираем просто все аргументы подряд. Тогда первая пара с одинаковым результатом у нас будет на пятой итерации
Вся сложность только в том, сколько итераций нам в среднем понадобиться, чтобы найти хотя бы один совпадающий результат черного ящика. По теории вероятностей ("Парадокс дней рождений") нам потребуется число операций примерно равное
Но это классический алгоритм решения. Теперь попытаемся решить задачу квантовой цепью.
Как обычно, воспользуемся параллелизмом. С помощью гейта Адамара получим равновероятное состояние всех возможных аргументов черного ящика и "скормим" их черному ящику.
Получим таким образом, как и в прошлых задачах суперпозицию всех состояний
Если мы распишем наш случай трехразрядного черного ящика из цветастого примера выше, то это будет такое состояние:
И далее мы легко можем получить из этого состояние суперпозицию где будет только искомая пара, для которых
То есть, в результате измерения мы получим состояние
То есть мы сразу за одну итерацию получаем одну из нужных нам пар, ради которой в классическом случае нам пришлось бы перебрать в среднем
В общем случае мы получим состояние
где
Но, не торопитесь радоваться. То что казалось простым на классическом компьютере, теперь оказалось тяжелейшей задачей для квантового компьютера. Имея состояние
И большую часть решения задачи Саймона составляет эта, казалось бы тривиальная, часть. Но программисты решили ее следующим образом.
Данное состояние
Вспоминаем нашу формулу для гейта Адамара
Опустим для простоты нормировочный коэффициент
Воспользуемся формулой для побитовых логических операций, которые легко проверить:
И второе, что также легко проверить, это свойство исключающего или
Тогда можно вынести за скобки
Отсюда видно, что если в числе
Мы перебираем в сумме все возможные значения x от 0 до
Если мы обозначим
Это уравнение по модулю 2, где каждое число это один бит: 0 или 1.
Нам нужно найти s, а значит в этом уравнении нам неизвестны
Но известны, полученные в результате измерения
Но этого мало. Уравнение с n неизвестными, а занчит нам нужно, как минимум n-1 линенйно независимых уравнений, чтобы решить эту систему.
Поэтому нам понадобятся еще итерации с черным ящиком, чтобы получить какое то другое x.
Вернемся для иллюстрации к нашему "цветному" примеру черного ящика с
Какие существуют x, чтобы
Их существует всего четыре:
И вот, собрали мы такую квантовую цепь и сделали первый замер. Получили любое случайно из четырех значений, например 101. Потом сделали второй замер и получили, к примеру 111. Смогли составить систему уравнений:
Теперь решаем эту систему. от второго уравнения отнимаем первое и получаем, что
И остается уравнение
То есть у нас получились два решения системы:
По условию черного ящика s - ненулевой параметр, поэтому первое решение отбрасываем. И получаем ответ
Мы всегда в такой системе имеем одно из решений
В общем случае нам надо сделать как минимум n-1 итерацию, чтобы получить n-1 линейно независимых уравнений для вычисления битов s.
Нам может не повезти и мы получим x=0, либо тоже самое значение x, что получали на прошлой итерации. Если нам повезёт, то мы выберем из всех
Не будем сейчас делать вычисления теории вероятности, чтобы совсем не усложнять эту тему. Теория вероятности уже за нас все подчитала и вычислила, что для получения линейно независимой системы уравнений нам потребутеся обратится к черному ящику в среднем линейное от n число раз для достаточно больших n.
Несмотря на необходимость решать систему уравнений, это существенная оптимизация по сравнению с классическим алгоритмом, которому требовалось в среднем
В следующей, заключительной части мы разберем знаменитый алгоритм Шора.