Языки программирования для квантового компьютера

Что нужно знать, чтобы начать заниматься квантовыми вычислениями

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Несмотря на относительно старую технологию, только в последнее время квантовые вычисления привлекли к себе много внимания как индустрии, так и СМИ. Квантовые вычисления впервые появились ещё в 1980-х годах. Но есть несколько причин, по которым популярность этой технологии растёт именно сейчас.

За последнее время квантовые вычисления из чистой теории превратились в нечто практическое. Появились настоящие квантовые компьютеры, на которых можно запускать простые программы.

Более того, разные компании прилагают много усилий для повышения уровня знаний о квантовых вычислениях среди тех, кому это интересно.

Мы живем в эпоху технологий: они нас окружают. Как специалисты по обработке данных, мы ежедневно сталкиваемся с тем, что их объём увеличивается. Увеличение объёмов данных, которые необходимо обрабатывать, анализировать и очищать, дают шанс продемонстрировать, как квантовые технологии могут помочь преобразить науку о данных и многие другие научные области.

Проблема в том, что человек, занимающийся квантовыми вычислениями, спрашивая другого человека о том, почему он не хочет присоседиться к этой сфере, обычно слышит в ответ одно из двух:

1. Я недостаточно умён, чтобы присоединиться.

2. Это так сложно и нужно много знаний из математики, в которой я не разбираюсь/которую не люблю.

В этой статье я хочу поговорить с вами как человек, который пришёл в эту сферу недавно, чуть больше двух лет назад. Я хочу показать вам, что большинство проблем, мешающих вам окунуться в работу в сфере квантовых вычислений, на самом деле нерелевантные.

Я хочу показать, что конкретно нужно, чтобы заниматься квантовыми вычислениями. И я хочу рассказать, что начать заниматься квантовыми вычислениями не сложнее, чем заниматься наукой о данных или любой другой технической наукой.

Что же нужно, чтобы начать работу с квантовыми вычислениями

Я постараюсь рассказать, какие знания могут вам понадобиться для начала работы с квантовыми вычислениями в зависимости от ваших задач.

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

А если вы захотите изучить конструкцию кубитов и то, как они работают, вам понадобится больше знаний по физике и механике, чем по программированию и математике.

Программирование

Чтобы начать работу с квантовыми вычислениями, вам потребуется знание основ программирования. Уже существуют некоторые языки программирования, предназначенные только для квантовых компьютеров, но вам не нужно их знать на начальном этапе.

Одним из наиболее часто используемых языков программирования для существующих квантовых компьютеров является Python.

Если вы захотите попробовать запрограммировать квантовый компьютер, я бы посоветовал вам начать с инструментов с открытым исходным кодом на платформе Qiskit, разработанную IBM. Qiskit не только позволит вам запрограммировать реальный квантовый компьютер IBM, но и поможет вам без труда изучить многие квантовые концепции. После освоения квантовых концепций вы сможете попробовать изучить квантовый язык программирования.

Математика

Математика, наверное, занимает первое месте среди причин, которые отпугивают от квантовых вычислений. Не стану врать — в этой сфере математика нужна.

Но математика нужна и в других технических областях, таких как машинное обучение, искусственный интеллект и обработка естественного языка. Фактически, для некоторых из этих областей науки о данных нужна более сложная математика, чем для квантовых вычислений. Я знаю, звучит неправдоподобно, но это правда.

Основной раздел математики, позволяющий квантовым вычислениям творить чудеса, — это линейная алгебра. Всё в квантовых вычислениях — от представления кубитов и вентилей до функциональности схем — можно описать с помощью различных методов линейной алгебры.

Ещё один раздел математики, связанный с квантовыми вычислениями, — это основы теории вероятностей.

Всё. Линейная алгебра и теория вероятностей. Два раздела, связанные со всеми подразделами науки о данных и большинством современных технических областей.

Нельзя сказать, что по мере продвижения в этой области ничего не будет усложняться. Но разве так не во всех сферах?

Физика / механика

Внутренние функции квантовых вычислений, такие как запутанность и квантовая суперпозиция, являются чисто физическими явлениями. Определённые законы физики контролируют и объясняют, почему они происходят.

Однако внутренние функции классических компьютеров такие же. Вам не нужно точно знать, как работает оборудование вашего компьютера, чтобы с его помощью создавать крутые вещи. Вам нужно только знать, как им пользоваться.

Такая же логика применима к квантовым вычислениям. Чтобы быть разработчиком квантового программного обеспечения, вам только нужно узнать, как работает квантовый компьютер, а затем использовать его для создания собственных приложений.

Если вы собираетесь работать над созданием оборудования для квантовых вычислений, тогда вам действительно понадобится разобраться в физике и механике работы квантового компьютера.

То же самое необходимо, если вы хотите построить классический процессор или графический процессор. Вы должны разобраться в физике, которая позволяет этому оборудованию работать корректно.

