Grover의 알고리즘을 실제로 어떻게 사용할 수 있는지에 대해 상당히 혼란 스러우며 예제를 통해 설명에 도움을 요청하고 싶습니다.
빨강, 주황, 노랑, 녹색, 청록, 파랑, 인디고 및 바이올렛 색상을 포함 하는 요소 데이터베이스를 가정합니다 . 내 목표는 데이터베이스에서 빨간색을 찾는 것입니다.
Grover 알고리즘의 입력은 qubits이며 여기서 3 qubits는 데이터 세트의 인덱스를 인코딩합니다. 내 혼란은 여기에 있습니다 (전제에 대해 혼란 스러울 수 있으므로 혼란이 여기에서 발생합니다), 내가 알듯이 오라클은 실제로 데이터 세트의 인덱스 중 하나를 검색합니다 (3 큐빗의 중첩으로 표시됨). 오라클은 찾아야 할 인덱스를 "하드 코딩"했습니다.
내 질문은 :
- 여기서 내가 뭘 잘못합니까?
- 오라클이 실제로 데이터베이스의 인덱스 중 하나를 찾고 있다면, 어떤 인덱스를 찾고 있는지 알 수 있습니다. 왜 검색합니까?
- 위의 색상이있는 상황에서 Grover가 비정형 데이터 세트에서 빨간색을 찾을 수 있다면 누군가 지적 할 수 있습니까?
예를 들어 검색하기위한 oracle을 사용한 Grover의 알고리즘에 대한 구현이 있습니다 (예 : 또는 동일한 oracle의 R 구현 참조) : /quantum//a/2205
다시 말하지만, 데이터 집합에서 요소 의 위치를 모르면 알고리즘에서 요소 의 위치를 인코딩하는 문자열을 검색해야합니다 . 데이터 세트가 구조화되지 않은 경우 어떤 위치를 찾아야하는지 어떻게 알 수 있습니까?
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)