양자 병렬 처리를 사용하여 한 번에 많은 함수를 계산할 수 있습니까?


9

양자 병렬 처리를 이용함으로써 함수를 계산할 수 있다는 것은 잘 알려져 있습니다. f(x) 많은 다른 가치를 위해 x동시에. 그러나 각 값의 정보를 추출하려면 (예 : Deutsch의 알고리즘) 영리한 조작이 필요합니다.

반대의 경우를 생각해 우리가 계산하는 양자 병렬 처리를 사용할 수있는 많은 기능을 (예를 들어f(x),g(x),) 단일 값 대해 동시에 ?x0


및 을 평가하려면 일반적으로 비 복제 정리로는 불가능한 각 작업에 대해 의 복사본을 만들어야합니다 . 반면에 두 배인 상태를 준비하면 고전적인 병렬 처리를 복원합니다. f(x0)g(x0)x0x0

@HenriMenke 불완전한 복제는 어떻습니까?
donnydm

@HenriMenke : '복제'가 무엇인지에 대한 당신의 개념은 생산적으로 문제에 접근 할 수있는 능력에 장애가되는 시점까지 매우 광범위하게 보입니다.
Niel de Beaudrap

답변:


5

정확한 답은 당신이 원하는 정확한 종류의 중첩에 달려 있습니다. 피라미드와 Niel의 답변은 모두 다음과 같은 것을 제공합니다.

At=1n|ft(x)|Ft

여기에 다른 기능에 라벨을 붙이는 Niel을 따랐습니다 f1, f2n중첩하려는 총 함수 수로 또한 나는Ft 함수의 일부 설명을 나타냅니다 ft저장된 프로그램으로. 그만큼A 상태를 정규화하기 위해 필요한 숫자 만 있으면됩니다.

이것은 단순히 ft(x). 저장된 프로그램과 얽혀 있습니다. 저장된 프로그램을 추적해야한다면ft(x). 즉, 저장된 프로그램이 '쓰레기'를 구성 할 수 있으므로 신뢰할 수있는 간섭 효과를 방지 할 수 있습니다. 아니면 그렇지 않을 수도 있습니다. 이 중첩이 계산에 어떻게 사용되는지에 달려 있습니다.

쓰레기를 없애고 싶다면 더 까다로워집니다. 예를 들어, 원하는 것이 단일이라고 가정하십시오.U 그 효과가

U:|x|0NAt=1n|ft(x)

가능한 모든 입력 x(나는 계산 기준으로 작성된 비트 문자열이라고 가정합니다). 함수가 입력보다 출력이 더 긴 경우를 대비하여 입력 측에 빈 큐 비트도 포함했습니다.

이로부터 우리는 함수가 만족해야하는 조건을 매우 빨리 찾을 수 있습니다. 입력 상태가 직교 세트를 형성하기 때문에 출력도 마찬가지입니다. 이렇게하면 이러한 방식으로 결합 할 수있는 기능의 종류가 크게 제한됩니다.


고맙습니다.이 방법으로 Taylor 확장 계산과 같은 속도를 높일 수 있다고 생각합니다. 어쨌든 저장된 프로그램에 액세스하여 정보를 얻을 수 있습니까? 아니면 도구일까요?
donnydm

저장된 프로그램은 큐 비트 레지스터에 쓰여질 것이므로 확실히 조작 할 수 있습니다.
James Wootton

5

