SFC + ST для квантового компьютера

Опубликовано 2014-03-26 11:27:04

Недавно я прочитал две книги про Ричарда Фейнмана. В книгах говорилось о квантовых вычислениях и о новых возможностях для программистов. Было написано то, что некоторые задачи на квантовых компьютерах можно будет решать за полиномиальное время. Допустим у вас есть задача. Есть входные данные для задачи и время необходимое на ее решение. Если данные увеличить в n раз и время на решение тоже увеличится в n раз, то задача решается за полиномиальное время.

Если данные увеличить в n раз, а время на решение увеличится в 2^n раз, то задача решается за экспоненциальное время. При больших n полиномиальные задачи решаются быстрее, чем экспоненциальные. Интересно то, что если решать задачу на классическом компьютере, то задача Х будет решаться за экспоненциальное время, а на квантовом за полиномиальное время.

Классический и квантовый компьютер

Обычный компьютер это работа с данными (битами) = 0, либо 1. Другого не дано. С точки зрения электроники это превышение уровня сигнала (логическая единица), либо 0. В квантовом все хлеще. Там есть базовые состояния (000 (классический 0 ), 111 (классическая 1)) и есть промежуточные 001, 011, 010, 100, 110, и т.д. Если в классическом компьютере мы могли провести операцию умножения (логическое И) 1 AND 1 = 1, то тут все уже не так. Также у квантовых систем есть всякие фишки, которые в обычном мире не наблюдаются, но про них я умолчу, ибо не понимаю.

Нафиг я все это писал?

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

Я некоторое время программировал ПЛК. При программировании я использовал связку из 2 языков: SFC, ST. Первый язык необычный хотя бы тем, что он графический и представляет собой диаграмму состояний. Каждое состояние может быть описано на языке ST (Паскалеподобный). Переходы между состояниями могут быть описаны условиями. На входе и на выходе из состояния можно выполнять какие-то процедуры. Можно создавать функциональные блоки - грубо это функции с несколькими входами и выходами. Функциональные блоки - это логический элемент, который на входе принимает значение кубитов, далее реализует какую-то операцию, на выходе выдает результат действия операции. Например функциональный блок реализующий операцию AND для двух кубитов.

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

p.s. Прошу прощения за сумбур, но мне нужно было это написать дабы не потерять и вернуться в будущем.