그로버 알고리즘 : 실제 사례?


13

Grover의 알고리즘을 실제로 어떻게 사용할 수 있는지에 대해 상당히 혼란 스러우며 예제를 통해 설명에 도움을 요청하고 싶습니다.

빨강, 주황, 노랑, 녹색, 청록, 파랑, 인디고 및 바이올렛 색상을 포함 하는 요소 데이터베이스를 가정합니다 . 내 목표는 데이터베이스에서 빨간색을 찾는 것입니다.N=8

Grover 알고리즘의 입력은 qubits이며 여기서 3 qubits는 데이터 세트의 인덱스를 인코딩합니다. 내 혼란은 여기에 있습니다 (전제에 대해 혼란 스러울 수 있으므로 혼란이 여기에서 발생합니다), 내가 알듯이 오라클은 실제로 데이터 세트의 인덱스 중 하나를 검색합니다 (3 큐빗의 중첩으로 표시됨). 오라클은 찾아야 할 인덱스를 "하드 코딩"했습니다.n=log2(N=8)=3

내 질문은 :

  • 여기서 내가 뭘 잘못합니까?
  • 오라클이 실제로 데이터베이스의 인덱스 중 하나를 찾고 있다면, 어떤 인덱스를 찾고 있는지 알 수 있습니다. 왜 검색합니까?
  • 위의 색상이있는 상황에서 Grover가 비정형 데이터 세트에서 빨간색을 찾을 수 있다면 누군가 지적 할 수 있습니까?

예를 들어 검색하기위한 oracle을 사용한 Grover의 알고리즘에 대한 구현이 있습니다 (예 : 또는 동일한 oracle의 R 구현 참조) : /quantum//a/2205n=3111의 오라클

다시 말하지만, 데이터 집합에서 요소 의 위치를 ​​모르면 알고리즘에서 요소 의 위치를 ​​인코딩하는 문자열을 검색해야합니다 . 데이터 세트가 구조화되지 않은 경우 어떤 위치를 찾아야하는지 어떻게 알 수 있습니까?NN

R 코드 :

 #START
 a = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 # 1st CNOT
 a1= CNOT3_12(a)
 # 2nd composite
 # I x I x T1Gate
 b = TensorProd(TensorProd(I2,I2),T1Gate(I2)) 
 b1 = DotProduct(b,a1)
 c = CNOT3_02(b1)
 # 3rd composite
 # I x I x TGate
 d = TensorProd(TensorProd(I2,I2),TGate(I2))
 d1 = DotProduct(d,c)
 e = CNOT3_12(d1)
 # 4th composite
 # I x I x T1Gate
 f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 f1 = DotProduct(f,e)
 g = CNOT3_02(f1)
 #5th composite
 # I x T x T
 h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
 h1 = DotProduct(h,g)
 i = CNOT3_01(h1)
 #6th composite
 j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
 j1 = DotProduct(j,i)
 k = CNOT3_01(j1)
 #7th composite
 l = TensorProd(TensorProd(TGate(I2),I2),I2)
 l1 = DotProduct(l,k)
 #8th composite
 n = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 n1 = DotProduct(n,l1)
 n2 = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
 a = DotProduct(n2,n1)
 #repeat the same from 2st not gate
 a1= CNOT3_12(a)
 # 2nd composite
 # I x I x T1Gate
 b = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 b1 = DotProduct(b,a1)
 c = CNOT3_02(b1)
 # 3rd composite
 # I x I x TGate
 d = TensorProd(TensorProd(I2,I2),TGate(I2))
 d1 = DotProduct(d,c)
 e = CNOT3_12(d1)
 # 4th composite
 # I x I x T1Gate
 f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
 f1 = DotProduct(f,e)
 g = CNOT3_02(f1)
 #5th composite
 # I x T x T
 h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
 h1 = DotProduct(h,g)
 i = CNOT3_01(h1)
 #6th composite
 j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
 j1 = DotProduct(j,i)
 k = CNOT3_01(j1)
 #7th composite
 l = TensorProd(TensorProd(TGate(I2),I2),I2)
 l1 = DotProduct(l,k)
 #8th composite
 n = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
 n1 = DotProduct(n,l1)
 n2 = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
 n3 = DotProduct(n2,n1)
 result=measurement(n3)
 plotMeasurement(result)

이미지 2



답변:


5

