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ı, oracle modelinde gizlenmiş bir bit vektörünü s s ortaya çıkarmak için kullanılan kuantum protokoldür. Fonksiyon f : { 0 , 1 } n { 0 , 1 } n f : \{0,1\}^n \to \{0,1\}^n XOR toplamasına göre şöyle bir periyot taşır: iki giriş ancak ve ancak birbirinden s s kadar ötelenmişlerse aynı çıktıyı verir (bu ilişkinin tam matematiksel yazımı bir sonraki bölümde). Sezgisel olarak, kara kutu her x x için “aynı görüntünün ikinci kaynağı”ni x s x \oplus s olarak saklar—ama bu ikizleme, özel durum s = 0 n s = 0^n iken çökerek kaybolur ( x s = x x \oplus s = x ). Görev, bu periyodu koklayıp s s '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 { 0 , s } \{0,s\} ü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 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ı

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 s s '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 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

s 0 n s \neq 0^n olduğu sürece f f iki-ye-bir bir fonksiyondur; 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

Problem tanımında yazdığımız f f 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 s s '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ü s s 'yi tek seferde söylemez. Her koşuda üretilen rasgele z z , bit düzeyinde iç çarpımla s s ile mod 2 iç çarpımında ortogonal olur (yani aşağıdaki denklemin çözüm uzayından seçilir):

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

Bu kısıtın kolektif olarak ne işe yaradığını mod 2 cebiri ile düşünün: s s 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 s s klasik tarafta yeniden kurulur. Şimdi aynı olayı kapılar sırasıyla izleyelim.

  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 blok “hesap düzlemi”: süperpozisyonda taşınan girişler burada yaşar. İkinci blok ise klasik olarak f ( x ) f(x) 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. 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. Bernstein–Vazirani kurulumunda çıktı tek kübitlik faz kabına sığdığı için bir Hadamard zinciri yeterliydi; burada ise çıktı tam bir n n bitlik dizidir — dolayısıyla ikinci register önce boşta bekler, sonra oracle tam çarpışma adresini oraya kopyalar.

  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 . Ünite oracle olduğu için ilk bloktaki x x 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 x x 'in hangi f ( x ) f(x) ile eşleştiği artık kuantum olarak kodlanmıştır.

  4. 4

    İkinci register'ın çökmesi

    İkinci register ölçüldüğünde rastgele bir f ( x 0 ) f(x_0) değerine çökeriz. Altta yatan Simon yapısında s 0 s \neq 0 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 { 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) . Özel olarak s = 0 s = 0 durumunda çarpışma kaybolur ve ölçüm sonrası birinci blok tek bir x 0 |x_0\rangle ketine sıkışır — problem tanımında belirttiğimiz biçimde bu rejim ayrıca ele alınır.

  5. 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 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; 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.

Yapı · tek cümlelik köprü Vaadin özeti problem tanımı kartlarında; burada yalnızca hatırlatma: f(x) = f(y) ancak y = x ya da y = x ⊕ s ise. s ≠ 0 tipik durumda bir çıktı etiketi iki girdiyi paylaşır; s = 0 ise f birebirdir ve üstteki iki terimli süperpozisyon resmi geçmez.

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 z z için iki yolun katkısı ( 1 ) z x (-1)^{z\cdot x} + ( 1 ) z ( x s ) (-1)^{z\cdot(x\oplus s)} olarak yazılır; üstlerdeki iç çarpımlar mod 2 paritesini kodlar. Bu toplam yalnızca z s 0 ( m o d 2 ) z \cdot s \equiv 0 \pmod 2 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.

İki register · neden bir ancilla yetmiyor? Bernstein–Vazirani örneğinde 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. Aynı bilgi başka bir tasarımda faz oracle ile de kodlanabilir; bu sayfada ise klasik olarak okunabilen f(x) değerini ikinci hatta yazan XOR oracle düzenini izliyoruz.
Periyot örneklemesi · neden tek shot yetmiyor? Faz tabanlı Bernstein–Vazirani kurulumunda tek ölçüm bilgi dizisini düşürürken Simon ölçümde doğrudan s s dizisini vermez; onun yerine ona dik doğrusal kısıtlar üretir — bunların her biri sızdırılmış bir denklemdir. Maskeyi tekilleştirmek için yeterince bağımsız örnek 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 şartının geometrik okuması budur: her örnek, çözüm uzayını kesen bir hiperdüzlem seçer; tek başına z z ile s s görünmez. Yukarıdaki faz dengesi paragrafı tam olarak bu hiperdüzlemlerin niceliğini verir; bağımsız örnekler çoğaldıkça maske adayı uzayı daralır ve klasik Gauss adımı sıfırdan farklı tek maskeyi seçilebilir kılar. Böylece geometrik sezgi doğrudan girişimden gelir, ama tekrarlayan örnekleme ile klasik tarafta kilidi tamamlarsınız.

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

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.

terminal

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

svg

Premium devre çizimi

q0 q1 q2 q3 c hesap depo H H Oracle (s = 11) temel kopya s = 11 düzeltmesi H H M M

turuncu · temel kopya pembe · s=11 düzeltmesi mor · H · mavi · ölçüm alt şerit · s·z ≡ 0 · parity

Canlı devre paneli bu sayfada yok. Aşağıdaki terminal ve SVG (veya özet şema) tam referans görselidir; tarayıcıda simülatör veya örnek histogram çalışmaz. Canlı devre, moment turu ve örnek sayım şu an şu sayfalarda: Bell · Qiskit, GHZ · Qiskit, Bell · Cirq, QRNG · Qiskit, Süper yoğun kodlama, BB84, Teleportasyon, Bernstein–Vazirani ve Grover.
Ne öğreniyoruz? Terminal kutusu oracle’ı tek blok gösterir; SVG aynı s = 11 örneğinde CNOT katmanlarını açık okur. Deutsch–Jozsa · iki temsil, Bernstein–Vazirani · iki temsil.

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

Bu şema 6 · Aynı Devre (İki Temsil) bölümündeki akışı korur; s = 11 s = 11 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.

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.