Рассмотрим два состояния: и . Состояние системы в начале протокола . После ворот Адамара состояние системы . Контролируется SWAP затвора преобразует состояние в . Второй вентиль Адамара приводит к
Затвора Измерение на первом кубитный гарантирует , что это 0 с вероятностью
при измерении. Если и являются ортогональными , то вероятность того, что 0 измеряется . Если состояния равны , то вероятность того, что будет измерен 0, равна 1. [2]
Ниже представлен псевдокод для реализации теста Swap:
Алгоритм Swap Test
Входные данные Два квантовых состояния и , хранящиеся в двух отдельных регистрах кубитов , каждый из которых содержит кубиты (мы обозначаем -й кубит в двух регистрах соответственно, как и )
Вспомогательный кубит, инициализированный как (Обозначим вспомогательный кубит )
Некоторые , представляющие количество раз, когда алгоритм будет выполняться
Выходные вычисления
Для диапазона от до :
Примените вентиль Адамара к вспомогательному кубиту
Для диапазона от до (итерация по каждой паре кубитов в двух регистрах):
Применить ( это контрольный кубит, а - цели)
Примените вентиль Адамара к вспомогательному кубиту
Измерьте вспомогательный кубит в базисе и запишите результат измерения (мы предполагаем, что измерения дают либо или , и мы обозначаем результат измерения как )
Вычислить
Возврат (обратите внимание, что при равенстве в виде )
«←» обозначает присвоение . Например, « самый большой ← элемент » означает, что значение самого большого элемента изменяется на значение элемента .
« return » завершает алгоритм и выводит следующее значение.