기능 f,g,다른 계산 브랜치에서 평가하려는 경우, 계산이 가능하도록 어떤 방식 으로든 지정 가능해야합니다 (예 : 일련의 고전적인 논리 게이트). 그리고 세트 {f1,f2,} 계산하려는 함수 중 하나는 계산 가능해야합니다. t방법의 사양을 계산할 수 있어야합니다. ft인수에 대해 계산해야합니다. 실제로 : 기능을 설명 할 수단이 있어야합니다.ft저장된 프로그램으로. (이것은 양자 계산을 고려하기 전에도 "하나의 함수 또는 모든 함수를 계산하는 문제"f1,f2, 입력에 x0"의미가 있습니다.)

함수를 저장된 프로그램으로 지정하는 방법이 있으면 기본적으로 수행됩니다. 프로그램은 본질적으로 다른 종류의 입력으로, 중첩으로 준비하고 계산을 통해 고정 입력 또는 입력 중첩을 평가할 수 있습니다. 각 분기의 사양에 따른 기능

그렇게함으로써 comptational 이점을 얻는 것은 다른 문제이며, 함수의 특정 구조를 포함해야합니다 ft 질문을 이해하기에 충분한 정보가 있으면 간단히 "중첩 평가"를 활용할 수 있습니다.


3

예 ( "한 번에 많은 기능 계산"의 의미에 따라 다름)

기능을 제공하는 회로 설명 f 같이 Uf 그리고 회로주는 g 같이 Ug이 작업을 수행하는 몇 가지 방법이 있습니다.

  1. 큐 비트 레지스터로 시작 |00x, 주 준비 α|01+β|10처음 두 레지스터에. 이는 첫 번째 레지스터에 1 을 적용하여 해당 레지스터를 상태 로 설정함으로써 수행 할 수 있습니다.α|0+β|1 CNOT를 적용하기 전에 IX. 그런 다음 신청하십시오CUf 첫 번째 레지스터에서 세 번째 레지스터까지 CUg 두 번째에서 세 번째로.

    1.1. 이것은 세 번째 레지스터가 현재 상태에 있음을 나타냅니다.(αUf+βUg)|x초기 작업 (최대 IX)는 처음 두 레지스터의 반대입니다. 그러나 임의의 제어 된 단일 작업을 구현하는 데 어려움이 있고 (불필요하게 여분의 큐 비트를 사용하는) 일반적인 단일 전화 걸기를 통해 직접 구현하는 것이 더 쉬울 것입니다.αUf+βUg. 이것은 구현하지 않습니다.f ...도 아니다 g새롭고 다른 기능 f+g

    1.2. 처음 두 레지스터의 초기 동작을 반대로 바꾸지 않으면 세 번째가 얽힌 상태가됩니다.fg다른 답변에서 논의됩니다.

  2. 상태로 시작 |xx 그리고 적용 Uf 첫 번째 레지스터에 Ug두 번째로. 이는 두 기능이 동일한 상태의 사본에 독립적으로 적용되는 클래식 병렬 처리에 가장 가깝습니다. 큐 비트 수의 두 배를 요구하는 것 외에, 여기서 문제는 복제가 없기 때문에 복사하기 위해|x, 그것은 알려 지거나 고전적인 상태 여야한다 (즉, 계산 기초에서 중첩을 포함하지 않아야 함). 대략적인 복제 도 사용할 수 있습니다.

  3. 상태로 시작 |0x뿐만 아니라 클래식 레지스터. 단일 적용 1 중첩 상기 제 1 레지스터를 넣어α|0+β|1. 이제이 레지스터를 측정 하고 (클래식 레지스터에 결과 입력) 클래식 작업을 적용하십시오 IF RESULT = 0 U_f ELSE U_g. 이것은 위의 작업 중 어느 것보다 강력하지 않은 것처럼 보일 수 있지만 이것은 양자 채널과 동등한 의미입니다.E(ρ)=|α|2UfρUf+|β|2UgρUg. 이러한 방법은 무작위 단일화를 만드는 데 사용될 수 있으며, 예를 들어 boson 샘플링무작위 벤치마킹에 적용 할 수 있습니다.


에 의해 주어진 1

(αββα)


This is interesting, partially because no stored program needed. Is the CNOT in number 1 necessary?
donnydm

2

Yes, one can. The trick is to define (and implement) a new function fall(y,x) that evaluates to f(x) if y=0, to g(x) if y=1, etc. Then one prepares the qubits representing y in the desired superposition and set x to x0.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.