Grover'ın algoritmasının pratikte nasıl kullanılabileceği konusunda oldukça kafam karıştı ve bir örnekle açıklama konusunda yardım istemek istiyorum.
Kırmızı, Turuncu, Sarı, Yeşil, Camgöbeği, Mavi, Çivit ve Menekşe renklerini içeren ve bu sırada olması gerekmeyen bir elemanlı veritabanı olduğunu varsayalım . Amacım veritabanında Red'i bulmak.
Grover algoritması için girdi kubittir, burada 3 kubit veri kümesinin indekslerini kodlar. Benim karışıklığım buraya gelir (tesisler hakkında şaşkın olabilir, bu yüzden burada karışıklık grevleri söyleyin), anladığım kadarıyla, kehanet aslında veri kümesinin endekslerinden birini arar (3 kubitin üst üste binmesi ile temsil edilir) ve ayrıca, kehanet hangi dizine bakması gerektiğini "sabit olarak kodlar".
Sorularım:
- Burada neyi yanlış yapıyorum?
- Oracle gerçekten veritabanının endekslerinden birini arıyorsa, bu hangi endeksi aradığımızı bildiğimiz anlamına gelir, neden arama?
- Renklerle ilgili yukarıdaki koşullar göz önüne alındığında, birisi Grover's ile yapılandırılmamış bir veri kümesinde Red'i aramak mümkün ise bunu belirtebilir mi?
Grover algoritması için | 111> araması için bir kehanetle ilgili uygulamalar vardır , örneğin (veya aşağıdaki aynı kehanetin bir R uygulamasına bakın): /quantum//a/2205
Yine, karışıklığım, bir veri kümesindeki öğelerinin konumunu bilmediğimde , algoritma öğelerinin konumunu kodlayan bir dize aramamı gerektirir . Veri kümesi yapılandırılmadığında hangi konuma bakmam gerektiğini nasıl bilebilirim?
R kodu:
#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)