Умным людям давно не давали покоя квантовые эффекты, но не только потому, что их философская интерпретация не подчиняется здравому смыслу, но и в сугубо практическом смысле. Вот бы как-то взять эти эффекты и применить для нужд народного хозяйства, думали они. Считается, что первым это громко спросил Ричард Фейнман, который действительно разбирался в предмете. Квантовые расчеты требуют квантовых решений — вот его совсем недословная цитата. И пока технологии медленно развивались, некоторые физики, умеющие в математику, предложили кое-какие алгоритмы, с которыми было бы забавно поиграться на квантовых штуковинах.
В основе обычного компьютера у нас лежит понятие бита. Битом может быть любой объект, который является нам в двух однозначных состояниях: черный-белый, теплый-холодный, север-юг, плюс-минус. Если не забивать голову реализацией устройства бита, то мы для упрощения пользуемся понятием 0 или 1. Полагаем, что читатель имеет представление об основах информатики, так как в наше просвещенное время без компьютеров как без рук. Важное в этих ваших битах то, что мы всегда, в любой момент знаем или можем узнать их значение. Бит либо включен, либо выключен. Либо ноль, либо один. Когда мы считываем его значение, то это значение не пропадает, не меняется, не превращается в черную дыру, оно гарантированно сохраняется для потомков. Когда мы проводим операции над битами, результаты тоже подчиняются строгой бинарной логике и не выдают неожиданных значений. Два плюс два равно четыре.
А вот если мы возьмем что-нибудь с квантовыми эффектами, то тут с определенностью, сами знаете, как-то уже не очень. Квантовые объекты в этой главе мы будем называть кубитами (кстати, кубики тут не причем, Q-бит, квантовый бит — и всего-то). Кубитом может быть вещь, состояние которой находится в суперпозиции: электрон, у которого спин одновременно и вверх и вниз, или пространственная ориентация фотона, когда электромагнитное поле как бы вдоль и поперек (поляризация), или даже кот Шрёдингера, живой и мертвый одновременно.
Для квантовых вычислений интерес представляет совсем не итоговое значение кубита, измерение состояния кубита означает конец игры и ничего феноменального в себе не несет. В квантовых вычислениях всё веселье состоит в манипуляции вероятностями состояний кубита. Вы можете и не поверить, но технически мы способны менять вероятности обнаружения кота живым. К примеру, вот у нас коробка с котиком, мы знаем, что вероятность потискать его живого — 50 %. А вот нажимаем волшебную кнопку, и вероятность спасения кота уже 80 %. Или даже 100 %. Или ноль. При этом мы не знаем, что там с котом, не знаем, каким мы его обнаружим, когда откроем коробку. Ведь даже при вероятности 99 %, что он жив, Вселенная может выкинуть нам однопроцентный трагический исход. Но, мы знаем вероятности и умеем с ними обращаться.
Читатели конечно же понимают, что кубиты из котиков это плохая идея, поэтому квантовые алгоритмы ваяют на фотонах и электронах. Электрон пропускают через магниты и добиваются поворота его спина таким образом, что при измерении вероятность спина, скажем, вверх, будет 100 % или 60 %, 50 %, 10 % и так далее. Главное, что состояние электрона не измеряется, а через воздействие, меняются вероятности, не разрушая суперпозиции. Да, технически это сложно, частицы пытаются свалить в закат, сколлапсировать по любому поводу, провзаимодействовать с космическими лучами, сбиться с курса от кашля в соседнем подземелье и так далее. Поэтому головная боль инженеров совсем не в алгоритмах, а в том, как держать кубиты в изоляции от внешнего мира — только тогда они будут работать как требуется.
Итак, не углубляясь в технические детали, мы уразумели, что в квантовых вычислениях, мы творим с вероятностями странные вещи. И тут хитрые математики предложили несколько логических операторов для манипуляций с состояниями кубитов. В обычном доисторическом компьютере логические операторы опять же известны любому, кто хоть раз пытался в Экселе упростить себе сбор отчета с помощью формул. Помните, все эти логические И, ИЛИ, НЕ? Это операторы над битами, которые принимают одни значение битов и выдают другие. С кубитами такие операции не прокатят, потому что применение такого оператора на обычном компьютере означает считывание значения бита, его измерение и дальнейшая обработка результата. В квантовом компьютере мы должны как можно дольше издеваться над кубитом, не выясняя его значение.
Вот почему в квантовой логике используются другие операторы. Чаще всего их называют логическими вентилями или гейтами. Так типа круче, сразу видно, что не олдскул какой-то, а квантовый программист. Будем тоже использовать эти словечки, что мы хуже что ли?
Все гейты мы описывать не будем. Расскажем про самые известные.