Неструктурований пошук
Зміст
Розпочнемо з опису задачі, яку розв'язує алгоритм Ґровера. Як завжди, позначимо двійковий алфавіт протягом усього обговорення.
Нехай
— функція з двійкових рядків довжини до бітів. Припустимо, що ми можемо ефективно обчислити цю функцію, але в іншому вона довільна і ми не можемо розраховувати на те, що вона має особливу структуру або конкретну реалізацію, яка нам підходить.
Алгоритм Ґровера виконує пошук рядка , для якого . Такі рядки ми називатимемо розв'язками задачі пошуку. Якщо розв'язків кілька, будь-який із них вважається правильною відповіддю; якщо розв'язків немає, правильна відповідь — повідомити про їхню відсутність.
Ця задача називається неструктурованим пошуком, оскільки ми не можемо покладатися на те, що має будь-яку конкретну структуру, яка спрощує пошук. Ми шукаємо не в упорядкованому списку й не в якійсь структурі даних, спеціально призначеній для пошуку, — ми буквально шукаємо голку в копиці сіна.
Інтуїтивно можна уявити собі надзвичайно складну булеву схему, яка обчислює , і ми можемо легко запустити цю схему на вибраному вхідному рядку. Але оскільки схема настільки складна, нам не вдасться розібратися в ній простим розглядом (окрім здатності обчислювати її значення на вибраних вхідних рядках).
Один класичний спосіб виконати це завдання пошуку — просто перебрати всі рядки , обчислюючи для кожного, щоб перевірити, чи є він розв'язком. Позначимо далі
для зручності. У є рядків, тому їх перебір вимагає обчислень . Якщо ми обмежені обчисленням на обраних вхідних даних і хочемо гарантовано знайти відповідь, це найкраще, що можна зробити детермінованим алгоритмом. При ймовірнісному підході можна спробувати заощадити час, випадково обираючи вхідні рядки для , але все одно знадобиться обчислень для високої ймовірності успіху.
Алгоритм Ґровера розв'язує цю задачу пошуку з високою ймовірністю, виконуючи лише обчислень . Уточнимо: ці обчислення функції відбуваються у суперпозиції, аналогічно до алгоритмів із запитами з уроку «Квантові алгоритми з запитами», включаючи алгоритм Дойча, алгоритм Дойча–Йожі та алгоритм Саймона. На відміну від них, алгоритм Ґровера є ітеративним: він обчислює на суперпозиціях вхідних рядків і чергує ці обчислення з іншими операціями, що створюють інтерференційні картини, приводячи до розв'язку з високою ймовірністю (якщо він існує) після ітерацій.