Любопытство

На мой взгляд, любопытство — это самый важный элемент, необходимый для того, чтобы заниматься квантовыми вычислениями. Я знаю, что любопытство — это не какое-то знание, но о нём очень важно упомянуть.

Я занялся квантовыми вычислениями, потому что мне было любопытно, как они могут улучшить наши современные технологии. Как можно сделать что-то очень продвинутое ещё более продвинутым? Мне было любопытно узнать больше о квантовых вычислениях, потому что поначалу это звучало как научная фантастика, а не инструмент разработки.

У большинства моих коллег был такой же настрой при знакомстве с этой сферой. Людям свойственно тянуться к тому, что пробуждает фантазию. Нас увлекает то, что работает не так, как мы привыкли.

Именно любопытство привело ко всем существующим научным и техническим достижениям и ещё приведёт ко многим другим в будущем.

В заключение

Квантовые вычисления ничем не отличаются от любых других технических сфер. У них плохая репутация, просто потому что однажды слово «квантовый» приравняли к слову «сложный». Как только кто-то упоминает слово «квантовый», первое, что приходит вам в голову и приходило мне до недавнего времени: «О, это наверно очень сложно!». Поэтому я бы хотел сделать акцент на двух вещах.

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

Во-вторых, дайте волю своему любопытству. Позвольте ему подтолкнуть вас к исследованиям и экспериментам в новых сферах. Могу заверить что, если у вас возникает любопытство к квантовым вычислениям, значит у вас достаточно умственных способностей для этого.

Вы достаточно умны, чтобы заниматься любой сферой, а не только квантовой. Поэтому не позволяйте слову «квантовый» запугать вас или помешать вам погрузиться в этот таинственный мир. Я здесь, чтобы сказать вам, что сейчас для этого лучшее время.

Источник

Учимся программировать квантовый компьютер на основе игры «Морской бой»

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

«Квантовые компьютеры — довольно интересный новый вид вычислительной техники. Они словно мчатся через немыслимое количество параллельных вселенных, чтобы быстрее запускать программы. В их работе используются принципы, вводившие в заблуждение даже Эйнштейна. Это волшебные коробки, из-за которых ваши блоки с транзисторами будут храниться в пыли», — вероятно, такой текст вы увидите в популярных научных статьях. Они, несомненно, внесли свой вклад в то, чтобы новая технология звучала здорово. Однако они же, авторы подобных статей, могут превратить квантовые вычисления в какое-то оккультное искусство, заниматься которым позволено только самым умным учёным. Но несмотря на то, что это не так, большая часть программистов не увлекается квантовыми вычислениями.

Такие компании, как IBM и Google, занимаются созданием квантовых устройств. Это значит, что время игры с кубитами уже настало.

На начальном этапе программирования квантовых компьютеров вам ничего сверхъестественного делать не нужно будет. Ведь можно начать своё путешествие в мир квантового программирования с того же, с чего начинается и стандартное программирование — с создания игр.

Не беспокойтесь, для этого не нужно иметь собственное квантовое вычислительное устройство. Запуск простых квантовых программ можно симулировать на обычном компьютере благодаря сервисам IBM.

Примечание Обратите внимание, что код на Python, приведённый в статье, далёк от идеала и служит лишь для объяснения принципов работы квантового компьютера.

Рассматриваемая игра относится к самым первым играм для квантовых компьютеров. Для полного понимания её работы в статье будут показаны блоки кода, так что можете экспериментировать по ходу статьи.

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

Что такое квантовый компьютер?

Перед написанием программы нужно усвоить некоторую базовую информацию. Однако здесь не будет описываться детально работа квантовых компьютеров. Вы ознакомитесь только с той информацией, которая поможет понять, как работает игра.

В основе работы обычного компьютера лежат биты — переменные, имеющие только два значения: 0 и 1. Хотя, в контексте булевой алгебры их также можно называть «true» и «false». Неважно, как мы их называем. Важно лишь то, что существует два состояния.

С помощью битов можно выполнить простые битовые операции, такие как побитовое отрицание (NOT), побитовое «И» (AND) и побитовое «ИЛИ» (OR). Они являются основой вычислений. С битами можно сделать всё что угодно. Любая более сложная переменная, чем бит ( int или float ) — это просто набор из множества битов. Любая более сложная операция, чем побитовое «И» или побитовое отрицание (NOT) — это просто несколько таких операций, соединённых вместе. Именно так и работает обычный компьютер на самом базовом уровне.

В основе квантовых компьютеров лежат квантовые биты (кубиты). Они тоже имеют два возможных значения — 0 и 1. Однако законы квантовой механики допускают другие значения, которые называются состояниями суперпозиции.

