1. Ana sayfa
  2. Algoritmalar
  3. Deutsch–Jozsa ve oracle sınıfı
  4. Simon algoritması · Qiskit
Deutsch–Jozsa ve oracle sınıfı · Qiskit

Simon algoritması — üstel hızlanmanın ilk kanıtı

Simon algoritması, oracle içine gizlenmiş bir maske s s 'in periyodik bir çakışma kuralıyla ortaya çıkarıldığı protokoldür. Klasik tarafta doğum günü paradoksu nedeniyle O ( 2 n / 2 ) \mathcal{O}(2^{n/2}) sorgu gerekirken, kuantum devresi aynı problemi O ( n ) \mathcal{O}(n) çağrıyla çözer ve böylece kuantum hesaplama tarihindeki ilk üstel hızlanma kanıtını sunar.

  • Çerçeve: Qiskit
  • 2 n 2n kübit · iki register
  • Gizli maske: s s
  • O ( n ) \mathcal{O}(n) sorgu

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ığı s s maskesi sayesinde her x x değerine mutlaka bir "ikiz" x s x \oplus s atfeder; algoritmanın görevi bu ikiz çiftlerin yapısını koklayıp s s '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 O ( 2 n / 2 ) \mathcal{O}(2^{n/2}) sorgu gerektirirken, kuantum devresi tipik olarak yalnızca O ( n ) \mathcal{O}(n) tekrar yapar.

Shor'un atası Simon algoritması, sadece akademik bir merak değildir; Shor algoritmasının çekirdeğindeki periyot bulma (period finding) fikrinin habercisidir. Modüler aritmetik üzerinde çalışan bir periyodu bulmak yerine bit-XOR uzayında çalıştığı için Simon, Shor'un sayı teorik versiyonuna geçmeden önce mantığı tam olarak anlamak için ideal bir laboratuvardır. RSA'yı kıran sezgi tam olarak burada başlar.

Problem tanımı

Elimizde bir oracle fonksiyonu f : { 0 , 1 } n { 0 , 1 } n f : \{0,1\}^n \to \{0,1\}^n bulunur. Bize verilen söz şudur: gizli bir s { 0 , 1 } n s \in \{0,1\}^n dizisi vardır ve f f şu özelliği sağlar:

f ( x ) = f ( y )       y = x s f(x) = f(y) \iff y = x \oplus s

Yani f f bire-bir değildir; her çıktının tam olarak iki ön-görüntüsü vardır ve bunlar x x ile x s x \oplus s olarak tanımlanır. Eğer s = 0 n s = 0^n ise f f tam bir bijeksiyondur (özel ama bilgilendirici bir kenar durum). Hedef, bu gizli s s 'i belirlemektir.

  • Klasik yaklaşım

    Aynı sonucu veren iki farklı girdi ( x , y ) (x, y) bulana kadar deneme yaparsın. Doğum günü paradoksu nedeniyle ortalama O ( 2 n / 2 ) \mathcal{O}(2^{n/2}) sorgu gerekir; n = 40 n=40 için bu yaklaşık bir milyon çağrıdır.

  • Kuantum yaklaşımı

    Algoritma yaklaşık n 1 n-1 kez koşturulur, her koşuda s s 'e dik bir z z vektörü örneklenir. Toplandığında bu vektörler doğrusal bir denklem sistemi kurar ve s s kesin biçimde çözülür.

  • Söz problemi

    Algoritmanın işlemesi için f f 'in periyodik yapı sözünü tutması gerekir. Bu söz olmadan örneklenen z z 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.

