n 비트 입력을 퍼 뮤트 (재 셔플)하는 방법은 무엇입니까?


14

나는 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

가능한 모든 유효한 출력 중에서 무작위로 선택된 하나의 출력 만 생성해야합니다.

어떻게 양자 알고리즘 에서 가장 잘 구현 될 수 있습니까?

이에 대한 해결책은 이미 동일한 수의 1 비트로 2 개의 n 비트 시퀀스를 생성하는 양자 알고리즘을 만드는 방법에 대한 답변 중 하나의 일부로 이미 제안되었습니다 . . 그러나이 솔루션의 문제점은 약 (n2) 도움말 큐 비트가 필요하다는 것입니다. 이는 n이 클 경우 빠르게 커집니다.

노트 :

  • 클래식 알고리즘의 단계를 범용 양자 컴퓨터에 매핑하는 방법에 대한 설명없이 클래식 알고리즘을 제공하지 마십시오.
  • 나를 위해 "가능한 모든 좋은 결과물 중에서 무작위로 선택됨" 을 해석하는 두 가지 좋은 방법이 있습니다. (2) 가능한 모든 좋은 산출물은> 0을 선택할 확률이있다.

1
입력 길이의 이진 스트링이고 비트의 1 개의, 그리고 출력은 임의 의 그것의 가능한 순열을? 이것은 1 단계의 클래식 컴퓨터에서 수행 할 수 있습니다. 당신이 원하는 마십시오 alll 가능한 출력을? nk(nk)1
user1271772

아니요, 가능한 모든 출력 중에서 무작위로 선택된 하나의 출력 만 생성해야합니다.
JanVdA

고전적인 알고리즘으로 충분할까요? (여전히 양자 컴퓨터에서 실행할 수 있습니다.) 또는 sth가 필요합니까? 가장 고전적인 알고리즘을 능가하는 것은 무엇입니까?
Norbert Schuch

1
@ JanVdA : 왜 1과 0을 골라서 고전 컴퓨터에서 두 개를 바꾸지 않겠습니까?
user1271772

1
원하는 임의 분포를 지정하지 않았으므로 여기에 그대로 두겠습니다. Dilbert and XKCD ;)
Ali

답변:


4

다음 줄을 따라 추가 큐 비트를 사용하여 수행 할 수 있습니다 .logn

  1. 추가 큐 비트 를 무작위로 균일하게 선택한 숫자 을 인코딩하도록 변환합니다 .k{0,,n1}

  2. 입력 큐 비트를 주기적으로 번 시프트합니다 .k

  3. 원래 입력 큐 비트의 마지막을 출력으로 고정하고 나머지 에서 재귀 합니다.n1

이것은 고전적인 알고리즘이지만 Norbert가 의견에서 제안한 것처럼 양자 컴퓨터에서 실행할 수 있습니다. (양자 알고리즘에 대해 단호한 질문의 양상은 여전히 ​​나에게 분명하지 않으므로 양자 컴퓨터에서 제안한 것과 같은 고전적인 알고리즘을 실행하는 것이 충분하지 않으면 질문에 도움이 될 것입니다. 명확히해야합니다.)

질문은 무작위 출력을 요구하기 때문에 알고리즘은 아마도 측정 또는 큐 비트에 대한 다른 비-일체 연산 (예 : 초기화)을 통해 어떤 시점에서 엔트로피를 생성해야합니다. 위의 알고리즘에서 엔트로피를 생성하는 첫 번째 단계입니다. 1 단계의 작업이 수행되기 전에 추가 큐 비트의 상태에 관계없이 이어야합니다. 단계 1이 수행 된 후 ( 는 2 진수로 인코딩되어 있다고 가정하자).

1nk=0n1|kk|
k

답변 해주셔서 감사합니다. 나는 문제에 대한 실제 양자 알고리즘에 관심이 있습니다-고전 알고리즘 위에 양자 프로그램에 매핑 할 수 있다면 괜찮습니다. 그러나 이것을하는 방법에 대한 실마리는 없습니다.
JanVdA

2
저는 이제 질문이 집중되고 있다고 생각합니다. 실제로 알고리즘을 찾고 있지 않고 코드를 찾고 있습니다. 내가 설명 한 것은 알고리즘이며, 남아있는 작업은 해당 알고리즘 (또는 다른 알고리즘)을 일부 언어의 코드 또는 양자 회로의 저수준 설명으로 구현하는 것입니다. 더 명확하게하기 위해 질문을 수정하는 것이 좋습니다.하지만 누군가 지루하고 개념적으로 흥미가없는 작업을하도록 요청하고 있다는 점에 유의하십시오. 이 작업을 수행하는 방법을 배우는 대안은 어려워 보일 수 있지만 결국에는 더 나은 솔루션이 될 수 있습니다.
John Watrous

질문에 메모를 추가했습니다. 우리는 개념 양자 알고리즘을 다르게 해석했다고 생각합니다 . 나를 위해 a_classical 알고리즘 _이 아닌 양자 알고리즘 만에 매핑 될 수 양자 알고리즘 .
JanVdA

@ JanVdA : 양자 알고리즘은 무엇을 의미합니까? 예를 들어, 적어도 하나의 게이트를 포함해야합니까? 아니면 하나 이상의 게이트 가 필요 합니까? 아니면 다른 특정 게이트 세트가 필요합니까? 이 알고리즘에 어떤 게이트 세트를 사용 하시겠습니까? HY
user1271772

