Simon algoritması — üstel hızlanmanın ilk kanıtı
Simon algoritması, oracle içine gizlenmiş bir maske 'in periyodik bir çakışma kuralıyla ortaya çıkarıldığı protokoldür. Klasik tarafta doğum günü paradoksu nedeniyle sorgu gerekirken, kuantum devresi aynı problemi çağrıyla çözer ve böylece kuantum hesaplama tarihindeki ilk üstel hızlanma kanıtını sunar.
Simon algoritması nedir?
Simon algoritması, bir fonksiyonun gizli bir periyodik yapıya sahip olup olmadığını ve sahipse bu periyodun ne olduğunu bulma protokolüdür. Oracle, içine sakladığı maskesi sayesinde her değerine mutlaka bir "ikiz" atfeder; algoritmanın görevi bu ikiz çiftlerin yapısını koklayıp 'i geri çıkarmaktır.
Bu sayfa, kuantum hesaplama tarihindeki ilk üstel klasik–kuantum ayrımını gösterir: aynı problemi klasik olarak çözmek doğum günü paradoksu yüzünden sorgu gerektirirken, kuantum devresi tipik olarak yalnızca tekrar yapar.
Problem tanımı
Elimizde bir oracle fonksiyonu bulunur. Bize verilen söz şudur: gizli bir dizisi vardır ve şu özelliği sağlar:
Yani bire-bir değildir; her çıktının tam olarak iki ön-görüntüsü vardır ve bunlar ile olarak tanımlanır. Eğer ise tam bir bijeksiyondur (özel ama bilgilendirici bir kenar durum). Hedef, bu gizli 'i belirlemektir.
-
Klasik yaklaşım
Aynı sonucu veren iki farklı girdi bulana kadar deneme yaparsın. Doğum günü paradoksu nedeniyle ortalama sorgu gerekir; için bu yaklaşık bir milyon çağrıdır.
-
Kuantum yaklaşımı
Algoritma yaklaşık kez koşturulur, her koşuda 'e dik bir vektörü örneklenir. Toplandığında bu vektörler doğrusal bir denklem sistemi kurar ve kesin biçimde çözülür.
-
Söz problemi
Algoritmanın işlemesi için 'in periyodik yapı sözünü tutması gerekir. Bu söz olmadan örneklenen vektörlerinin anlamı yoktur.
-
Shor ile bağ
Shor algoritmasının periyot bulma adımı aynı fikri tamsayı çarpanlamasının modüler kalan yapısına taşır. Simon, bu fikri bit düzeyinde anlamak için en sade ortamdır.
| (gizli dizi uzunluğu) | Klasik · ortalama sorgu | Kuantum (Simon) · sorgu |
|---|---|---|
| 4 | ||
| 20 | ||
| 40 | ||
| 100 |
Algoritmanın mantığı: paralellik ve örnekleme
Simon algoritması 'i tek seferde söylemez. Bunun yerine her koşuda, ile dik olan rastgele bir vektörü örnekler — yani şu denklemi sağlayan vektörler:
-
1
Hazırlık
İki adet kübitlik register kullanılır; tüm kübitler durumundan başlar. Birinci register algoritmanın hesap düzlemi, ikinci register oracle çıktısının yazıldığı depodur.
-
2
Süperpozisyon
İlk register Hadamard katmanından geçer. Sistem haline gelir; yani tüm değerleri eşit genlikle barındırılır.
-
3
Oracle uygulaması
Oracle ikinci register'a değerini yazar: . Bu adımdan sonra iki register dolanıktır.
-
4
İkinci register'ın çökmesi
İkinci register ölçüldüğünde rastgele bir değerine çökeriz. Dolanıklık nedeniyle birinci register artık yalnızca ikilisinin üst üste binmiş halidir: .
-
5
Girişim ve ölçüm
Birinci register'a yeniden Hadamard uygulanır. Girişim, yalnızca şartını sağlayan vektörlerinin genliğini hayatta bırakır. Bu yüzden ölçüm her seferinde 'e dik rastgele bir döner.
-
6
Klasik son işlem
Yeterince doğrusal bağımsız vektörü toplandığında (tipik olarak tane), klasik Gauss eliminasyonuyla denklem sistemi çözülerek kesin biçimde bulunur.
Derin sezgi · neden ölçtüğümüz z vektörleri s'e dik?
Kritik fikir Devrenin ortasında ikinci register ölçülünce, bir anda sadece bir “ikiz çift” kalır: |x⟩ + |x ⊕ s⟩. Son Hadamard katmanı bu iki terimi girişim ettirir ve ölçüm, rastgele bir z üretir ama şu koşulu zorunlu kılar: . Bu yüzden her ölçüm “s’e dik” bir denklem verir; yeterince farklı z toplayınca klasik tarafta lineer cebirle s çözülür.
Algoritmanın Qiskit reçetesi
Qiskit tarafında devre kübit ve klasik bit kullanır. İlk kübit hesap register'ı, sonraki kübit ise oracle'ın depolama register'ıdır. Klasik register yalnızca ilk register'ı ölçmek içindir; vektörlerini buradan toplarız.
-
Başlangıç
hazırlanır. Qiskit kodunda QuantumCircuit(2 * n, n) bu yapıyı doğrudan kurar.
-
Hadamard katmanı
qc.h(range(n)) ile yalnızca ilk register süperpozisyona alınır. Sistem haline gelir.
-
Oracle
simon_oracle(s) ile inşa edilen devre ana devreye eklenir. Bu blok, değerini ikinci register'a yazar ve iki register'ı dolanık hale getirir.
-
Son Hadamard ve ölçüm
İlk register'a yeniden Hadamard uygulanır ve sadece bu register ölçülür. Her shot, ile dik bir vektörü üretir.
Qiskit kodu
Aşağıdaki örnek için Simon devresini kurar. Birden fazla shot alarak 'e dik farklı vektörlerinin istatistiğini toplar; sonuçta yalnızca ve değerleri görünmelidir, çünkü iki bitlik bir uzayda 'e dik vektörler tam olarak bunlardır.
import numpy as np
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
def simon_oracle(s):
n = len(s)
qc = QuantumCircuit(2 * n)
# Basit bir Simon oracle tasarımı (s=11 için).
# Bu kısım s dizisine göre fonksiyonel olarak değişir.
for i in range(n):
qc.cx(i, i + n)
if s == "11":
qc.cx(0, 3)
qc.cx(1, 2)
return qc
def simon_algorithm(s):
n = len(s)
qc = QuantumCircuit(2 * n, n)
# 1. Hadamard katmanı (ilk register)
qc.h(range(n))
qc.barrier()
# 2. Oracle ekleme
oracle = simon_oracle(s)
qc.append(oracle, range(2 * n))
qc.barrier()
# 3. Son Hadamard katmanı (ilk register)
qc.h(range(n))
# 4. Ölçüm
qc.measure(range(n), range(n))
return qc
s_secret = "11"
qc = simon_algorithm(s_secret)
# Simülasyon
simulator = AerSimulator()
# Birkaç kez çalıştırıp farklı z vektörleri topluyoruz.
result = simulator.run(qc, shots=1024).result()
counts = result.get_counts()
print(f"Gizli Maske (s): {s_secret}")
print(f"Ölçülen z vektörleri (s.z = 0 olanlar): {counts}")
Kodun derinlemesine analizi
QuantumCircuit(2 * n, n) satırı iki ayrı register'ı tek bir kübit hattı üzerinde temsil eder. İlk kübit Simon'un hesap düzlemi, sonraki kübit ise oracle'ın depolama register'ıdır. Klasik kayıt yalnızca bit içerir, çünkü ölçüm sadece ilk register'da yapılır.
simon_oracle(s) bu örnekte kabaca iki adımdan oluşur: önce her giriş kübitinden hizalı depolama kübitine CNOT (yani 'in bire-bir bir kopyalama tabanı) ve ardından olduğunu söylediğin için seçilmiş ek CNOT'lar. Bu ek CNOT'lar, ve ikilisini aynı değerine eşleyen periyodik yapıyı kurar.
qc.h(range(n)) ifadesi algoritmada iki kez geçer. İlk Hadamard katmanı tüm değerlerini eşit genlikle barındırır; ikincisi ise ikinci register'ın çökmesinden sonra geriye kalan üst üste binmesini, 'e dik vektörlerinin ölçülebilir genliğine çevirir.
shots=1024 seçimi Bernstein–Vazirani'den farklı bir gerekçeye dayanır. Simon deterministik tek bir cevap vermez; her shot 'e dik rastgele bir döndürür. Yeterince doğrusal bağımsız toplandığında klasik bir lineer denklem sistemiyle çözülür.
Devre ve doğrulama
Aşağıdaki şema için Simon devresinin ana akışını gösterir. İlk iki kübit hesap register'ı, alttaki iki kübit ise depolama register'ıdır. Oracle bloğu içindeki CNOT yapısı, gizli maskenin değerine göre değişir.
Şemayı adım adım oku
-
Üstteki “hesap” register’ına H uygulanır; tüm x değerleri tek süperpozisyonda taşınır.
-
Oracle bloğu, her x için sonucu alt “depo” register’ına yazar. Simon vaadi yüzünden çıktılar “ikiz” girdileri eşler: x ve x ⊕ s.
-
Oracle’dan sonra hesap register’ına tekrar H uygulanır. Bu girişim, ölçümde yalnızca z · s = 0 koşulunu sağlayan desenlerin görünmesine neden olur.
-
Hesap register’ı ölçülür ve farklı z örnekleri toplanır. Klasik tarafta bu denklemlerden s çözülür.
Hedef: 1024 shot sonunda yalnızca 'e dik vektörlerin görünmesi.
- 00 ≈ %50 (her zaman dik)
- 11 ≈ %50 ('e dik)
- 01, 10 → 0 (ideal sim.)
-
Neden ve ?
İki bitlik uzayda 'e dik vektörler XOR toplamı sıfır olan desenlerdir. ve bu şartı sağlarken ve ideal devrede genlik kazanmaz.
-
'in çözümü
Pratikte bir veya iki doğrusal bağımsız toplanır: ile . Buradan çıkar; sıfırdan farklı tek olasılık 'dir.
-
Daha büyük
büyüdükçe daha fazla shot ile yaklaşık doğrusal bağımsız toplamak gerekir. Toplama sayısı yine polinomdur; bu, klasik çözümün üstel büyümesine karşı asıl avantajdır.
-
Donanım notu
Gerçek cihazda gürültü, ve desenlerine küçük olasılıklar sızdırabilir. Klasik denklem çözümü bu gürültüye karşı dayanıklıdır; gürültülü vektörler basit çoğunluk veya doğrusal bağımsızlık filtreleriyle elenir.