Криптохомячкам посвящается ...
Алгоритм Гровера представляет собой обобщённый, независящей от конкретной задачи поиск, функция которого представляет "чёрный ящик" f: {0,1}^n to {0,1}^n, для которой известно, что EXISTS!w:f(w)=a, где a — заданное значение.
Считаем, что для f и заданного a можно построить оракул Uf: { |w> to |1>, |x> to |0> if |x> != |w> }
Алгоритм Гровера достаточно прост
- Задаём в регистре (массиве кубитов) начальное значение H|0>
- Повторяем несколько раз (исходя из оценки) пару трансформаций над регистром
- Отражение от решения Uw: { |w> to -|w>, |x> to |x> if |x> != |w> } или Uw = I-2|w><w|
- Отражение от s=H|0> Us = 2|s><s|-I
- Забираем нужное решение из регистра (с большой долей вероятности, что оно правильное)
Применим этот алгоритм для решения задачи нахождения ключа шифра Цезаря ...