양자 알고리즘은 범용 양자 컴퓨터를위한 프로그램에 (단계 레벨에서) 매핑 될 수있는 알고리즘입니다. 양자 알고리즘 단계의 입력 및 출력은 큐 비트 (또는 일련의 큐 비트에 맵핑 될 수 있음)입니다. 양자 알고리즘의 마지막 단계 = 큐 비트의 값을 판독 (관측) (큐 비트가 실제 비트에 매핑 됨) 게이트 세트에는 제한이 없습니다. 아이디어는 완전한 알고리즘이 범용 양자 컴퓨터에서 실행될 수 있다는 것입니다.
JanVdA

3

참고 :이 답변에서는 순열을 일관되게 하고 싶다고 가정합니다 . 즉 1/3 대신 을 원한다고 가정합니다. 확률은 , 1/3 확률은 , 1/3 확률은 입니다.13(|001+|010+|100)001010100

가역성 제약으로 인해이 작업을 매우 쉽게 수행 할 수 없으므로이 작업을 지정하는 방법에주의하십시오. 예를 들어, 입력 경우 GHZ 상태 를 출력하려고합니다. . 그러나 입력 및 대한 GHZ 상태도 출력하려면 작동하지 않습니다. 여러 개의 입력 상태를 동일한 출력 상태 (디코 히어 런스없이)로 보낼 수는 없습니다. "0000111과 같이 정렬 된 오름차순 입력에 대해서만 신경 쓰지만 1110000 또는 0010110에는 신경 쓰지 않고 원하는대로 무엇이든 할 수 있습니다"라고 말하면 괜찮습니다.|001|31=13(|001+|010+|100)|010|100

정렬 된 입력의 양자 순열을 생성하는 한 가지 트릭은 먼저 정렬 네트워크를 균일 한 중첩으로 시드 값 목록에 적용하여 "순열 상태"를 준비하는 것입니다. 정렬 네트워크는 정렬 된 시드를 보유한 큐 비트와 정렬 네트워크 비교를 보유한 큐 비트를 출력합니다. 순열 상태는 단지 비교 큐 비트입니다. 입력에 적용하려면 정렬 네트워크를 통해 입력을 반대로 실행하면됩니다. 여기에는 까다로운 세부 사항이 있습니다. " Fermionic Hamiltonians의 고유 상태를 준비하기위한 개선 된 기술 "논문을 참조하십시오 . 고유 한 값 대신 반복되는 값을 가진 입력에서 작업하려면이 기술을 일반화해야합니다.

" quantum compression " 을 보길 원할 수도 있는데, 이것은생성하려는 상태 ( 비트가 설정된 모든 비트 상태 의 균일 한 중첩 ). 가장 큰 차이점은 양자 압축 회로를 역으로 실행한다는 것입니다. "몇 개가 있습니까?" "정확한 수의 상태를 알려주십시오"대신.|nknk

내가 말하는 것은 이러한 종류의 상태를 생성하는 것이 예상보다 복잡하다는 것입니다. 복잡한 이유는 출력의 진폭의 크기가 입력의 계산 기준 상태에 달려 있기 때문입니다. 예를 들어, 대한 당신의 prefactor 그래서 당신은, 4 개 개의 클래식 상태의 중첩 인 출력을 원하는 숨겨진 내부 . 그러나 경우 원하는 출력은 6 개의 클래식 상태를 가지므로 은 의 선행 요소를 숨 깁니다 .|000114|41|0011|4216


귀하의 답변을 소중히하기 위해 더 많은 연구가 필요하지만 가역성 제약에 대한 두 번째 단락에 전적으로 동의하지 않습니다. 당신이 사용하는 것을 주 을위한 솔루션으로 하지만 우리는 작업으로 더 많은 솔루션이있다 숫자가 복잡한 경우 (예 : 다음은 가능한 해결 방법입니다13(|001+|010+|100)|00113(|001|010+i.|100)
rangle-

1
@JanVdA 맞습니다. 위상을 사용하여 다양한 출력을 직교로 만들 수 있습니다. 귀하의 질문에 대한 나의 독서는 모든 경우에 동일한 단계를 원한다는 것입니다.
Craig Gidney 2016 년

0

양자 컴퓨터는 고전적인 계산을 수행 할 수 있습니다. 최적의 알고리즘은 다음과 같습니다.

  1. 액세스 할 수있는 가장 빠른 비트를 선택하십시오.
  2. 반대의 값을 가진 비트를 찾으십시오 (1 단계에서 0을 얻은 경우 1을 찾으십시오)
  3. 전환하십시오 (0은 1이되고 1은 0이됩니다).

2 단계는 클래식 연산을 사용하는 연산 을 사용 하는 비트 문자열을 통한 검색을 포함 하지만 함수를 평가 하여 비트 값을 얻을 수있는 경우 Grover의 양자 알고리즘을 사용하여 연산 과 반대 비트를 찾습니다 . NO(N)nthO(N)


고맙지 만 알고리즘은 2 비트 만 전환하므로 모든 순열을 생성하지는 않지만 여전히 고전적인 알고리즘이지만 양자 알고리즘을보고 싶습니다.
JanVdA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.