Например, гейт «квантовый NOT». По смыслу он похож на обычный оператор «НЕ». Этот гейт меняет местами вероятности в кубите. Вот, например, был у нас кубит, у которого вероятность сколлапсировать в ноль составляет 20 %, а в единицу — 80 %. Применяем гейт NOT и теперь у нас получается, что вероятность нуля — 80 %, а единицы — 20 %. Инвертировали кубит, так сказать. Занятно, как минимум!
Другой гейт назван в честь одного математика с фамилией Адамар. В общем и целом, гейт Адамара переводит вероятности кубита в равные значения. Помните полупрозрачное зеркало в главе про двущелевой эксперимент, который делил суперпозицию падающего на него фотона на две траектории с одинаковой вероятностью. Вот это, в принципе, и есть гейт Адамар. Но в математике он записывается сложно и непонятно. Поэтому запомним его таким.
Далее, конечно, все сложнее и сложнее. Квантовые вычисления были бы скучными, если бы выполнялись на одном кубите. Но если взять пару кубитов (или даже побольше), вот тут-то и начнется жара! При выполнении логических операций над несколькими кубитами происходит не просто какое-то там перемешивание вероятностей, а кубиты еще и запутываются (см. предыдущие главы).
Вот, к примеру, квантовый гейт, который называют «контролируемое отрицание» или CNOT. Для его работы нужно уже как минимум два кубита. Гейт инвертирует второй кубит, если первый кубит равен единице. При этом мы уже получаем не изолированные кубиты, а систему запутанных кубитов, когда изменение в одном влияет на другие.
Контролируемое отрицание может быть представлено в еще более сложных версиях (CCNOT, CSWAP) когда в операции участвует больше кубитов, как обычных, так и контролирующих. На таких гейтах можно создавать серьезные вычислительные устройства, а не только баловаться!
Так как же всё это использовать на благо человечества?
Из кубитов и операций над ними собираются вычислительные алгоритмы, которые должны иметь преимущество перед обычными компьютерами. Обращаем внимание, что не все вычисления будут работать быстрее, а лишь некоторые, вроде поиска делителя числа, когда требуется выяснить простое у нас число или составное. Квантовый компьютер найдет решение значительно быстрее, чем классический компьютер. В системе запутанных кубитов вычисление происходит не по одному числу, а сразу по всем (суперпозиция же: представьте себе три бита, в которых одновременно закодированы все числа от нуля до восьми). И с помощью вышеупомянутых гейтов квантовый программист может выделить правильный ответ. Так сказать, пометить. Поставить знак минус в наборе амплитуд вероятности, который никак не влияет на вероятность (она же, помните, квадрат амплитуды). Физически этот минус ничего не значит, а вот для алгоритма это важно. Опять же через все эти логические вентили мы вытаскиваем нужное помеченное значение и остается его только прочитать.
Наш любимый пытливый читатель спросит, но ведь у нас там одни вероятности, даже если мы получаем правильный ответ, то ведь нет никакой гарантии, что при считывании результата мы получим нужное значение? Программисты оригинально решают проблему с помощью усилителя вероятностей. Это еще один заумный блок операторов квантового алгоритма, который занимается тем, что повышает вероятности нужного нам значения. Поэтому квантовый компьютер считает не один раз, а несколько, с каждым разом увеличивая вероятность правильного считывания результата. Так как существует хоть и небольшая, но ненулевая вероятность неправильного ответа, то результат дополнительно проверяется обычным компьютером.
В итоге даже при условии, что квантовый компьютер решает задачу несколько раз ради высоковероятной точности ответа, всё равно результат мы получаем намного быстрее, чем при использовании классического компьютера.
Отметим, что квантовый алгоритм не один, их существует несколько для разных задач. Самые известные это алгоритм Гровера (для задач перебора), алгоритм Шора (для разложения числа на множители), алгоритм Дойча (определение типа функции) и так далее. Да, они сложные, трудно описываемые человеческим языком, с непривычной логикой и непонятными символами. И все-таки вы можете найти в интернете сервисы, позволяющие почувствовать себя квантовыми программистами. На сайте того же IBM есть возможность поиграться с квантовыми гейтами на пяти кубитах. Конечно, квантовые крестики нолики вы не создадите, но въехавшему в тему сложить два числа будет вполне под силу.