Как переставить (переставить) n-битный ввод?


13

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

Например, если входное значение равно 0,0,1,1 (в данном случае n = 4), то возможные ответы:

  • 0,0,1,1
  • 0,1,0,1
  • 0,1,1,0
  • 1,0,0,1
  • 1,0,1,0
  • 1,1,0,0

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

Как это лучше всего реализовать в квантовом алгоритме ?

Решение для этого уже предложено как часть одного из ответов на вопрос Как создать квантовый алгоритм, который производит 2 n-битные последовательности с равным количеством 1-бит? , Но проблема с этим решением состоит в том, что для этого требуется около справочных кубитов, которые быстро становятся большими, если n большое.(n2)

Замечания:

  • Пожалуйста, не предоставляйте классический алгоритм без какого-либо объяснения того, как этапы классического алгоритма могут быть сопоставлены с универсальным квантовым компьютером.
  • для меня есть 2 хороших способа интерпретировать «случайно выбранный среди всех возможных хороших выходов» : (1) каждый возможный хороший выход имеет равные шансы быть выбранным. (2) каждый возможный хороший выход имеет шанс> 0 быть выбранным.

1
Входные данные представляют собой двоичную строку длиной где битов равны 1, а выходными данными является любая из возможных ее перестановок? Это можно сделать на классическом компьютере за 1 шаг. Вы хотите все возможные выходы? nk(nk)1
user1271772

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

Будет ли классический алгоритм достаточно хорош? (Вы все еще можете запустить его на квантовом компьютере.) Или вам требуется что-то еще. который превосходит лучший классический алгоритм?
Норберт Шух

1
@JanVdA: Почему бы просто не выбрать 1 и 0 и поменять их местами на классическом компьютере?
user1271772

1
Поскольку вы не указали случайное распределение, которое вам нужно, я просто оставлю их здесь: Дилберт и XKCD ;)
Али

Ответы:


4

Это можно сделать с помощью дополнительных кубитов по этим направлениям:logn

  1. Преобразуйте дополнительные кубиты так, чтобы они кодировали число выбранное равномерно случайным образом.k{0,,n1}

  2. Циклически сдвигать входные кубиты раз.k

  3. Пусть последний из исходных входных кубитов будет зафиксирован как выходной и рекурсивный по оставшимся из них.n1

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

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

1nk=0n1|kk|
k

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

2
Я думаю, что сейчас вопрос в фокусе: вы не ищете алгоритм, вы ищете код. Я описал алгоритм, и осталась задача реализовать этот алгоритм (или другой) как код на каком-либо языке или как низкоуровневое описание квантовой схемы. Я предлагаю вам пересмотреть вопрос, чтобы сделать это более ясным, но имейте в виду, что вы просите кого-то сделать утомительную и концептуально неинтересную работу за вас. Альтернатива обучения тому, как сделать это самостоятельно, может показаться сложной, но в конечном итоге может оказаться лучшим решением.
Джон Уотроус

Я добавил примечание к вопросу. Я думаю, что мы по-разному истолковали концепцию квантового алгоритма . Для меня a_classical алгоритм_ не является квантовым алгоритмом, но может быть преобразован в квантовый алгоритм .
JanVdA

@JanVdA: Что вы подразумеваете под квантовым алгоритмом? Например, требуется ли, чтобы он включал хотя бы один шлюз? Или для этого требуется хотя бы один Y-образный элемент? Или что это требует некоторого другого определенного набора ворот? Какой набор ворот вы хотите использовать для этого алгоритма? HY
user1271772

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

3

Примечание: этот ответ предполагает, что вы хотите, чтобы перестановка была последовательной , т.е. вы хотите вместо 1/3 шанса001, 1/3 шанса010и 1/3 шанса100.13(|001+|010+|100)001010100

Будьте внимательны при определении этой задачи, потому что это может быть очень просто невозможно из-за ограничений обратимости. Например, для ввода вы хотите вывести государственный GHZ | 3|001. Но если вы также хотите вывести состояние GHZ для входа| 010и| 100, что не будет работать. Вы не можете отправить несколько состояний ввода в одно и то же состояние вывода (без декогеренции). Пока вы говорите: «Я забочусь только о отсортированных восходящих входах, таких как 0000111, но не 1110000 или 0010110; вы можете делать с ними все, что захотите», это будет хорошо.|31=13(|001+|010+|100)|010|100

Один из способов получения квантовой перестановки отсортированного ввода состоит в том, чтобы сначала подготовить «состояние перестановки», применяя сортировочную сеть к списку начальных значений, каждое из которых находится в равномерной суперпозиции. Сортировочная сеть будет выводить кубиты, содержащие отсортированные начальные числа, а также кубиты, содержащие сравнения сортирующей сети. Состояние перестановки - это просто кубиты сравнения. Чтобы применить его к своему вводу, вы просто запускаете ввод через сеть сортировки в обратном порядке. Обратите внимание, что здесь есть некоторые хитрые детали; см. статью « Усовершенствованные методы приготовления собственных состояний фермионных гамильтонианов ». Вам придется обобщить эту технику для работы с входами с повторяющимися значениями, а не только с уникальными значениями.

|nknk

|000114|41|0011|4216


13(|001+|010+|100)|00113(|001|010+i.|100)

1
@JanVdA Правильно, можно использовать фазы, чтобы сделать различные выходы ортогональными. Я прочитал ваш вопрос так, что вы хотели одну и ту же фазу во всех случаях.
Крейг Гидни

0

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

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

NO(N)nthO(N) operations.


Thanks but the algorithm would only switch 2 bits (so it won't generate all permutations) and it is still a classical algorithm, while I would like to see a quantum algorithm.
JanVdA
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.