Grover-Algoritması bir veritabanına nasıl uygulanır?


12

Soru

Grover-Algoritmasını unsuru için sıralanmamış bir veritabanında arama yapmak istiyorum . Şimdi soru ortaya çıkıyor, nasıl qubits ile veritabanının dizin ve değerini başlatmak nasıl?x

Misal

  • Diyelim ki kubetim var. Böylece, klasik değer eşlenebilir.424=16
  • Sıralanmamış veritabanım şu öğelere sahiptir: .dd[Value]=[3,2,0,1]
  • aramak istiyorum .x=2d=10b=|10
  • Yaklaşımım index veritabanı ile . Kaydeder 0 ve 1 indeks ve kayıt için 2 ve 3 bir değer. Ardından Grover-Algoritmasını yalnızca 2 ve 3 kayıtlarına uygulayın (\ text {Value}) . Bu gerçekleştirilebilir mi? Başka bir yaklaşım var mı?dd[(Endeks, Değer)]=[(0,3),(1,2),(2,0),(3,1)]012323(değer)

Zaten uyguladığım ( GitHub'da )

"2-, 3-, 4-Qubits ile Grover-Algoritması", ancak basittir: bitler |0 ile başlatılır , oracle çözümümü x işaretler (bu sadece 2d=10b ), Grover kısmı, seçilen elemanın x olasılığını artıracak ve diğer tüm olasılıkları azaltacaktır ve daha sonra kübitler, klasik bitlerle eşleştirilerek okunur. Bu sürecin art arda birkaç kez çalışmasına izin veriyoruz ve böylece en yüksek olasılığın x aradığımız bir olasılık dağılımı elde ediyoruz .

Çıktı her zaman kehanette işaretli olanla aynıdır. Kehaneti inşa ettiğim zaman bilmediğim çıktıdan nasıl daha fazla bilgi üretebilirim?

Yanıtlar:


9

Ben de bu sorun üzerinde çalışıyorum. Yeni başlayan ve klasik bir programcı olarak (yani, Kuantum Mekaniği konuşmuyorum), tam örnekler olmadan kavramları anlamak zordur. Beraber çalıştığım Microsoft Q # Veritabanı Arama numunesi . Veritabanında çok kullanışlı olmayan belirli bir dizin / anahtar arar. Bir veritabanındaki değerlerin listesini aramak ve karşılık gelen anahtarı döndürmek için bu örnek üzerine genişlettik.

Örneğinizde olduğu gibi, dizinler için bir adet iki-qubit "anahtar kaydı" ve değerler için ayrı bir iki-qubit kaydı vardır. İstenen değerin ne zaman bulunduğunu belirtmek için Microsoft'un örneğinden gelen beşinci "işaretli bir kübit" de vardır. Anahtarlar ve değerler dolaşma ile ilişkilidir. Bu en iyi şekilde bir devre ile gösterilir. Gerçek Quirk devresini görmek için buraya tıklayın .

Anahtar / Değer Oracle Circuit

Bu devrenin sadece kehanet içerdiğini unutmayın. Tüm Grover algoritmasını uygulamaz.

  • Üstteki iki kubit anahtar yazmacı, sonraki iki kubit değer yazmacı ve alt kübit işaretli kübittir.
  • İlk bölüm, Grover algoritmasının gerektirdiği şekilde Haramard kapılarını kullanarak anahtar kaydını tekdüze bir üstüste koymaktadır.
  • İkinci bölüm, anahtarların dolaşma yoluyla değerlerle ilişkilendirildiği bölümdür. Her bir anahtar, (Anti-) Kontrollü X kapıları uygulanarak değer kaydında karşılık gelen bir değerle dolanır. Böylece, anahtar kaydı 0 olduğunda, değer kaydı 3 olarak ayarlanacaktır. Anahtar 1 olduğunda, değer 2 olarak ayarlanır ve bu şekilde devam eder.
  • Devrenin üçüncü bölümü arama kehanetidir. Değer kaydı işaretli qubit ile dolanır. Bu örnekte, istenen değer 2'dir. Değer kaydı 2 içerdiğinde, işaretli qubit 1 olarak ayarlanır.
  • Grover'ın algoritması anahtar kaydına bakar ve kubit olarak işaretlenir. Arama kehaneti değer kaydına bakar ve işaretli kübit ayarlar. Bu, değer 2 olduğunda anahtar 1'in yükseltilmesine neden olur.

Anahtarların ve değerlerin kubitlerde değil, devre / programda saklandığını belirtmek ilginçtir. Gerçekten kendi başına bir veritabanı olmadığını söyleyebiliriz. Daha çok bir switch / case deyimi gibidir, ancak değerlerin üst üste bindirilmesiyle çalışabilen bir deyimdir.

Daha fazla ayrıntı, uyarılar ve Q # kodu için GitHub veri havuzuma bakın .

EDIT: Yanıtladığımdan beri daha iyi anladığım bir şey ... devreyi her yinelemenin bir parçası olarak tersine çevirmeli / geri almalısınız. Q # kodunda, ReflectStart () işlemi içindeki Adjoint StatePreparationOracle () çağrısı bunu işler, bu yüzden açıkça yapmak zorunda değildim. Qiskit'in benzer bir özelliği olup olmadığını bilmiyorum. Çeviriyi doğru bir şekilde yapmışsam, yukarıdaki örnek için tam bir devre .


Teşekkürler! Tam da aradığım şey buydu.
alex

Grover-Part için: Sadece anahtar kayıtları ile amplifikasyon şeyler yapmak zorundayım (bu örnekte 2 qubit)? İşaretli kübitle nasıl bağlantı kuruyorlar?
alex

Q # örneğine göre, "Grover'ın algoritması işaretli durum ve başlangıç ​​durumu hakkında yansımalar gerektirir", bu nedenle hem işaretli qubit hem de anahtar kaydı ile çalışmanız gerekir. QuantumSearch () işleminde kodu izlerseniz, ReflectMarked () işlevinin yalnızca işaretli qubit ile çağrıldığını görürsünüz. ReflectZero () daha sonra işaretli kübit ve anahtar kaydının bir kombinasyonu ile de çağrılır. Ayrıca, lütfen yukarıdaki Düzenle'ye bakın.
Joel Leach

3

Grover'ın algoritmasını bir veritabanında arama yapmak üzere uygulandığında, Oracle'ın klasik listenin öğelerine erişimi olduğu varsayılır. Yine de bu çok güçlü bir varsayımdır ve bu yüzden, sadece bu işlemi temsil eden bir indeksin CNOT / Toffolis kullanan kontrollü bir seçici ile ( Toffoli devresi gibi) temsil ediyoruz .n=4

Başka bir kayıttaki değerleri hesaplama yaklaşımından bahsediyorsunuz: Tekrar ve verimli bir şekilde yapmanız için size bir kâhin verildiğini varsayıyorsunuz (basit bir yol kontrol-DEĞİLDİR ama bunu her indeks / değer için yapmak zorundasınız, bu yüzden çok verimli değil). Bu durumda, kehanet kuantum devre biçiminde (yine kontrollü bir seçici) işlevi olacaktır , bu durumu işaretler ve Grover yinelemeleriyle devam eder.

Σben|ben|d(ben)
f(ben)=2

Bir liste / veritabanında arama yapmak yerine, kuantum arama algoritmasını bir işlevi optimize etmek olarak düşünmek daha iyi olduğunu düşünüyorum. Algoritmayı daha iyi anlamak istiyorsanız, bir kombinatoryal maksimizasyon problemini çözmek için kuantum aramasının kullanıldığı bir makale .


Cevabın için teşekkürler! Dolayısıyla Grover-Algoritması veritabanı araması için daha az uygundur. Burada ilgili bir soru buldum .
alex

Bu DB arama sorununu çözmek için bir sahte kod (veya Qiskit kodu) var mı?
alex

Bakmanız gerekecek, ancak çerçeveler arasında bulmak kolay olmalı.
cnada

3

Veritabanını da tutmak için kehaneti dönüştürmeniz gerekir, sonuç olarak, genel Oracle (Phase Inversion) figürüne bir göz atacak iki alt kehanete sahip olacaktır. Veritabanı arama için genel Grover'ın algoritma devresi

Hazırlanması gereken ilk alt kehanet, vücuttaki kuantum verilerini (durumunu) depolayan QRAM'ın aksine, bellek devresidir, bu bellek (dizi) devresi, çerçevede sadece klasik bilgileri depolamak için hazırlanmıştır. Bir dizi ikili [010, 110, 100, 011] saklayan bu tür bir devre örneği aşağıda gösterilmiştir: bir bellek devresi örneği Daha fazla bilgi için bu makaleyi okuyun .

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.