Klasik vs kuantum · sorgu maliyeti Aynı periyodik oracle problemi için iki dünyanın masrafı dramatik biçimde ayrışır. Aşağıdaki kıyaslama, Simon'un neden bu kadar tarihsel önem taşıdığını tek bakışta gösterir.
Sorgu maliyeti karşılaştırması periyodik oracle problemi için
n n (gizli dizi uzunluğu) Klasik · ortalama sorgu Kuantum (Simon) · sorgu
4 2 2 = 4 \sim 2^{2} = 4 4 \sim 4
20 2 10 1 024 \sim 2^{10} \approx 1\,024 20 \sim 20
40 2 20 10 6 \sim 2^{20} \approx 10^{6} 40 \sim 40
100 2 50 10 15 \sim 2^{50} \approx 10^{15} 100 \sim 100

Algoritmanın mantığı: paralellik ve örnekleme

Simon algoritması s s 'i tek seferde söylemez. Bunun yerine her koşuda, s s ile dik olan rastgele bir z z vektörü örnekler — yani şu denklemi sağlayan vektörler:

s z = 0 ( m o d 2 ) s \cdot z = 0 \pmod 2
  1. 1

    Hazırlık

    İki adet n n kübitlik register kullanılır; tüm kübitler 0 |0\rangle durumundan başlar. Birinci register algoritmanın hesap düzlemi, ikinci register oracle çıktısının yazıldığı depodur.

  2. 2

    Süperpozisyon

    İlk register Hadamard katmanından geçer. Sistem 1 2 n x x 0 \frac{1}{\sqrt{2^n}} \sum_{x} |x\rangle |0\rangle haline gelir; yani tüm x x değerleri eşit genlikle barındırılır.

  3. 3

    Oracle uygulaması

    Oracle ikinci register'a f ( x ) f(x) değerini yazar: x 0 x f ( x ) |x\rangle |0\rangle \to |x\rangle |f(x)\rangle . Bu adımdan sonra iki register dolanıktır.

  4. 4

    İkinci register'ın çökmesi

    İkinci register ölçüldüğünde rastgele bir f ( x 0 ) f(x_0) değerine çökeriz. Dolanıklık nedeniyle birinci register artık yalnızca { x 0 , x 0 s } \{x_0, x_0 \oplus s\} ikilisinin üst üste binmiş halidir: 1 2 ( x 0 + x 0 s ) \frac{1}{\sqrt{2}}\bigl(|x_0\rangle + |x_0 \oplus s\rangle\bigr) .

  5. 5

    Girişim ve ölçüm

    Birinci register'a yeniden Hadamard uygulanır. Girişim, yalnızca s z = 0 ( m o d 2 ) s \cdot z = 0 \pmod 2 şartını sağlayan z z vektörlerinin genliğini hayatta bırakır. Bu yüzden ölçüm her seferinde s s 'e dik rastgele bir z z döner.

  6. 6

    Klasik son işlem

    Yeterince doğrusal bağımsız z z vektörü toplandığında (tipik olarak n 1 n-1 tane), klasik Gauss eliminasyonuyla s z i = 0 s \cdot z_i = 0 denklem sistemi çözülerek s s kesin biçimde bulunur.

Derin sezgi · neden ölçtüğümüz z vektörleri s'e dik?

Simon vaadi Oracle şu yapıyı garanti eder: f(x) = f(y) ancak y = x veya y = x ⊕ s ise. Yani her çıktı değeri tam iki farklı girdiye karşılık gelir ve bu iki girdi arasındaki XOR farkı hep aynı gizli maskedir: s.

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: z s = 0   ( m o d   2 ) z \cdot s = 0 \ (\mathrm{mod}\ 2) . 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.