В каком-то смысле состояния суперпозиции представляют собой значения, существующие между экстремумами 0 и 1. Кубит можно представить в виде сферы, на которой 0 и 1 расположены на противоположных полюсах, а состояния суперпозиции — все остальные возможные точки на её поверхности.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Такой ход мысли выставляет кубиты чем-то похожим на непрерывные переменные. Можно представить любую точку на поверхности сферы (например, точку ψ в изображении), используя полярные координаты с углами ( θ и φ ). В принципе простительно полагать, что кубиты — плавающие значения (изменяют своё значение). В некотором смысле они ими и являются. Но с точки зрения абсолютной точности это не так.

Важной отличительной чертой кубита является невозможность извлечения из него недвоичной информации. Законы физики по своей природе нам не позволяют узнать, что именно кубиты делают. Не получится спросить у кубита точные детали о положении его суперпозиции. Можно только заставить выбирать его между двумя противоположными точками на сфере (вроде 0 и 1). Если это что-то, что не является ни нулём, ни единицей, то кубиту просто нужно будет случайным образом решить, что выбрать.

Кубит имеет некоторые свойства непрерывной и дискретной переменных, но не является ни той, ни другой. Кубит — квантовая переменная.

Что предстоит делать с кубитами?

В этой статье будет использоваться японская версия «морского боя». В ней все корабли представляют собой только один квадрат, но по некоторым из них нужно выстрелить дважды или трижды.

Можно использовать кубит для каждого корабля, чтобы симулировать эти действия на квантовом компьютере. Ноль может означать невредимый корабль, а единица — полностью уничтоженный корабль. Состояния суперпозиции могут служить для отображения степени повреждений корабля. Корабль, уничтожаемый с одного выстрела, довольно просто симулировать. Можно его инициализировать с нулём, а затем применить побитовое отрицание (NOT), когда он будет уничтожен.

Давайте посмотрим, как реализовать этот простой процесс на квантовом компьютере. Мы не будем обращать внимание на какие-либо другие корабли на этом этапе.

Основной язык сборки для квантовых компьютеров называется QASM. Ниже представлен скрипт, который инициализирует корабль, атакует его, а затем проверяет, на плаву ли он ещё.

Теперь появился ещё один способ представления побитового отрицания при работе с кубитом: можно выполнить половинное побитовое отрицание дважды.

Аналогичные действия можно сделать с 1/3 побитового отрицания, выполнив его трижды и так далее.

Последняя строка в файле на QASM выглядит так:

Если ничего не было сделано в период между инициализацией и измерением, то результат всегда должен быть таким: c[0] = 0

Если было выполнено побитовое отрицание, то результат всегда должен быть таким: c[0]=1

Эта вероятностная природа придаёт квантовым вычислениям некую случайность. Дополнительная хаотичность также присутствует в современных устройствах из-за шумов. Хотя это и происходит на довольно низком уровне, не стоит об этом забывать. Именно из-за шума иногда получается 1 на выходе, вместо 0 и наоборот.

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

Создание игры

Итак, давайте же использовать способы выполнения побитового отрицания для создания игры на квантовом компьютере.

Но для начала откроем тайну квантовых компьютеров. Такие устройства всегда гибридны (на данном этапе развития технологий) — часть квантового компьютера и часть обычного. Последний необходим для обработки входов и выходов, чтобы взаимодействовать с людьми, которые хотят воспользоваться им.

Гибридная природа устройства повлияет на способ написания кода. Использование QASM отлично подходит для программирования квантовой части устройства, а, например, Python — для стандартной, так как многие разработчики знакомы с этим языком программирования.

Это тот способ, который используется в текущей версии API IBM. И именно его мы используем в этой статье. Есть, конечно, другие подходы, например, Project Q.

Важно отметить, что все эти подходы до сих пор развиваются. А разработчики программ для квантовых компьютеров задают направление этой «эволюции».

Для запуска программы вам потребуется Jupyter, а также зависимости SDK.

Теперь давайте обратимся к коду.

Прежде всего нужно импортировать всё, что понадобится для запуска кода на IBM Quantum Experience.

Далее следует несколько стандартных импортов и некоторая информация об игре, выводящаяся на экран.

На следующем этапе нужно добавить ещё одну важную переменную: количество запусков. Это нужно для сбора статистики.

Нет никаких определённых причин для использования числа 1024. Вы можете выбрать другое.

Теперь нужно перейти к настройке досок, на которых игрок будет выбирать позиции для трёх кораблей. Доступно всего 5 возможных позиций, соответствующих пяти кубитам на чипе IBM ibmqx2. Ниже представлена визуализация сетки.

Получение выбора от игроков в основном осуществляется следующим образом:

Примечание Обратите внимание, что в статье приводятся блоки кода. Ссылка на полный код будет в конце статьи.

Сейчас у нас достаточно информации для запуска процесса на квантовой микросхеме. Нам известно, какие кубиты должны быть кораблями и где их бомбить. Пришло время создать соответствующий файл на QASM.

Если мы пишем файл напрямую, то начать следует так:

Код объявляет квантовые и стандартные биты, которые нам понадобятся. 5 кубитов используются для отражения физической мощности чипа. Таким образом, каждый корабль ассоциируется с физическим кубитом. Кроме того, мы используем 5 стандартных битов, чтобы избежать появления бага, который до сих пор есть у IBM.

Вместо написания QASM файла напрямую, мы попросим Python сделать это за нас. Таким образом, вместо вышеупомянутого вступления нужно определить словарь, содержащий те же спецификации.

Здесь «gridScript» — то, что мы называем схемой в спецификациях. А gridScript — то, на что мы будем ссылаться при добавлении новых операций. Можно было бы использовать разные имена, но уже поздно.
Чтобы добавить операции над квантовыми и классическими битами, нужно определить, как мы будем ссылаться на них в коде.

Предположим, что мы хотим применить некоторую часть побитового отрицания к некоторому кубиту. Это означает, что нам нужно добавить следующую строку в gridScript :

Но при помощи замены frac и position на числа. Это можно сделать следующим образом на Python:

Используя этот код, мы можем добавить все бомбы, которые оппонент взрывает на сетке. Для сетки игрока мы должны охватить все три позиции, где есть корабли. Затем нужно добавить строку в gridScript для каждой бомбы, которая была сброшена.
Ранее было упомянуто, что три корабля в этой игре будут иметь разную броню. Первый помещённый игроком корабль будет уничтожен с первого раза, по второму нужно выстрелить дважды, а по третьему — трижды.

После завершения бомбардировки наступает время просмотра результатов. Для этого нужно добавить команды измерения. Каждый кубит в регистре измеряется и результаты копируются в соответствующий стандартный бит. Так это реализуется:

Это создаёт строки кода на QASM:

Здесь device и shots были определены ранее, когда мы попросили игрока выбрать устройство. Прогресс будет обновляться каждую секунду простоя, а затем перестанет обновляться после таймаута.

Предполагается, что вам не нужно ждать результаты больше минуты. Но если вы действительно хотите играть на квантовом компьютере, возможно, придётся увеличить это время. Квантовые компьютеры могут быть быстрыми, но иногда они выполняют некоторые задачи перед запуском ваших.

После выполнения задания можно извлечь данные:

Мы интерпретируем дробь в виде процентного урона для корабля для тех моментов, когда кубит измерялся единицей. Нельзя ожидать 100%-го урона из-за влияния шумов (или погоды, если перенестись в нашу вселенную). Поэтому считаем, что урон превышает 95%, так как корабль утонул.
Давайте рассмотрим несколько примеров на выходе из квантового процесса. Предположим, что один игрок поставил свой третий корабль на позицию 2. Затем оппонент его бомбит. Результат будет примерно таким:

Здесь во время 290 запусков из 1024 было найдено 1 в позиции 2, показывая, что корабль действительно был повреждён.

Другой пример: один игрок поместил свой корабль на позицию 1, а второй — на позицию 2. Оппонент бомбил позицию 1 в первом раунде и позицию 2 во втором раунде. Результаты были бы такими:

Эти результаты были хорошими и чистыми, поэтому можно сказать, что они были выполнены на симуляторе. На реальном устройстве вы можете рассчитывать на нахождение меньшего количества результатов с 1 для кораблей, которые не были взорваны и для кубитов, которые даже не являются кораблями.

Если произошла ошибка при извлечении файла QASM на квантовом чипе (или симуляторе), то на выходе вы увидите такое сообщение:

В таком случае нам не нужно пытаться обрабатывать результаты. Поэтому было создано условное утверждение, чтобы выйти из этой ситуации, если она произойдёт.

Обработка битовых строк не является чем-то уникальным для квантовых вычислений.
Как только проценты ущерба будут рассчитаны, игроки увидят состояние своих кораблей. Например, если один корабль в позиции 2 был поражён на 50%, это будет выглядеть следующим образом.

Игра продолжит запрашивать бомбардировки и запускать сценарий, пока один из игроков не потеряет все свои корабли. В этот момент побеждает другой игрок.

Вы могли заметить, что бомбардировка третьего корабля игрока даёт урон около 25%, поскольку этот корабль является третьим на пути к уничтожению. Вы, вероятно, ожидали, что урон будет составлять 33%. Но нет, тут дело в тригонометрии. Сейчас не будем на этом останавливаться.

На этом статья подходит к концу. Морской бой теперь запускается на квантовом компьютере. Конечно, не самое необычное применение для квантового компьютера и не самая необычная версия морского боя, но всё-таки это интересно.

Чтобы понять материал лучше, ознакомьтесь с полным исходным кодом и посмотрите на игру в действии.

Источник

Учимся квантовому программированию с помощью примеров. Доклад Яндекса

Сегодня любой желающий может воспользоваться методами квантового программирования, написать простой код на Python и запустить его на реальном квантовом вычислителе. Ришат Ибрагимов rishat_ibrahimov разобрал основы квантовых вычислений на примерах с кодом, показал, как запускать программы на локальном симуляторе и удаленном квантовом компьютере.

