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ı, oracle modelinde gizlenmiş bir bit vektörünü ortaya çıkarmak için kullanılan kuantum protokoldür. Fonksiyon XOR toplamasına göre şöyle bir periyot taşır: iki giriş ancak ve ancak birbirinden kadar ötelenmişlerse aynı çıktıyı verir (bu ilişkinin tam matematiksel yazımı bir sonraki bölümde). Sezgisel olarak, kara kutu her için “aynı görüntünün ikinci kaynağı”ni olarak saklar—ama bu ikizleme, özel durum iken çökerek kaybolur ( ). Görev, bu periyodu koklayıp 'yi öğrenmektir.
Deutsch–Jozsa ve Bernstein–Vazirani örneklerinde olduğu gibi burada da mesele tek bitlik bir tahmin oyunu değil, çıktıların ortak yapısından gizli parametreyi çıkarma vardır; fakat Simon'un vaadi doğrusal iç çarpım ( BV) ya da sabit/dengeli sınıf (DJ) değil, XOR alt grubu üzerinde çarpışan çiftler ilişkisidir. Bu yüzden algoritma genelde tekrarlı bir kuantum alt rutini ve klasik doğrusal cebir ( örneğin Gauss eliminasyonu) ile çalışır; tek ölçümde bit-string düşmez—maliyet özeti aşağıdaki paragrafta.
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ı
Bu problemde kara kutunun içinde göremediğiniz sabit bir vektör var; kutunun kuralı şöyle düşünülebilir: İki farklı istek ancak birbirine XOR ile aynı öteleme mesafesi kadar uzaksa aynı cevabı verir. Yani her çıktı—bu yapı geçerliyken—doğal olarak “hangi çift girişler aynı görüntüyü paylaşıyor?” sorusuna bağlanır; klasik tarafta bu çiftlerden birini rasgele ararken doğum günü paradoksu devreye girer ve maliyet kabarıyor. Kuantum tarafı ise bilerek çakışma avlamak yerine, periyotla uyumlu doğrusal kısıtlar üretip 'yi cebirsel olarak çözer. Aşağıdaki satırlar bu vaadi matematiksel olarak sabitler; altındaki dört kutu da maliyet ve sözü tek bakışta toparlar.
Elimizde bir oracle fonksiyonu bulunur. Bize verilen söz şudur: gizli bir dizisi vardır ve şu özelliği sağlar:
olduğu sürece iki-ye-bir bir fonksiyondur; 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
Problem tanımında yazdığımız vaadi burada devreye konduğu anda yaşamaya başlar; amaç kara kutunun içindeki “hangi çiftler çarpışıyor?” bilgisini tek tek sızmak değil, bunun doğrusal sonuçlarını örnekleştirmektir. Bir Simon koşusu, özetle şunu yapar: tüm girişleri süperpozisyona alır, oracle çıktısını ikinci bir hatta saklar, sonra ölçümle o çıktıya bağlı yalnızca küçük bir ikili yapıyı (aynı çıktıyı paylaşan iki girişi) birinci hatta bırakır ve Hadamard girişimiyle mod 2 doğrusal bir filtre geçirirsiniz. Çıkan örnek, doğrudan 'yi vermez; fakat onun için tek tek doğrusal kısıt oluşturur. Aşağıdaki adımlar tek bir böyle koşunun fotoğrafıdır — klasik Gauss adımı zaten listenin sonunda, satır satır kod ise daha sonraki bölümlerde bağlanır.
Dolayısıyla Simon protokolü 'yi tek seferde söylemez. Her koşuda üretilen rasgele , bit düzeyinde iç çarpımla ile mod 2 iç çarpımında ortogonal olur (yani aşağıdaki denklemin çözüm uzayından seçilir):
Bu kısıtın kolektif olarak ne işe yaradığını mod 2 cebiri ile düşünün: sabit bilinmese bile her başarılı koşu bilinmeyen çözüm için mod 2 üzerinde bir doğrusal kısıt ekler; yeterince bağımsız örnek birikince bu kısıtların çözüm uzayı daralır ve gizli maskeyi tekilleştirmeye yetecek kadar bilgi birikir — böylece klasik tarafta yeniden kurulur. Şimdi aynı olayı kapılar sırasıyla izleyelim.
-
1
Hazırlık
İki adet kübitlik register kullanılır; tüm kübitler durumundan başlar. Birinci blok “hesap düzlemi”: süperpozisyonda taşınan girişler burada yaşar. İkinci blok ise klasik olarak değerini geri döndürülebilir biçimde saklamak için gereken kuantum bellek şerididir; Simon XOR oracle mimarisinde genişlikler eşit seçilir ki her çıktı etiketi kendi kübit dizisiyle yer kaplasın.
-
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. Bernstein–Vazirani kurulumunda çıktı tek kübitlik faz kabına sığdığı için bir Hadamard zinciri yeterliydi; burada ise çıktı tam bir bitlik dizidir — dolayısıyla ikinci register önce boşta bekler, sonra oracle tam çarpışma adresini oraya kopyalar.
-
3
Oracle uygulaması
Oracle ikinci register'a değerini yazar: . Ünite oracle olduğu için ilk bloktaki etiketi yerinde kalır; ikinci blok ise çarpışmanın gözle görülür izidir ve iki blok birbirine bağlanır — ölçüm yapmadan önce hangi 'in hangi ile eşleştiği artık kuantum olarak kodlanmıştır.
-
4
İkinci register'ın çökmesi
İkinci register ölçüldüğünde rastgele bir değerine çökeriz. Altta yatan Simon yapısında olduğu sürece her çıktı etiketi tam iki farklı girdiyle ilişkilidir; dolayısıyla dolanıklık nedeniyle birinci register genelde yalnızca ikilisinin üst üste binmiş halidir: . Özel olarak durumunda çarpışma kaybolur ve ölçüm sonrası birinci blok tek bir ketine sıkışır — problem tanımında belirttiğimiz biçimde bu rejim ayrıca ele alınır.
-
5
Girişim ve ölçüm
Birinci register'a yeniden Hadamard uygulanır; bu, üzerinde çalıştığımız Boolean vektör uzayında bir Hadamard (Walsh) dönüşümüdür ve ölçüm öncesi olarak hesaplama tabanından mod 2 Fourier karşıtına geçiş yapar. İki terimli süperpozisyon üzerinde 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; döngü başına örnek sayısı ve kuantum maliyeti problem tanımındaki kuantum yaklaşımı kartıyla örtüşür.
Derin sezgi · neden ölçtüğümüz z vektörleri s'e dik?
Bu alt başlıktaki kutular, üstteki adım listesini yeniden yazmıyor; kapı sırasını zaten taradınız. Buradaki mesele, ölçüm sonrası çıkan z'nin neden doğrudan s olmadığı halde s hakkında zorunlu bir mod 2 doğrusallık taşıdığını — ve bunun faz/girişim dilinde nereden süzüldüğünü göstermek.
Faz dengesi (burayı adım listesi vermez) İkinci hat sabitlendikten sonra birinci hat için iki terim vardır; Hadamard öncesi genlikler eşit olduğundan, ikinci Hadamard katmanında her çıktı etiketi için iki yolun katkısı + olarak yazılır; üstlerdeki iç çarpımlar mod 2 paritesini kodlar. Bu toplam yalnızca iken sıfırdan farklıdır; aksi halde iki terim birbirini götürür. Ölçüm böylece mod 2 iç çarpımında s ile ortogonal kalan etiketler arasından rastgele bir z döndürür; Bernstein–Vazirani kurulumundaki tek atışlık faz kodunun aksine burada bilgi, bu kısıtları çoğaltarak birikir.
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}")
Aynı Devre (İki Temsil)
Editördeki s_secret = "11" ile oluşturulan qc = simon_algorithm(s_secret) için Qiskit metin çizimi solda; sağda aynı olayın şematik özeti yer alır. Oracle simon_oracle(s) append ile gömüldüğünden terminalde tek blok olarak görünür; iç CNOT ayrışımı Qiskit sürümüne göre değişebilir. Klasik hat c: 2/ yalnızca hesap register ölçümünü taşır.
print(qc) çıktısı · s=11 · 2n kübit
┌───┐ ░ ┌──────────────┐ ░ ┌───┐┌─┐
q_0: ┤ H ├─░─┤0 ├─░─┤ H ├┤M├───
├───┤ ░ │ │ ░ ├───┤└╥┘┌─┐
q_1: ┤ H ├─░─┤1 ├─░─┤ H ├─╫─┤M├
└───┘ ░ │ circuit-158 │ ░ └───┘ ║ └╥┘
q_2: ──────░─┤2 ├─░───────╫──╫─
░ │ │ ░ ║ ║
q_3: ──────░─┤3 ├─░───────╫──╫─
░ └──────────────┘ ░ ║ ║
c: 2/═════════════════════════════════╩══╩═
0 1
H · hesap register Oracle · U_f (append) H · ölçüm · z örnekleri
Premium devre çizimi
turuncu · temel kopya pembe · s=11 düzeltmesi mor · H · mavi · ölçüm alt şerit · s·z ≡ 0 · parity
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
Bu şema 6 · Aynı Devre (İki Temsil) bölümündeki akışı korur; için Simon devresinin ana hatlarını yineleyerek 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.