İki register · neden bir ancilla yetmiyor? Bernstein–Vazirani'de tek bir yardımcı kübit fazı geri tepmek için yeterliydi. Simon algoritmasında ise oracle'ın bire-bir ya da ikiye-bir karakterini koruması gerekir; başka deyişle her giriş için ayırt edilebilir bir f ( x ) f(x) değeri saklamak zorundayız. Bu yüzden giriş register'ı kadar geniş, tam n n kübitlik bir depolama register'ı kullanırız. Bu mimari sayesinde kuantum bilgisayar yalnızca fazları değil, durumların çakışma adreslerini ( x x ve x s x \oplus s ikilileri) de dolanıklık havuzunda bir arada tutar; tek bir ancilla bu ikiz haritalamasını taşımaya yetmez.
Periyot örneklemesi · neden tek shot yetmiyor? Bernstein–Vazirani oracle'ın gizli dizisini tek ölçümde getirirken Simon yalnızca s s 'e dik bir vektör örnekler. Doğru s s 'i çözmek için yeterince çok dik vektör toplamak gerekir; bu yüzden algoritma O ( n ) \mathcal{O}(n) kez koşturulur ve sonunda klasik bir lineer cebir adımı yapılır.
z z vektörleri · geometrik bir kanıt Ölçümde elde ettiğimiz her z z vektörü, salt bir bit dizisi değildir; gizli maske s s 'in dik (ortogonal) düzleminden alınmış bir numunedir. s z = 0 ( m o d 2 ) s \cdot z = 0 \pmod 2 koşulu, kuantum girişiminin bize bir bulmaca olarak uzattığı parçadır: tek bir z z ile s s 'i göremeyiz, ama yeterince numune topladığımızda bu dik düzlemlerin kesişimi tek bir vektöre — yani periyodun ta kendisine — daralır. Algoritmanın güzelliği, bu geometrik sezginin doğrudan kuantum girişimden doğmasıdır.

Algoritmanın Qiskit reçetesi

Qiskit tarafında devre 2 n 2n kübit ve n n klasik bit kullanır. İlk n n kübit hesap register'ı, sonraki n n kübit ise oracle'ın depolama register'ıdır. Klasik register yalnızca ilk register'ı ölçmek içindir; z z vektörlerini buradan toplarız.

  • Başlangıç

    0 n 0 n |0\rangle^{\otimes n} |0\rangle^{\otimes n} 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 1 2 n x x 0 \frac{1}{\sqrt{2^n}} \sum_{x} |x\rangle |0\rangle haline gelir.

  • Oracle

    simon_oracle(s) ile inşa edilen devre ana devreye eklenir. Bu blok, f ( x ) f(x) 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, s s ile dik bir z z vektörü üretir.

    Pr [ z ] 0       s z = 0 ( m o d 2 ) \Pr[z] \neq 0 \iff s \cdot z = 0 \pmod 2

Qiskit kodu

Aşağıdaki örnek s = 11 s = 11 için Simon devresini kurar. Birden fazla shot alarak s s 'e dik farklı z z vektörlerinin istatistiğini toplar; sonuçta yalnızca 00 00 ve 11 11 değerleri görünmelidir, çünkü iki bitlik bir uzayda s = 11 s = 11 'e dik vektörler tam olarak bunlardır.

simon_qiskit.py Python
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}")
qiskit AerSimulator · shots=1024 · s=11 UTF-8 · LF

Kodun derinlemesine analizi

QuantumCircuit(2 * n, n) satırı iki ayrı register'ı tek bir kübit hattı üzerinde temsil eder. İlk n n kübit Simon'un hesap düzlemi, sonraki n n kübit ise oracle'ın depolama register'ıdır. Klasik kayıt yalnızca n n 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 f f 'in bire-bir bir kopyalama tabanı) ve ardından s = 11 s = 11 olduğunu söylediğin için seçilmiş ek CNOT'lar. Bu ek CNOT'lar, x x ve x s x \oplus s ikilisini aynı f f değerine eşleyen periyodik yapıyı kurar.

qc.h(range(n)) ifadesi algoritmada iki kez geçer. İlk Hadamard katmanı tüm x x değerlerini eşit genlikle barındırır; ikincisi ise ikinci register'ın çökmesinden sonra geriye kalan { x 0 , x 0 s } \{x_0, x_0 \oplus s\} üst üste binmesini, s s 'e dik z z 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 s s 'e dik rastgele bir z z döndürür. Yeterince doğrusal bağımsız z z toplandığında klasik bir lineer denklem sistemiyle s s çözülür.