— Всем привет, меня зовут Ришат. Я почти три года работаю над качеством поиска Яндекса. Но поговорить сегодня хочу не о работе, а о том, чем я занимаюсь в свободное время. Занимаюсь я квантовой информатикой, а на самом деле — самыми разными моделями вычислений, в том числе квантовыми.

Квантовая информатика — это сейчас достаточно интересная область. Туда много сил вкладывается, много всего сделано. В докладе я постараюсь заинтересовать кого-то из вас. Может быть, среди вас есть крутой ML-инженер, который захочет заниматься квантовым машинным обучением, или просто сильный алгоритмист, который сможет вложить свои силы в это направление. Будет здорово, потому что будущее скоро наступит.

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

От вас я жду, что вы совсем немножко помните алгебру, помните, что такое вектор и как умножить вектор на матрицу.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Как будет построен мой доклад? Сначала мы поговорим немного об истории, о том, откуда все взялось, чтобы уверенно смотреть в будущее. Потом посмотрим, где это можно применять, какое сейчас состояние, можно ли прямо сейчас что-то делать руками. Мы напишем первую программу на Python, которую можно будет запустить на квантовом компьютере. И потом в качестве бонуса я вам покажу несколько примеров алгоритмов, в которых квантовые вычисления помогают добиться несравненно лучшей производительности по сравнению с классическими.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

С чего все началось? Вот с этого молодого человека. Это Алан Тьюринг, его можно смело назвать отцом информатики или компьютерных наук, того, за счет чего мы все сейчас живем, зарабатываем деньги. В 30-х Тьюринг придумал модель вычислений, которую мы бы сейчас назвали программируемый компьютер. А вот этого человека кто-нибудь узнает?

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Уже сложнее. Его фамилия очень часто идет рядом с фамилией Тьюринга. Это Алонзо Чёрч, он тоже занимался проблемами вычислимости, и даже немножко раньше Тьюринга придумывал свои модели вычислений. Но более популярными стали работы Тьюринга. И вообще, Чёрч в какой-то момент был научным руководителем Тьюринга. Взятые вместе, их фамилии обычно связывают вот с этим тезисом.

Тезис Чёрча-Тьюринга говорит: любой процесс может быть эффективно смоделирован на машине Тьюринга. Это конец 30-х – начало 40-х, и все очень хорошо. Примерно 30 лет всё очень хорошо, пока не появились вот эти два человека. Кто-нибудь их знает?

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Это уже 70-е, совсем близко к современности. Их фамилии часто встречаются в курсах криптографии. Это Роберт Соловей и Фолькер Штрассен. Эти два человека знамениты тем, что они придумали вероятностный алгоритм проверки числа на простоту, тест Соловея-Штрассена.

И это очень важный момент для нас, потому что до сих пор мы говорили, что любой алгоритмический процесс можно смоделировать на машине Тьюринга. Но сейчас получается, что их алгоритм смоделировать нельзя. Он вероятностный, в машине Тьюринга ничего такого нет.

Пришлось сделать быстрофикс и сказать, что любой процесс можно смоделировать на вероятностной машине Тьюринга. Это уже не очень круто, наверняка у кого-то из вас в груди тоже защемило. Вы подумали: как же так? Сейчас мы говорим «вероятностный», через десять лет откроют еще что-нибудь, придется еще что-нибудь править. Это не очень приятно. Но мы с вами, конечно, не одни такие.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Был еще один молодой человек — Дэвид Дойч. И он тоже задавался вопросом: как же так? Как же жить? Он физик по образованию, всю жизнь посвятил физике. И решил заняться этой проблемой именно с точки зрения физики. Он сказал: давайте попробуем обосновать, получить какой-нибудь такой, чтобы сама природа нам говорила о том, что это именно так. А природа уже тогда говорила (и мы до сих пор считаем), что она квантово-механическая. Поэтому мы начали искать ответ в квантовой механике. И именно с Дэвида Дойча, с его первых алгоритмов, началась квантовая информатика.

Это такой небольшой экскурс в историю, чтобы вы понимали: это взялось не на ровном месте. В этой облассте есть реальные проблемы, теоретические, конечно, которые мучают людей, с которых все началось.

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

Например, у нас в институте есть целое отделение, которое занимается квантовой информатикой. Там есть и математики, и физики. Физики сейчас очень плотно занимаются проблемой долгосрочного хранения квантовой информации. Это очень похоже на наши жесткие диски, но хочется, чтобы там хранилась квантовая информация.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

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

Второй и очень большой раздел, которому сейчас посвящено много сил, — квантовое машинное обучение. Есть очень большая надежда, что квантовые вычисления помогут ускорить сами процессы обучения и усовершенствовать алгоритмы. Тут очень много работы. Сейчас, например, наша квантовая группа работает вместе с одним ученым из Китая. Он очень сильный ML-инженер, а мы немного с квантовым уклоном, пытаемся что-то вместе придумать.

