Перейти до основного вмісту
Цей проєкт у бета-версії. Знайшов(-ла) помилку? Відкрити issue на GitHub. Є запитання чи ідея? Запитати в Discussions — будемо раді твоєму відгуку!
Яка якість перекладу на цій сторінці?

Опис алгоритму Гровера

У цьому розділі ми розглянемо алгоритм Гровера. Почнемо з обговорення фазових query-гейтів і способів їх побудови, а потім перейдемо до опису самого алгоритму Гровера. Насамкінець коротко поговоримо про те, як цей алгоритм природно застосовується до задач пошуку.

Фазові query-гейти​

Алгоритм Гровера використовує операції, відомі як фазові query-гейти. На відміну від звичайного query-гейта UfU_f, визначеного для заданої функції ff стандартним способом, описаним раніше, фазовий query-гейт для функції ff визначається так:

Zf∣x⟩=(−1)f(x)∣x⟩Z_f \vert x\rangle = (-1)^{f(x)} \vert x\rangle

для кожного рядка x∈Σnx\in\Sigma^n.

Операцію ZfZ_f можна реалізувати за допомогою одного query-гейта UfU_f, як показано на цій схемі:

Квантова схема, що реалізує гейт Z_f за допомогою одного query-гейта та ефекту phase kickback

Ця реалізація використовує ефект phase kickback і потребує одного допоміжного кубіта, ініціалізованого в стан ∣−⟩\vert -\rangle. Після завершення роботи цей кубіт залишається в стані ∣−⟩\vert - \rangle і може бути повторно використаний (наприклад, для реалізації наступних гейтів ZfZ_f) або просто відкинутий.

Окрім операції ZfZ_f, ми також використаємо фазовий query-гейт для nn-бітної функції АБО, яка визначається так для кожного рядка x∈Σnx\in\Sigma^n.

OR(x)={0x=0n1x≠0n\mathrm{OR}(x) = \begin{cases} 0 & x = 0^n\\[0.5mm] 1 & x \neq 0^n \end{cases}

Явно фазовий query-гейт для nn-бітної функції АБО діє так:

ZOR∣x⟩={∣x⟩x=0n−∣x⟩x≠0n.Z_{\mathrm{OR}} \vert x\rangle = \begin{cases} \vert x\rangle & x = 0^n \\[0.5mm] - \vert x\rangle & x \neq 0^n. \end{cases}

Зауважимо, що це дія ZORZ_{\mathrm{OR}} на стандартних базисних станах; її поведінка на довільних станах визначається з цього виразу за лінійністю.

Операцію ZORZ_{\mathrm{OR}} можна реалізувати у вигляді квантової схеми: спочатку будуємо булеву схему для функції АБО, потім конструюємо операцію UORU_{\mathrm{OR}} (тобто стандартний query-гейт для nn-бітної функції АБО) за процедурою, описаною в уроці Квантово-алгоритмічні основи, і, нарешті, отримуємо операцію ZORZ_{\mathrm{OR}} за допомогою ефекту phase kickback, як описано вище. Зверни увагу, що операція ZORZ_{\mathrm{OR}} не залежить від функції ff і тому може бути реалізована квантовою схемою, що не містить жодного query-гейта.

Опис алгоритму​

Маючи дві операції ZfZ_f та ZORZ_{\mathrm{OR}}, ми можемо описати алгоритм Гровера.

В алгоритмі фігурує число tt — кількість ітерацій, які він виконує (і, відповідно, кількість запитів до функції ff, яких він потребує). Це число tt не фіксується самим алгоритмом Гровера у тій формі, яку ми розглядаємо; пізніше в уроці ми обговоримо, як його вибирати.

Алгоритм Гровера
  1. Ініціалізуй регістр Q\mathsf{Q} з nn кубітів у нульовий стан ∣0n⟩\vert 0^n \rangle, а потім застосуй операцію Адамара до кожного кубіта Q\mathsf{Q}.
  2. Застосуй tt разів унітарну операцію G=H⊗nZORH⊗nZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f до регістра Q\mathsf{Q}
  3. Виміряй кубіти Q\mathsf{Q} в стандартному базисі і виведи отриманий рядок.

Операцію G=H⊗nZORH⊗nZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f, що ітерується на кроці 2, упродовж усього уроку ми будемо називати операцією Гровера. Нижче наведено зображення квантової схеми для операції Гровера при n=7 ⁣:n=7\!:

Квантова схема для операції Гровера

На цій діаграмі операція ZfZ_f зображена більшою за ZORZ_{\mathrm{OR}} — як неформальна візуальна підказка, що вона, ймовірно, є більш витратною. Зокрема, у рамках query-моделі ZfZ_f потребує одного запиту, тоді як ZORZ_{\mathrm{OR}} — жодного. Якщо ж ми маємо булеву схему для функції ff і перетворюємо її на квантову схему для Zf,Z_f, то можна очікувати, що отримана квантова схема буде більшою і складнішою, ніж схема для ZOR.Z_{\mathrm{OR}}.

Нижче зображено квантову схему для всього алгоритму при n=7n=7 і t=3t=3. Для більших значень tt можна просто вставляти додаткові копії операції Гровера безпосередньо перед вимірюваннями.

Квантова схема алгоритму Гровера при t=3

Алгоритм Гровера можна застосувати до задачі пошуку таким чином:

  • Вибери число tt на кроці 2. (Це обговорюється пізніше в уроці.)

  • Запусти алгоритм Гровера на функції ff з вибраним значенням tt, щоб отримати рядок x∈Σnx\in\Sigma^n.

  • Зроби запит до функції ff на рядку x,x, щоб перевірити, чи є він допустимим розв'язком:

    • Якщо f(x)=1f(x) = 1, то ми знайшли розв'язок, тож можна зупинитися і вивести xx.

    • Якщо f(x)=0f(x) = 0, — можна або запустити процедуру знову (можливо, з іншим tt), або відмовитися і вивести «немає розв'язку».

Після аналізу роботи алгоритму Гровера ми побачимо, що, взявши t=O(N)t = O(\sqrt{N}), отримаємо розв'язок задачі пошуку (якщо він існує) з великою ймовірністю.