s = 11 s = 11 için ne görmeliyiz? İki bitlik durumda s = 11 s = 11 'e dik vektörler tam olarak { 00 , 11 } \{00, 11\} kümesidir; çünkü 0 0 = 0 0 \oplus 0 = 0 ve 1 1 = 0 1 \oplus 1 = 0 mod 2'de sıfır verir. Bu yüzden 1024 shot'ın istatistiği büyük çoğunlukla bu iki desen üzerinde yoğunlaşır. 00 00 tek başına anlam taşımaz (her zaman dik vektördür); 11 11 ölçümü ise s s 'in 00 00 olmadığını anında söyler.
Klasik son işlem · denklem çözümü Pratik bir kullanımda her ölçülen z z vektörü bir denklem olarak yazılır: s z = 0 ( m o d 2 ) s \cdot z = 0 \pmod 2 . Birden fazla doğrusal bağımsız z z toplandığında klasik Gauss eliminasyonu (veya F 2 \mathbb{F}_2 üzerinde lineer cebir) ile s s kesin biçimde bulunur. Yani Simon, kuantum ile klasik adımların özenle birleştiği hibrit algoritmaların erken bir örneğidir.
Hibrit mimari · Simon, Shor'a giden köprü Simon algoritması, kuantum bilgisayarın her şeyi tek başına yapmadığı, klasik işlemciyle pas vere vere çalıştığı en erken kuantum-klasik hibrit modellerden biridir. Kuantum işlemci asıl zor olan periyot örnekleme adımını yapar — yani s s 'e dik z z vektörlerini üretir. Klasik işlemci ise görece kolay olan Gauss eliminasyonu ile bu denklem sistemini çözüp s s 'i kapatır. Bu iş bölümü, Shor algoritmasında göreceğimiz devrimin temel çalışma prensibidir: kuantum tarafa yalnızca klasik bilgisayarın yapamadığı kısım gönderilir, gerisi alışılmış lineer cebir ya da sayı teorisiyle bitirilir. Günümüzdeki VQE, QAOA gibi NISQ-çağı algoritmaları bu döngünün doğrudan torunudur.

Devre ve doğrulama

Aşağıdaki şema s = 11 s = 11 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.

Simon devresi · Qiskit ( s = 11 s = 11 ) İki register · H → oracle → H → ölçüm
q0 q1 q2 q3 c hesap depo H H Oracle (s = 11) temel kopya s = 11 düzeltmesi H H M M

Şemayı adım adım oku

  1. Üstteki “hesap” register’ına H uygulanır; tüm x değerleri tek süperpozisyonda taşınır.

  2. 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.

  3. 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.

  4. Hesap register’ı ölçülür ve farklı z örnekleri toplanır. Klasik tarafta bu denklemlerden s çözülür.

Doğrulama

Hedef: 1024 shot sonunda yalnızca s = 11 s = 11 'e dik vektörlerin görünmesi.

  • 00 ≈ %50 (her zaman dik)
  • 11 ≈ %50 ( s s 'e dik)
  • 01, 10 → 0 (ideal sim.)
  • Neden 00 00 ve 11 11 ?

    İki bitlik uzayda s = 11 s = 11 'e dik vektörler XOR toplamı sıfır olan desenlerdir. 00 00 ve 11 11 bu şartı sağlarken 01 01 ve 10 10 ideal devrede genlik kazanmaz.

  • s s 'in çözümü

    Pratikte bir veya iki doğrusal bağımsız z z toplanır: z 1 = 11 z_1 = 11 ile s 11 = 0 s \cdot 11 = 0 . Buradan s 0 = s 1 s_0 = s_1 çıkar; sıfırdan farklı tek olasılık s = 11 s = 11 'dir.

  • Daha büyük n n

    n n büyüdükçe daha fazla shot ile yaklaşık n 1 n - 1 doğrusal bağımsız z 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ü, 01 01 ve 10 10 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.