Я запутался в том, что вводить в Oracle в алгоритме Гровера.
Разве нам не нужно вводить то, что мы ищем, и где найти то, что мы ищем в Oracle, в дополнение к суперпозиционным квантовым состояниям?
Например, предположим, что у нас есть список имен людей {"Алиса", "Боб", "Кори", "Дио"}, и мы хотим выяснить, есть ли в списке "Дио". Затем Oracle должен принять в качестве входа и выхода . Я вроде это понимаю.
Но разве нам не нужно вводить слово «Dio» и список {«Алиса», «Боб», «Кори», «Дио»} в Oracle? Иначе, как Oracle может вернуть результат? Не упоминается ли это явно, поскольку Oracle является черным ящиком, и нам не нужно думать о том, как его реализовать?
Я понимаю, что Oracle
- Oracle имеет возможность распознавать, есть ли слово «Dio» в списке.
- Для этого Oracle принимает суперпозиционные квантовые состояния в качестве входных данных, где каждое квантовое состояние представляет индекс списка.
- Таким образом, ввод для Oracle означает, проверьте, находится ли слово «Dio» в индексе 0 списка, и верните если да, и верните противном случае.
- В нашем случае Oracle возвращает .
- Но как насчет списка и слова?
Ответы:
Хотя популярные объяснения алгоритма Гровера говорят о поиске по списку, в действительности вы используете его для поиска возможных входных данных 0..N-1 для функции. Стоимость алгоритмаO (N--√⋅ F) где N это количество входов, которые вы хотите найти и F стоимость оценки функции. Если вы хотите, чтобы эта функция осуществляла поиск по списку, вы должны жестко закодировать список в функцию.
Жесткое кодирование функции для использования списка из элементов, как правило, является очень плохой идеей, поскольку она приводит к тому, что становится равным . Что составило бы общую стоимость алгоритма Гровера . Какой вид поражений вся цель, так .N F O ( N) O (N--√⋅ F) = O (N--√⋅ N) = O (N1,5) N1,5> N
источник