antihydrogen: (spherical wave)
[personal profile] antihydrogen
Про квантовый компьютер все слышали. Кто-то боится, что он лишит работы всех современных программистов (особенно этого почему-то бояться php-программисты),  кто-то отрицает, что он когда-нибудь будет создан. Чтобы развеять опасения и подготовить широкие программистские массы к новому стилю программирования я пишу этот пост.

Собственно, дальнейшее есть изложение модели квантового компьютера на классическом. Оперативная память квантового компьютера – массив из 2N комплексных чисел (N – число кубитов). Набор кубитов – набор индексов массива (или же набор цифр в двоичном представлении сквозного индекса массива, если желаете). Операции с массивом не произвольны, а ограничены следующими правилами:

I.    Возможны только операции по маске, над целыми блоками массива. Однокубитные операции – это на самом деле операции над половинками массива, двухкубитные – над четвертушками, трехкубитные – ну вы поняли. Например, операция «квантовое NOT» – это просто обмен двумя половинками массива:
Anew(****0***) = A(****1***)
Anew(****1***) = A(****0***)
Здесь Anew – новое состояние массива, звездочка – произвольное состояние индекса, запятые между индексами опущены, операция выполняется над четвертым кубитом справа.

Двухкубитная операция «контролируемое NOT» - обмен двух четвертушек с оставлением остальной части неизменной:
Anew(*1**0***) = A(*1**1***)
Anew(*1**1***) = A(*1**0***)
В примере седьмой кубит справа – контролирующий.

II.    Что бы вы не делали, сумма квадратов модулей элементов массива должна равняться единице. Из-за этого, простое сложение и вычитание не относяться к базовыми операциям, вместо них есть т.н. преобразование Адамара, сложение и вычитание двух половинок массива с делением на корень из двух:
Anew(****0***) = ( A(****0***) + A(****1***) ) / √2
Anew(****1***) = ( A(****0***) - A(****1***) ) / √2
А вместо умножения на число – умножение половинки массива на фазовый множитель:
Anew(****1***) = exp(iδ) A(****1***)

III.    Инициализируется массив присвоением единицы одному из элементов, и нуля всем остальным.

IV.    Из массива можно извлечь только квадраты модулей элементов, для извлечения элемента требуется многократные перезапуски программы, число перезапусков обратно пропорциональна величине элемента. Поэтому программа должна выдавать ответ в форме как можно меньшего количества ненулевых элементов, в идеале - выставлять в единицу единственный элемент массива, индекс которого и будет ответом.

Для выполнения любого алгоритма достаточно перечисленных выше однокубитных и одной двухкубитной команды - контролируемого NOT. Мудреность низкоуровневого программирования компенсируется потенциальной огромностью доступной оперативной памяти (при 270 кубитах число элементов массива превышает число атомов в видимой части Вселенной) и тем, что операции над массивом выполняются за один такт.

Существует куча библиотек для разных языков для эмуляции квантового компьютера, где вышеописанные операции уже реализованы. Есть и специализированные языки для управления квантовыми компьютерами, за неимением последнего управляющие его моделью, реализованной с помощью одной из помянутых библиотек. Достоинства квантового компьютера являются проблемами при его эмуляции: при числе кубитов N > 30 (для мощного домашнего компьютера) или N > 50 (если у вас есть суперкомпьютер) массив не поместиться в оперативной памяти.

Что касается советов соискателям грядущих рабочих мест в сфере квантового компьютинга: к собеседованию надо будет выучить, что такое квантовое преобразование Фурье – оно понадобится как в криптографии, так и в индустрии легкого молекулостроения (про квантовое моделирование квантовых систем я планирую написать отдельный пост). 1С-программистам, лишившимся работы из-за грядущей квантовой революции в бухучете (вероятностный бюджет, мнимые активы… ну собственно ничего существенно не изменится), можно посоветовать учить алгоритм Гровера. А вот что делать php-программистам, не знаю – даже в шутку не могу представить применения квантового компьютера в веб-дизайне.
From:
Anonymous( )Anonymous This account has disabled anonymous posting.
OpenID( )OpenID You can comment on this post while signed in with an account from many other sites, once you have confirmed your email address. Sign in using OpenID.
User
Account name:
Password:
If you don't have an account you can create one now.
Subject:
HTML doesn't work in the subject.

Message:

 
Notice: This account is set to log the IP addresses of everyone who comments.
Links will be displayed as unclickable URLs to help prevent spam.
Page generated Jul. 27th, 2017 06:47 pm
Powered by Dreamwidth Studios