Третья штука несколько месяцев назад была немного хайповая. Сейчас, может, хайп уже спал, но есть даже целый квантовый блокчейн. Его придумал мой хороший друг и большой товарищ. Это я так, немного с гордостью говорю.

Но квантового компьютера у нас нет. К сожалению, мы не можем прийти домой и так же просто, как мы программируем на Python, запустить программы.

Что делать? О том, что делать, я думал еще на третьем курсе, когда писал свою первую курсовую работу. Я писал эмулятор квантовых вычислений. Конечно, все пишут эмуляторы и все ими как-то пользуются. На четвертом курсе я писал эмулятор, который имитирует помехи, шумы и всякое прочее. А потом мне надоело.

Я попробовал поискать в поисковике и понял, что эмуляторов много. Здесь несколько ссылок, они достаточно простые и интересные:

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Он работает в двух режимах. Первый — как и все, обычный локальный эмулятор. Второй — запуск вашей программы на настоящем квантовом компьютере IBM Q, который выглядит примерно так.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Сейчас это целая бочка, в которой поддерживается экстремально низкая температура — порядка трех милликельвин. Это очень холодно. И IBM предоставляет возможность с помощью облачных технологий подключиться и запустить ваш код прямо на этой машине.

Конечно, он специальным образом компилирует туда команды и все прочее. Как это вообще работает? Для общего доступа есть несколько инсталляций такого компьютера. Один из них 5-кубитный, есть 15-кубитный, 16-кубитный, нам доступны даже 20 кубит. Это примерно как 20 бит обычной, классической информации, но уже что-то.

Тут наверняка многие из вас думают: все, хочу! Но придется немного вспомнить математику. Немного алгебры, но совсем чуть-чуть, как я и обещал.

Чтобы начать программировать на квантовом компьютере, нужно понять, что вообще такое кубит. Это просто вектор в двумерном векторном пространстве. Но раз уж мы говорим о векторных пространствах, в них есть базис.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Базис выглядит примерно так. Есть два векторных столбца и единичный базис, стандартный, в курсах алгебры его так обозначают:

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

. И есть стандартное обозначение в нотации Дирака, вот в таких угловых скобочках.

То есть, чтобы вы не путались, сокращать я дальше буду так.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

И поскольку это вектор, его состояние можно записать так. Кубит q — это суперпозиция двух базисных векторов, где α и β — комплексные чиселки, но не совсем любые, а чтобы сумма модулей их квадратов была равна единице.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Если эту штуку попробовать нарисовать, мы получим, что кубит — это вектор на трехмерной сфере. В одном кубите может храниться бесконечно много информации, ведь это просто вектор, которого бесконечно много.

Можно не обращать внимания на картинку, это просто способ визуализации для привлечения внимания.

Про кубиты поговорили. Самое главное, что кубит — это вектор. Вектор в комплексном векторном пространстве. Что с ним можно делать?

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Первое, что мы привыкли делать, — попробовать посчитать значение нашей переменной, например, в Python. Мы хотим прочитать, в каком состоянии находится кубит. Но мы никогда не узнаем точные значение α и β.

Если мы попробуем посмотреть на кубит, прочитать, то мы получим или нолик, или единичку с соответствующими вероятностями. Вероятности –—это просто проекции на соответствующие базисные вектора.

Второе, что мы можем делать, — например, склонировать кубит. Мы такое называем присваиванием одной переменной другой. В квантовом мире так делать нельзя, к сожалению.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Операции присваивания нет, и это очень связано с тем, о чем я говорил только что: мы даже не сможем посмотреть точное значение. Это фундаментальный результат. Доказывается он очень просто: буквально две строчки сравнений, от противного.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Есть кубит, который мы не можем прочитать, не можем склонировать. Что можно вообще делать?

Кубит — это вектор. Вектор можно взять и покрутить по сфере вокруг. Чтобы покрутить, можно придумать матрицу, которая это вращение делает. Все операции над кубитами — это матрицы. Они называются унитарными.

Унитарные — чтобы выполнялось такое условие, оно тут записано хитрым образом. Этот значок означает транспонированную и комплексно-сопряженную матричку. Свойство очень важное, оно означает, что для любой операции есть обратная. То есть как бы мы ни покрутили вектор, мы всегда можем его вернуть в прежнее положение. Всегда существует обратная операция.

Посмотрим, какие операции могут быть. То, к чему мы привыкли в классическом случае. Есть нолик, можно превратить его в единичку и наоборот.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Это оператор отрицания, он очень простой. Записывается вот такой матричкой. Если мы попробуем перемножить, получим ровно то, что хотим.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