데이터베이스 사용 내에서 효율적으로하는 주요 가정 중 하나는 QRAM이라고도하는 RAM에서 주소 데이터를 중첩하여로드 할 수 있다는 것입니다 ( https://arxiv.org/abs/0708.1879 참조 ). 그런 다음 주소에 대한 하나의 상태, 값에 대한 하나의 상태 및 해당 주소의 값을 값 레지스터에로드하는로드 조작이 있다고 가정하십시오. 따라서로드 조작은

|xaddress|0value|xaddress|load(x)0value=|xaddress|load(x)value.

첫 번째 단계에서는 주소 레지스터에하다 마드 게이트를 적용한 다음 두 레지스터에로드 작업을 적용합니다. 그러면 데이터베이스의 모든 값과 값 레지스터가 중첩됩니다. 그런 다음 소수 또는 특정 값을 찾고자하는 오라클과 함께 값 레지스터에 Grover 알고리즘을 적용합니다. 우리는 후에 알고 있습니다

Haddressn|0address|0value=12n/2x=02n1|xaddress|0value
apply load12n/2x=02n1|xaddress|load(x)value
O(N)반복 정답은 높은 확률로 측정됩니다. 따라서 올바른 솔루션의 레지스터 주소 와 함께 올바른 솔루션은 측정 될 가능성이 매우 높습니다. x
|xaddress|load(x)value.

아마도 가장 큰 문제는 Grover 알고리즘이 아닌 데이터베이스를 이해하는 것입니다. 6.5 장 Nielsen & Chuang에서 더 자세한 설명을 볼 수 있습니다.

또한 Grover 알고리즘의 가장 유용한 응용 프로그램은 데이터베이스 응용 프로그램이 아니라 모든 양자 알고리즘에서 진폭 증폭 ( https://arxiv.org/abs/quant-ph/0005055 참조 )으로 일반화 된 것이라고 생각합니다 .

편집 : 나는 glS가 이미 약간 대답 한 문제에 대해 생각했습니다. 오라클을 만들 수 있다면 문제가 이미 해결되지 않았습니까? 오라클을 구성하기 때문에 올바른 솔루션이 어떻게 보이는지 알아야합니다. 컴퓨터 과학에 대한 배경 지식이 없다면이 질문에 스스로 답하기가 어렵습니다. 그러나 대부분의 과학자들이 생각하는 가정하에 (NP P), 이는 NP- 완전 문제의 하위 집합 (근사법이 좋지 않은 문제)의 경우에 해당합니다. 오라클은 다항식 시간에 솔루션이 올바른지 확인할 수 있지만 오라클을 구성하여 올바른 솔루션을 효율적으로 계산할 수없는 것으로 보입니다.


나는 이것을 위해 P NP 를 호출 할 필요가 없다고 생각합니다 . 예를 들어, 고차원 qudit이 qubit과 결합되어 . 이것은 "전화 번호부"(일련의 숫자)와 같은 것을 각 숫자와 관련된 레코드 (여기서는 이진)로 인코딩 할 수 있습니다. 목표는 과 연관된 를 찾는 것입니다 . 그런 다음 오라클은 내부 dof에만 작동하고 인덱스는 그대로두고 Grover 알고리즘을 적용 할 수 있습니다. 오라클 구축은 쉽습니다. 를 조사하는 무언가를 구축 . k|k|skksk=+1sk
glS

예,이 예제는 첫 번째 예제로 이해하기 쉽습니다. 그러나 Grover 알고리즘은 광범위한 주요 문제에 대한 응용 프로그램에 유용하다는 것을 이해하고 있다고 생각합니다 .P NP 의 아이디어 는 중요합니다.
Alex Go

4

이것은 관련 질문 에서 이미 부분적으로 논의 되었지만 여기서는 제기되는 문제 중 일부를 더 구체적으로 다루기 위해 노력할 것입니다.

일반적으로 Grover의 알고리즘은 형식 의 쿼리 작업 을 수행 할 수 있다고 가정합니다 여기서 는 데이터베이스 및 어떤 정보에 대한 데이터베이스 첨부합니다 .

|i(1)f(xi)|i,
ixii

를 " 대한 질문 "으로 생각할 수 있습니다 . 예를 들어, " 이다 ? 소수 ", 또는 " 하지 속성이 , 어디?" 의미 할 수있다 "빨간색 인".f(xi)xixixiPP

는 완전히 특성화하지 않는 질문을 할 수 있다는 점에 유의해야합니다 . , 알고리즘을 실행하고 검색 하여 를 검색 하면 오라클을 구축하는 데 사용되지 않은 지식도 얻습니다.fxiixi

그러나 Grover 알고리즘의 많은 원리 증명 구현에서 보여지는 것과 같은 경우에는 그렇지 않습니다. 사실,이 시위에 요구되고있는 문제는 의미에서, "사소한"입니다 및 질문의 형식은 " 입니다 3 같음 ?".xi=ixi

그러한 경우에, 알고리즘은 대답이 오라클에 하드 코딩되어야한다는 점에서 특히 유용하지 않지만, 일반적으로 그렇지는 않다.


당신의 답변에 감사드립니다! 아마도 제시된 오라클이 주어진 실제 데이터에 그로버가 "유용한"실제 사례를 제공하는 것이 가능할까요? 예를 들어 소수와 소수가 아닌 8 요소 데이터베이스에서 어떻게 작동합니까?
01000001

1
@ 01000001 나는 cstheory.SE 에 관한 관련 질문에 대한 대답이 자격 있다고 생각 합니다 . 그다지 중요하지 않은 에 사용되는 Grover의 좋은 예입니다 . 그의 경우, 는 주어진 부울 공식이 입력에 의해 만족되는지를 코드화합니다. 알고리즘의 출력은 따라서 부울 공식을 만족 하는ffx
glS
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.