Известно, что булева функция является постоянной (принимает одно и то же значение при всех наборах аргументов) либо сбалансированной (для половины наборов аргументов принимает значение , для другой половины ). Необходимо определить тип функции, обратившись к вычисляющему функцию оракулу наименьшее возможное число раз. Далее для краткости весь набор может также обозначаться числом от до с соответствующей двоичной записью.
Для получения точного ответа любому классическому детерминированному алгоритму в худшем случае необходимо произвести обращений к оракулу, так как первые вычислений могут дать одно и то же значение, несмотря на то, что функция сбалансированная. Классическому вероятностному алгоритму потребуется меньше вычислений для того, чтобы гарантировать высокую вероятность получения верного ответа, однако единицы она также достигнет лишь при не менее, чем вычислений.
В квантовой постановке вычисление функции происходит в форме обращения к квантовому оракулу, производящего унитарное преобразование, которое действует на наборе из кубитов, выступающих аргументами функции, а также целевого кубита , на котором отразятся вычисления. Результатом такого преобразования для любого собственного состояния является набор , где — обозначение исключающего «или», соответствующего результату операции контролируемого отрицания кубита с помощью кубита . Так как унитарные преобразования являются линейными, результат данного преобразования для суперпозиции собственных состояний определяется как
Алгоритму Дойча — Йожи достаточно однократного обращения к квантовому оракулу для достоверного решения задачи.
Если при обращении к оракулу целевой кубит находится в состоянии , то оракул реализует так называемый фазовый запрос, результатом которого для собственных состояний является умножение всего состояния на [1]:
Таким образом, в случае суперпозиции состояний фазовый запрос инвертирует фазу у всех состояний , соответствующих , и оставит без изменений состояния, соответствующие . В качестве аргумента фазового запроса алгоритм Дойча — Йожи использует состояние
являющееся равномерной суперпозицией всех собственных состояний набора из кубитов. Здесь обозначает возведение в степень через тензорное (кронекерово) произведение. Результат применения фазового запроса к такому состоянию равен
После повторного применения преобразования к первым кубитам амплитуда состояния будет равна
то есть при или при , либо , если функция сбалансирована. Таким образом, проверка сбалансированности функции равносильна проверке того, что все кубиты находятся в состоянии по окончании алгоритма.
Другими словами, алгоритм представляет собой применение к нулевому вектору оператора и измерение состояния регистра. Если все биты регистра равны , значит значение функции не зависит от , в противном случае функция является сбалансированной.
Если же функция несбалансированная, алгоритм может выдать ответ «константа» с вероятностью, растущей при увеличении разница между количеством «0» и «1»[2].
В принципе, можно было бы сразу назначить кубиту такое состояние, но технически проще сначала задать нулевое состояние, а потом преобразовать его с помощью унитарных преобразований к нужному виду.
Фазовый запрос к функции даёт следующее состояние:
Второе преобразование Адамара приводит к следующему состоянию:
При измерении состояния кубита получается 0 для константных функций и 1 для сбалансированных: