Цели главы. Разобрать алгоритм Гровера: геометрическую картину двух отражений, выбор числа итераций и нижнюю оценку, доказывающую оптимальность в модели запросов. Затем отделить асимптотическое квадратичное ускорение перебора от полной физической стоимости криптоаналитической атаки.
Дана функция f: {0,1}n → {0,1} в виде оракула (глава 5), причём она равна 1 на M входах из N = 2n. Требуется найти хотя бы один такой вход. Модель не предполагает структуры, которую можно использовать помимо проверки кандидата. Она описывает абстрактный перебор; для базы данных или криптографической задачи в полную стоимость необходимо включать реализацию доступа к данным или обратимого проверяющего оракула.
Рандомизированному классическому алгоритму требуется Θ(N/M) запросов для постоянной вероятности успеха. Алгоритм Гровера использует O(√(N/M)) запросов. Это универсальное квадратичное, но не экспоненциальное ускорение неструктурированного поиска; время и число физических операций могут быть значительно больше числа запросов.
Начальное состояние — равномерная суперпозиция |ψ⟩ = H⊗n|0…0⟩ = N−1/2∑x|x⟩. Одна итерация Гровера G состоит из двух операторов:
В начале алгоритма все помеченные амплитуды одинаковы, как и все непомеченные. Оракул меняет знак первых, после чего отражение относительно среднего увеличивает их модуль и уменьшает модуль остальных. Это описание верно до приближения к оптимальному числу итераций; дальнейшие шаги снова уменьшают вероятность успеха.
Точный анализ неожиданно умещается в двумерную картинку. Введём два нормированных вектора: |β⟩ — равномерная суперпозиция помеченных состояний, |α⟩ — равномерная суперпозиция непомеченных. Начальное состояние лежит в их плоскости:
|ψ⟩ = cos(θ/2)·|α⟩ + sin(θ/2)·|β⟩, где sin(θ/2) = √(M/N).
Ключевое наблюдение: оба оператора не выводят из этой плоскости. O — отражение относительно |α⟩ (меняет знак компоненты |β⟩); D — отражение относительно |ψ⟩. А композиция двух отражений плоскости — это поворот на удвоенный угол между осями: каждая итерация G поворачивает вектор состояния на угол θ в сторону |β⟩. После k итераций состояние образует с |α⟩ угол (2k+1)θ/2, и вероятность измерить помеченный элемент равна sin2((2k+1)θ/2).
Число итераций. Требуется приблизить (2k+1)θ/2 к π/2. Оптимальное целое k выбирают ближайшим к π/(2θ) − 1/2; при M ≪ N
k ≈ (π/4)·√(N/M), поскольку θ ≈ 2√(M/N).
Например, для N = 220 = 1 048 576 и одного помеченного входа требуется около 804 итераций вместо примерно половины пространства при последовательном классическом поиске. При известном M и правильном округлении вероятность успеха не меньше 1 − M/N; найденный кандидат проверяют одним дополнительным запросом.
Перелёт. Поворот не останавливается у |β⟩: после оптимума вероятность убывает, затем снова растёт. Поэтому фиксированное число итераций требует знания M. Если оно неизвестно, можно оценить угол методом квантового подсчёта либо выбирать число итераций по рандомизированной стратегии Бойера–Брассара–Хойера–Таппа; ожидаемая сложность остаётся O(√(N/M)).
Теорема BBBV. Любой квантовый алгоритм, который находит единственный помеченный элемент с постоянной вероятностью успеха, должен сделать Ω(√N) запросов к неструктурированному оракулу. Алгоритм Гровера оптимален в этой модели с точностью до постоянного множителя.
Нижняя оценка не доказывает, что NP-полные задачи вообще не имеют полиномиальных квантовых алгоритмов: такой алгоритм мог бы использовать структуру конкретной задачи, отсутствующую у чёрного ящика. Она доказывает более узкое и важное утверждение: заменить полный перебор универсальным квантовым поиском и получить полиномиальное время нельзя.
Гровер — частный случай общего приёма. Пусть унитарная схема A готовит состояние, измерение которого даёт хороший результат с вероятностью p, и мы умеем обратимо отмечать хорошие исходы. Усиление амплитуды использует A, A−1 и два отражения, повышая успех за O(1/√p) итераций вместо O(1/p) независимых классических повторов. Рандомизированную классическую процедуру для этого нужно сначала реализовать когерентно. Родственные методы дают, например, квантовый алгоритм поиска коллизий с O(N1/3) запросов и памяти вместо классической границы порядка N1/2 в соответствующей модели.
В модели последовательных запросов полный перебор ключа длины k сокращается с порядка 2k до порядка 2k/2 итераций. Поэтому AES-128 часто описывают как 64-битный уровень против идеализированного поиска Гровера, а AES-256 — как 128-битный. Это полезная консервативная шкала, но не готовая оценка времени атаки: она не учитывает стоимость оракула, коррекцию ошибок, параллелизм и ограничения данных. Для новых долгоживущих систем AES-256 даёт больший запас, тогда как развёрнутые схемы RSA и дискретного логарифма требуют замены, а не простого удвоения ключа.
Для перехода от запросов к инженерной оценке нужны дополнительные факторы:
Ответы и указания. 1: sin(θ/2)=1/2, поэтому θ=π/3; после одной итерации угол равен π/2 и успех имеет вероятность 1. Среднее после оракула равно 1/4, непомеченные амплитуды переходят в 0, помеченная — в 1. 2: k=2, P=sin2(5·arcsin(1/√8))≈0,945; после четырёх итераций P=sin2(9·arcsin(1/√8))≈0,012. 3: D2=I, поскольку |ψ⟩⟨ψ| — проектор; сопряжение 2|0⟩⟨0|−I слоем H даёт 2|ψ⟩⟨ψ|−I. 4: θ/2=π/6, и после одной итерации угол равен π/2, поэтому успех достоверен; когда решений много, асимптотический выигрыш мал и проверка случайных кандидатов может быть проще. 5: при M=N/2 успех равен 1/2 после любого числа итераций; оптимально выполнить ноль итераций, измерить и проверить ответ, повторяя при неудаче. 6: (π/4)·264≈1,45·1019 итераций; по микросекунде на итерацию это около 4,6·105 лет, причём такая длительность одной отказоустойчивой итерации сама по себе нереалистично мала.
Задание 1. Оракул. Соберите оракул-фазу на 3 кубитах, помечающий строку |101⟩ в порядке Qiskit |q2q1q0⟩: обрамите CCZ вентилями X на кубите 1. CCZ можно получить последовательностью qc.h(2); qc.ccx(0, 1, 2); qc.h(2). Для проверки сначала приготовьте H⊗3|000⟩ и сравните Statevector до и после оракула: только амплитуда |101⟩ должна изменить знак. Проверка на одном базисном |101⟩ не подходит, потому что его знак был бы глобальной фазой.
Задание 2. Диффузор. Реализуйте последовательность H на всех кубитах, X на всех, CCZ, X на всех, H на всех. Она равна −D: отличается от принятого в тексте диффузора только глобальным знаком и потому даёт тот же алгоритм.
Задание 3. Полный алгоритм. Начальный слой H, затем k итераций (оракул + диффузор), измерение. Для N = 8, M = 1 оптимально k = 2 (упражнение 2). Выполните 1024 запуска и убедитесь, что |101⟩ выпадает с частотой ≈ 94–95%.
Задание 4. Перелёт. Постройте график частоты правильного ответа от числа итераций k = 0…8. Сравните с теоретической кривой sin²((2k+1)θ/2) — вы увидите синусоиду из раздела 8.3 экспериментально.
Задание 5*. Два помеченных элемента. Модифицируйте оракул, чтобы он помечал |101⟩ и |110⟩. Здесь M/N=1/4, поэтому одна итерация должна дать один из двух ответов с суммарной вероятностью 1; проверьте, что каждый появляется примерно в половине запусков.