У меня тут даже нарисовано. Ничего сложного. У оператора отрицания есть стандартная запись, оператор X. Если подумать, это просто вращение вокруг одной из осей. И есть операторы Y и Z, вращение вокруг других осей, но это сейчас не так важно.

И мы уже можем запустить нашу первую программу на квантовом компьютере, которая будет делать отрицание кубита.

Но мы в квантовой информатике, конечно, очень редко пишем на Python. Чаще мы пользуемся схемами.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Схема обычно выглядит так. Горизонтальные линии — это просто значения кубит. У меня тут их нарисовано пять. А в блоке — операция, которую мы будем делать.

Первый блок. Здесь нарисован измерительный прибор. Это значит, что мы просто хотим измерить, что же находится в первом кубите.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Если мы эту штуку запустим, то получим, что с вероятностью единичка у нас там стоит нолик, потому что они инициализированы в таком состоянии и мы больше ничего с ними не делали.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Такую штуку можно написать на Python с помощью библиотечки qiskit. Давайте по строчкам посмотрим, что здесь происходит. Сначала мы заводим квантовый регистр. Я здесь завожу его из одного кубита. И классический регистр. Классический регистр нужен, чтобы куда-то записать результат измерения. То есть я с квантовым регистром делаю преобразования, результат получаю классический — нолик или единичку. И потом создаю свою схему, в которой есть этот квантовый классический кубит. Я просто говорю: давайте измерим кубит q в C. Запустим все это дело, и все будет хорошо. Но внимательный читатель увидит: здесь написано, что у меня backend — это локальный эмулятор.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

То же самое можно сделать и с IBM Q, но здесь чуть больше кода. Здесь всякая лапша по поводу того, чтобы выбрать девайс, который нам побыстрее ответит, токены какие-то передать, вот это все. Но ничего хитрого нет.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

То же самое можно сделать с оператором отрицания. Это оператор X, как я сказал. На схеме выглядит точно также, запустим то же самое.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Теперь с вероятностью единичка получим единичку, как и планировали. Никакой магии.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Код такой же. Просто здесь я еще применяю оператор X к кубиту q.

Хорошо, попробуем пойти дальше.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Здесь есть очень хитрая штука. Попробуем получить вот такое состояние. Это состояние очень интересное. Мы получим такую суперпозицию. Если мы попробуем ее измерить, то с вероятностью ½ получим или нолик, или единичку. То есть это будет такая равномерная суперпозиция, можем получить что угодно.

Можно провести аналогию, что это такое квантовое подбрасывание монетки. Мы скажем, что окей, с вероятностью ½ получим нолик и единичку. Матричка выглядит вот так.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Легко проверить, но мы, конечно, не будем. Нарисуем схему. Оператор H в честь Адамара.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Замерим и получим примерно то, что ожидаем. Примерно с вероятностью ½, нолик и единичка. Чуть больше, чуть меньше, но так уж получается.

Вот код на Python, просто чтобы был, мы же на конференции про Python.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Есть такая суперпозиция. К ней применяем оператор Адамара и замеряем.

Но монетку можно бросить два раза, к этому мы все привыкли. Если бросить монетку два раза, ничего не поменяется. Давайте попробуем это сделать в квантовом случае.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Два раза подряд применим оператора Адамара и всегда получим нолик.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

То есть если квантовую монетку бросить два раза, то всегда получится нолик, потому что оператор Адамара обратный сам к себе. Если вы умножите самого на себя, всегда получите единичку. Вот такая штука.

Итак, с одним кубитом можно что-то делать. Можно крутить, вертеть и измерять. Давайте попробуем добавить побольше кубит. Что мы привыкли делать в классическом мире? Брать и выполнять простые логические операции, «или» и «и».

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

В квантовом мире так делать нельзя, потому что они не совсем обратимые. То есть, получая ноль в операции «и», мы никогда не сможем узнать, какие были начальные значения.

А в квантовом мире, как я говорил, операция — это унитарные матрицы, которые всегда обратимы. Как тогда вообще программировать? Все, к чему мы привыкли, рушится. Но появляется новый герой, это оператор так называемого контролируемого отрицания.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Если бы мы писали на Python, это выглядело бы так. Если в первом кубите единичка, давайте инвертировать второй кубит. Это не матричка, это то, как выглядит оператор. Но в принципе то, что я сказал, тут и написано. Там, где в первом кубите единичка, второй инвертируется.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Матричка уже четыре на четыре. Для двух кубит она выглядит так. Оставлю задачу со звездочкой, чтобы перемножить и посмотреть, что это правда так.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Эту штуку можно даже запрограммировать. Никакого rocket science. Нужно просто взять, создать схему с двумя кубитами, с двумя классическими, и сделать, только не CNOT, а CX, контролируемое отрицание.

Отрицание было оператором X, поэтому в принципе все логично. И можно нарисовать схему. Схема такая.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

