Grover'ın algoritması: gerçek bir hayat örneği?


13

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.N=8

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".n=log2(N=8)=3

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/2205n=3111 için Oracle

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?NN

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)

image2



Yanıtlar:


5

Bir veritabanı kullanımında etkili olmanın temel varsayımlarından biri, QRAM olarak da adlandırılan bir RAM'den adres verilerinin üst üste binmesini yükleyebilmenizdir (bkz. Https://arxiv.org/abs/0708.1879 ). Daha sonra adres için bir durumunuz, değer için bir durumunuz ve karşılık gelen adresin değerini değer kaydına yükleyen bir yükleme işlemi olduğunu varsayalım. Böylece yükleme işlemi

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

İlk adımda Hadamard kapılarını adres kaydına uygular ve ardından yükleme işlemini her iki kayıtta da uygularsınız. Daha sonra veritabanındaki tüm değerlerin üst üste binmesi ve bir değer kaydı olacaktır. Ardından, bir asal veya belirli bir değer aramak istediğiniz herhangi bir kehanetle değer kaydına Grover algoritmasını uygularsınız. sonra biliyoruz

Haddressn|0address|0value=12n/2x=02n1|xaddress|0value
apply load12n/2x=02n1|xaddress|load(x)value
O(N)yinelemeler doğru cevap yüksek olasılıkla ölçülecektir. Bu nedenle, doğru çözümün kayıt adresi ile birlikte doğru çözüm ölçülecektir. x
|xaddress|load(x)value.

Belki de asıl sorun Grover algoritmasını değil veritabanını anlamaktır. Bunun için bölüm 6.5 Nielsen & Chuang'da daha ayrıntılı bir açıklama görebilirsiniz.

Ayrıca, Grover algoritmasının en yararlı uygulamasının veritabanı uygulaması olmadığını, ancak genlik amplifikasyonu olarak genelleştirmeleri olduğunu düşünüyorum (bkz. Https://arxiv.org/abs/quant-ph/0005055 ).

EDIT: glS zaten biraz cevap sorun düşündüm: Eğer bir kehanet inşa edebilir, sorun zaten çözülmüş değil mi? Çünkü kehaneti inşa etmek için doğru çözümün nasıl göründüğünü bilmemiz gerekir. Ve bilgisayar bilimlerinde arka planınız yoksa, bu soruyu kendiniz cevaplamak zor olacaktır. Bununla birlikte, çoğu bilim insanının inandığı varsayımlar altında (NP P), bu, NP-tam problemlerinin bir alt kümesi için geçerlidir (iyi yaklaşım yöntemleri olmayanlar). Bir çözümün polinom zamanında doğru olup olmadığını kontrol edebilen bir kehanet inşa edebiliriz, ancak doğru çözümü bulan etkili bir şekilde hesaplanabilir görünmeyen bir kehanet inşa edebiliriz.


Bunun için P çağırmanız gerektiğini düşünmüyorum . Örneğin, bir kübit ile birleştirilmiş yüksek boyutlu bir qudit'in olduğu bir durumu ele , böylece . Bu, her bir numarayla ilişkilendirilmiş bir kayıtla (burada ikili) "telefon defteri" (sayı serisi) gibi bir şeyi kodlayabilir. Amacınız bulmaktır ile ilişkili . Daha sonra Grover algoritmasını uygulayabilirsiniz, kehanet sadece iç dof'a etki eder ve dizine dokunulmaz. Kehaneti inşa etmek kolaydır: sadece probunu şey inşa . k|k|skksk=+1sk
glS

Evet, bu örneğin ilk örnek olarak anlaşılması daha kolaydır. Ancak, Grover algoritmasının daha geniş bir önemli sorun sınıfındaki bir uygulama için yararlı olduğunu anladığımı düşünüyorum, P NP'nin arkasındaki fikir önemlidir.
Alex Go

4

Bu zaten bu ilgili soruda kısmen tartışılmıştır , ancak burada ortaya koyduğunuz bazı sorunları daha spesifik olarak ele almaya çalışacağım.

Genel olarak konuşursak, Grover'ın algoritması, formunun sorgulama işlemini gerçekleştirebileceği varsayımına dayanır burada , veritabanı ve veritabanının bilgiler .

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

'yi " hakkında soru sormak " olarak düşünebilirsiniz . Örneğin, " bir ? Asal sayıdır ", ya da " yok mülkiyet sahip , nerede?" anlamına gelebilir "kırmızı olmak".f(xi)xixixiPP

O dikkat etmek önemlidir tam karakterize etmeyen bir soru soran olabilir . Ben algoritması çalıştırın ve almak bundan sonra bu araçlar ve dolayısıyla onunla, ben de torpil oluşturmak için kullanılmamıştır bilgi sahibi.fxiixi

Bununla birlikte, Grover algoritmasının, gösterdiğiniz gibi, ilke uygulamalarının birçok kanıtında, durum böyle değildir. Nitekim, bu gösterilerde soruluyor soru anlamında, "önemsiz" olduğunu ve soru formunun olduğu " olduğunu 3'e eşit ?".xi=ixi

Böyle bir durumda, algoritma cevabın kehanete sabit olarak kodlanması gerektiği için özellikle yararlı değildir, ancak genel olarak böyle olması gerekmez.


Cevabın için teşekkürler! Belki de Grover'ların sunulan kâhin göz önüne alındığında bazı gerçek verilere "yararlı" olduğu gerçek bir yaşam örneği sunmak mümkün olabilir? Örneğin, asal ve asal olmayan 8 elemanlı bir veritabanı ile nasıl çalışır?
01000001

1
@ 01000001 cstheory.SE ile ilgili bir soru üzerine bu cevabın yeterli olduğunu düşünüyorum . Bu önemsiz bir için kullanılan Grover güzel bir örneğidir . Onun durumunda , belirli bir boole formülünün girdi tarafından tatmin edilip edilmediğini kodlar. Algoritmanın sonucu böylece bir bir boolean formül I'e sahipffx
GLS
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.