ฉันค่อนข้างสับสนเกี่ยวกับวิธีการใช้อัลกอริทึมของ Grover ในทางปฏิบัติและฉันต้องการขอความช่วยเหลือในการอธิบายผ่านตัวอย่าง
สมมติว่าฐานข้อมูลองค์ประกอบที่มีสีแดง, ส้ม, เหลือง, เขียว, ฟ้า, น้ำเงิน, ครามและม่วงไม่จำเป็นต้องเรียงตามลำดับนี้ เป้าหมายของฉันคือค้นหา Red ในฐานข้อมูล
อินพุตสำหรับอัลกอริทึมของ Grover คือ qubits โดยที่ 3 qubits เข้ารหัสดัชนีของชุดข้อมูล ความสับสนของฉันมาที่นี่ (อาจจะสับสนเกี่ยวกับสถานที่ดังนั้นแทนที่จะพูดว่าความสับสนเกิดขึ้นที่นี่) ตามที่ฉันเข้าใจแล้ว oracle จะค้นหาดัชนีของชุดข้อมูลอย่างใดอย่างหนึ่ง (แทนด้วยการซ้อนทับของ 3 qubits) และยิ่งไปกว่านั้น oracle คือ "hardcoded" สำหรับดัชนีที่ควรค้นหา
คำถามของฉันคือ:
- ฉันผิดอะไรที่นี่
- หาก oracle กำลังมองหาดัชนีตัวใดตัวหนึ่งในฐานข้อมูลนั่นหมายความว่าเรารู้แล้วว่าเรากำลังค้นหาดัชนีตัวใดอยู่ทำไมจึงต้องค้นหา
- เมื่อพิจารณาตามเงื่อนไขข้างต้นด้วยสีใครบางคนสามารถชี้ให้เห็นว่าเป็นไปได้หรือไม่ที่โกรเวอร์มองหาชุดสีแดงในชุดข้อมูลที่ไม่มีโครงสร้าง
มีการใช้งานสำหรับอัลกอริทึมของ Grover โดยมี oracle สำหรับค้นหา | 111> เช่น (หรือดูการนำ R ไปใช้กับ oracle เดียวกันด้านล่าง): /quantum//a/2205
อีกครั้งความสับสนของฉันคือเนื่องจากฉันไม่ทราบตำแหน่งขององค์ประกอบในชุดข้อมูลอัลกอริทึมต้องให้ฉันค้นหาสตริงที่เข้ารหัสตำแหน่งขององค์ประกอบฉันจะรู้ตำแหน่งที่ฉันควรมองหาเมื่อชุดข้อมูลที่ไม่มีโครงสร้างได้อย่างไรN
รหัส 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)