То есть контролируемое отрицание — это такой плюсик на кубите, который мы хотим менять. И точечка, которая является контрольной. Здесь, если кубит в единичке, то второй будем менять.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Тут я специально первый сначала инвертирую, чтобы он был единичкой, и потом замеряю оба и получаю результат |11⟩. Все как мы и предполагали.

Но теперь самое время использовать все наши знания вместе.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Возьмем и все три или четыре оператора, которые мы знаем, залепим в одну схему. То есть мы к первому оператору применим оператор Адамара. Второй инвертируем, потом все вместе, сделаем контролируемое отрицание и измерим.

Давайте не будем пока запускать, а попробуем угадать, что же получится.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Если мы к первому кубиту применяем оператора Адамара, а ко второму отрицание, то получим такую суперпозицию. Я не хочу сейчас тратить время на проверку, это можно легко перемножить. Но позиция очень интересная. Во-первых, она очень похожа на равномерную, а, во-вторых, теперь это состояние называется запутанным, если еще взять контролируемое отрицание.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Состояние запутанное. А все почему? Попробуем произвести измерение. Смотрите, если я измеряю первый кубит и он у меня в состоянии ноль, я тогда могу сказать, что второй кубит обязательно в состоянии один.

То есть если я сделаю такое преобразование своими кубитами, один кубит отдам своему другу, он улетит в Нью-Йорк, а я второй кубит измерю у себя, я буду точно знать, в каком состоянии его кубит. Это называется эффектом квантовой запутанности или квантовой связанности. И это основной механизм, с помощью которого квантовые вычисления работают. Он изменится, они связаны очень жестко, и во время измерения мы можем получить только |00⟩ или |11⟩.

По этому поводу есть очень интересная иллюстрация в пользу одного ученого, австрийского, по-моему, который был очень рассеянным (апдейт).

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Рассеянность заключалась в том, что он все время носил разные носки. И коллеги над ним шутили: если он заходит в комнату одной ногой и мы видим, что носок розовый, то можем точно сказать, что второй носок не розовый. Такие дела.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Если мы эту штуку запустим, получим ровно то, что хотим. Здесь уже совсем смешно получилось. Вероятность ровно 0,5, но это совпадение.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Если мы будем честно запускать на квантовом компьютере, получим вот такую картину. Вроде бы мы говорим: никогда не может получиться состояние |00⟩ и никогда не может получиться состояние |11⟩. Но оно все-таки получается: текущее состояние техники таково, что там есть шумы, которые не всегда можно легко подавить. И с этим борются.

Но если вы вспомните классическую информатику, там то же самое: коды, исправляющие ошибки и все такое. Просто кубит пока слишком мало, чтобы тратить дополнительные биты на исправление ошибок.

Теперь, как я и обещал, несколько примеров алгоритмов. Но это будут просто голословные примеры без разборов алгоритмов, чтобы вы посмотрели, подумали, заинтересовались.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Первый алгоритм как раз связан с Дойчем, о котором мы говорили вначале. Это алгоритм Дойча-Йожи. И он делает следующее. Представьте, что у нас есть булева функция от n переменных. И мы точно знаем, что она или константная, или сбалансированная. Сбалансированная — значит, ровно на половине аргументов она равна нулю, а на другой половине — единичке. Попробуем классически проверить, константна она или нет.

Для этого нам нужно проверить хотя бы половину всех возможных вариантов: 2 n–1 +1 вариант. Квантовый алгоритм позволяет это сделать за n обращений к самой функции, за n вычислений самой функции. Это экспоненциально меньшее количество обращений.

Второй пример, наверное, хорошо всем известен, из-за него говорят, что квантовые компьютеры сломают всю криптографию: мы можем квантово очень быстро факторизовать числа.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Здесь приведены оценки сложности, и есть просто фантастический пример. В 2011 году на реальном компьютере факторизовали число 15. Потребовалось семь кубит.

Языки программирования для квантового компьютера. Смотреть фото Языки программирования для квантового компьютера. Смотреть картинку Языки программирования для квантового компьютера. Картинка про Языки программирования для квантового компьютера. Фото Языки программирования для квантового компьютера

Но не все так страшно. На случай, если квантовые компьютеры достигнут уровня, при котором можно ломать RSA, уже есть постквантовая криптография. Она построена на обучении с ошибками. Это когда в задачи вносится небольшая погрешность так, чтобы найти ответ было очень сложно. Обычно это какие-то уравнения или система уравнений. Вот пример алгоритма. Кто захочет, может почитать подробнее.

Самое интересное: на этой штуке основан алгоритм New Hope, новая надежда всея человечества. В 2016 году в Chrome была включена поддержка этого алгоритма. Здесь есть ссылочка на блог. Это не я придумал, все на самом деле есть. Будущее уже здесь.

В конце немножко ссылок:

Если вы попробуете вбить в своем любимом поисковике, то уже сегодня можете найти вакансии для квантового программиста. Конечно, там больше исследований, но тем не менее. Спасибо.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *