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

Bernstein–Vazirani — gizli bit dizisini tek sorguda oku

Bernstein–Vazirani algoritması, oracle içine gizlenmiş nn bitlik bir diziyi (ss) bulma problemidir. Klasik bilgisayar gizli dizinin her bitini tek tek sorgulamak zorundayken, kuantum devresi phase kickback ve girişim sayesinde bütün diziyi tek oracle çağrısıyla geri çıkarır.

  • Çerçeve: Qiskit
  • nn giriş + 1 ancilla
  • Gizli dizi: ss
  • Tek sorgu · deterministik

Bernstein–Vazirani nedir?

Bernstein–Vazirani, Deutsch–Jozsa ailesinin bir adım daha hedef odaklı versiyonudur: oracle'ın sabit mi dengeli mi olduğunu sormaz; oracle'ın içinde saklanan gizli bit dizisini doğrudan bulmaya çalışır. Gizli dizi ss ise, oracle her giriş xx için şu fonksiyonu uygular:

f(x)=sx(mod2)f(x) = s \cdot x \pmod 2

Buradaki iç çarpım klasik anlamda bit bit çarpma ve mod 2 toplama demektir. Örneğin s=110s=110 ise oracle, girişin ilk iki anlamlı bitini kontrol eder ve bunların parity bilgisini döndürür. Kuantum devresi ise bu fonksiyonun cevabını tek tek okumak yerine, gizli dizinin hangi konumlarında 11 olduğunu faz değişimlerinden geri inşa eder.

İç çarpım · maskeleme olarak okumak sx(mod2)s \cdot x \pmod 2 ifadesi aslında bir maskeleme işlemidir. Oracle, gizli dizide (ss) 11 olan her konum için girişin (xx) ilgili bitine bakar; bu seçilen bitler arasında tek sayıda 11 varsa sonuç 11, çift sayıda varsa 00 döner. Yani parity, "ss'nin işaret ettiği bitler açık mı kapalı mı" sorusunun mod 2 cevabıdır. Klasik bilgisayar bu maskeyi her bit için tek tek denerken, kuantum devresi bütün maskeleri aynı anda üst üste bindirir ve gizli dizinin röntgenini tek hamlede çeker.
Kuantum röntgeni benzetmesi Klasik bilgisayar gizli diziyi, karanlık bir odadaki eşyaları tek tek yoklayarak bulmaya benzer: 100100, 010010, 001001 gibi test girdileriyle her biti ayrı ayrı öğrenir. Bernstein–Vazirani ise ışığı bir anlığına açıp odanın tamamını görmeye benzer; tek oracle çağrısı, gizli dizinin bütün iskeletini aynı anda ortaya çıkarır.

Problem tanımı

Elimizde nn bitlik bir giriş alan ve tek bitlik sonuç döndüren bir fonksiyon vardır: f:{0,1}n{0,1}f : \{0,1\}^n \to \{0,1\}. Fonksiyonun içinde bilinmeyen bir s{0,1}ns \in \{0,1\}^n dizisi saklıdır ve amaç bu diziyi eksiksiz bulmaktır.

  • Fonksiyonun yapısı

    Oracle, f(x)=sx(mod2)f(x)=s \cdot x \pmod 2 kuralını uygular. Sonuç, giriş dizisinin gizli dizideki 11 konumlarıyla yaptığı mod 2 toplamdır.

  • Klasik yaklaşım

    ss dizisi nn bit uzunluğundaysa klasik kesin çözüm nn sorgu ister: 100100, 010010, 001001 gibi taban girdilerle her bit ayrı ayrı test edilir.

  • Kuantum yaklaşımı

    Kuantum devresi oracle'ı yalnızca bir kez çağırır. Son Hadamard katmanı faz işaretlerini tekrar bit değerlerine çevirir ve ölçüm doğrudan ss dizisini verir.

  • Ölçeklenebilirlik

    Klasik sorgu sayısı NN gibi büyürken kuantum sorgu sayısı 11 kalır. Bu yüzden Bernstein–Vazirani, "N vs 1" ayrımını en sade gösteren oracle örneklerinden biridir.

N vs 1 notu n=3n=3 için klasik taraf 3 sorgu yapar; n=1.000.000n=1.000.000 için 1 milyon sorgu gerekir. Bernstein–Vazirani devresi ise her iki durumda da oracle'ı tek kez çağırır. Devre genişler, ama sorgu sayısı değişmez. Algoritmanın teorik gücü tam olarak bu sabit sorgu maliyetidir.

Algoritmanın mantığı: tersine mühendislik

Bernstein–Vazirani'nin güzelliği, fonksiyonu çok kez çalıştırmak yerine fonksiyonun yapısını faz geri tepmesiyle tersine okumasındadır. Oracle, ss dizisindeki her 11 için ilgili giriş kübitine faz işareti bırakır; son Hadamard katmanı da bu işaretleri tekrar 0/10/1 durumlarına çevirir.

  1. 1

    Süperpozisyonun gücü

    Giriş kübitleri Hadamard kapılarıyla tüm olası bit dizilerinin süperpozisyonuna getirilir. Yardımcı kübit 1|1\rangle durumundan |-\rangle durumuna taşınır.

  2. 2

    Oracle etkileşimi

    Gizli dizide 11 olan her pozisyon için ilgili giriş kübitinden ancilla'ya CNOT eklenir. Ancilla |-\rangle durumunda olduğu için bu CNOT'lar bit değerini değil, faz işaretini değiştirir.

  3. 3

    Hadamard ile geri dönüş

    İkinci Hadamard katmanı faz değişimlerini tekrar ölçülebilir bit desenine çevirir. Gizli dizide karşılığı 00 olan kübitler 0|0\rangle, karşılığı 11 olanlar 1|1\rangle olarak döner.

  4. 4

    Tek ölçüm

    Giriş register'ı ölçülür ve sonuç doğrudan ss dizisidir. İdeal simülatörde bu sonuç deterministiktir; olasılık dağılımı değil, kesin cevap üretir.

Phase kickback burada ne yapıyor? Normalde oracle, f(x)f(x) sonucunu yardımcı kübite yazıyor gibi görünür. Fakat yardımcı kübit |-\rangle durumundayken CNOT'un hedefteki etkisi kontrol kübitinin fazına geri teper. Böylece gizli dizideki 11 konumları, giriş register'ında görünmez mürekkep gibi faz işaretleri bırakır; son Hadamard katmanı bu işaretleri okunabilir bite dönüştürür.

Algoritmanın Qiskit reçetesi

Qiskit devresi nn giriş kübiti, bir ancilla ve nn klasik bitten oluşur. Kodun tek parametresi gizli bit dizisidir; oracle bu dizide 11 olan pozisyonları CNOT kapılarıyla devreye işler.

  • Başlangıç

    0n1|0\rangle^{\otimes n}|1\rangle hazırlanır. Qiskit kodunda qc.x(n) satırı ancilla'yı 1|1\rangle durumuna çevirir.

  • Hadamard katmanı

    qc.h(range(n + 1)) hem giriş kübitlerini tüm xx değerlerinin süperpozisyonuna alır hem de ancilla'yı |-\rangle durumuna taşır.

  • Oracle

    secret_bitstring içindeki 11 bitleri için qc.cx(i, n) uygulanır. Bu CNOT'lar gizli diziyi ölçüme değil, faz desenine yazar.

  • Geri dönüş ve ölçüm

    Giriş kübitlerine ikinci kez Hadamard uygulanır. Ölçüm sonucu doğrudan gizli dizi ss olur.

    o¨lc¸u¨m sonucu=s\text{ölçüm sonucu} = s

Qiskit kodu

Aşağıdaki örnekte gizli dizi 110 olarak seçildi. Qiskit'in bit sıralaması nedeniyle oracle içinde dizi ters çevrilerek okunur; böylece ölçüm çıktısı kullanıcıya verdiğimiz gizli diziyle aynı yönde yorumlanır.

bernstein_vazirani_qiskit.py Python
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator


def bv_algorithm(secret_bitstring):
    n = len(secret_bitstring)
    # n giriş kübiti + 1 yardımcı (ancilla) kübit
    qc = QuantumCircuit(n + 1, n)

    # 1. Hazırlık: ancilla'yı |1> yap ve hepsine H uygula.
    qc.x(n)
    qc.h(range(n + 1))
    qc.barrier()

    # 2. Oracle: gizli diziyi devreye işle.
    # secret_bitstring içindeki "1" olan yerlere CNOT ekle.
    for i, bit in enumerate(reversed(secret_bitstring)):
        if bit == "1":
            qc.cx(i, n)

    qc.barrier()

    # 3. Girişim ve ölçüm
    qc.h(range(n))
    qc.measure(range(n), range(n))

    return qc


secret = "110"
qc = bv_algorithm(secret)

# Simülasyon
simulator = AerSimulator()
result = simulator.run(qc, shots=1).result()
counts = result.get_counts()

print(f"Gizli Dizi: {secret}")
print(f"Kuantumun Bulduğu Sonuç: {list(counts.keys())[0]}")
qiskit AerSimulator · shots=1 · secret=110 UTF-8 · LF

Kodun derinlemesine analizi

QuantumCircuit(n + 1, n) satırı, nn giriş kübiti ve bir ancilla oluşturur. Klasik register yalnızca nn bittir, çünkü ancilla ölçülmez; gizli dizi giriş register'ında okunur.

qc.cx(i, n) oracle'ın kalbidir. Gizli dizide 11 olan her konum için ilgili giriş kübitinden ancilla'ya CNOT eklenir. Ancilla |-\rangle durumunda olduğu için bu CNOT, hedef kübiti kalıcı olarak değiştirmekten çok kontrol kübitinin fazına eksi işareti teptirir.

reversed(secret_bitstring) Qiskit'in küçük endian bit sıralamasıyla uyum sağlamak için kullanılır. Böylece secret = "110" seçildiğinde devre ilgili fiziksel kübitlere doğru CNOT kapılarını ekler ve çıktı kullanıcı tarafında yine 110 olarak okunur.

shots=1 algoritmanın deterministik olduğunu gösterir. İdeal Bernstein–Vazirani devresinde sonuç olasılıksal bir dağılım değildir; oracle doğru kurulduysa tek ölçüm gizli diziyi verir.

Phase kickback · neden XX ve HH ile başlıyoruz? Yardımcı kübiti |-\rangle durumuna getirmemizin sebebi, bu durumun ZZ (faz değiştirme) kapısının özvektörü olmasıdır: Z=Z|-\rangle = -|-\rangle. Bu yüzden oracle içindeki CNOT kapıları, ancilla'yı klasik anlamda çevirmek yerine kontrol kübitlerinin üzerine bir eksi işareti — yani faz — kusar. Devre baştaki qc.x(n) ile ancilla'yı 1|1\rangle yapıp ardından qc.h(range(n + 1)) ile Hadamard uyguladığında, ancilla tam olarak bu özvektör konumuna oturur. Sonuçta CNOT'ların bıraktığı eksi işaretleri, gizli dizinin bit bit yansımasıdır; son Hadamard katmanı bu işaretleri tekrar okunabilir bitlere çevirir.
Tersine mühendislik gözüyle Klasik dünyada ss dizisini bulmak için oracle'a taban vektörleri gönderir, her cevaptan tek bit çıkarırsın. Kuantum tarafında ise oracle'ın bütün yapısı faz desenine gömülür; son Hadamard bu faz desenini adeta bir debugger snapshot gibi çözer ve saklanan diziyi register üzerinde görünür hale getirir.
Determinizm · benchmark olarak Bernstein–Vazirani Çoğu kuantum algoritması (örneğin Grover) istatistiksel bir başarı oranına dayanır; doğru cevabı yüksek olasılıkla bulur ama tek shot'ta yanılma payı kalır. Bernstein–Vazirani ise deterministik bir algoritmadır: gürültüsüz bir devrede hata payı %0\%0'dır. Bu özellik onu kuantum donanımlarının bit-bazlı kapı yeteneğini test etmek için kullanılan en güvenilir benchmark'lardan biri yapar; bir cihaz nn bitlik bir gizli diziyi tek shot'ta tutarlı şekilde çıkaramıyorsa, oradaki sapma doğrudan kapı/okuma gürültüsüne işaret eder.

Devre ve doğrulama

Aşağıdaki şema s=110s=110 için devrenin ana akışını gösterir. Oracle bloğu içinde gizli dizide 11 olan konumlar CNOT kapılarıyla ancilla'ya bağlanır. Son Hadamard katmanı bu bağlantıların faz izini ölçülebilir bit dizisine çevirir.

Bernstein–Vazirani devresi · Qiskit Hazırlık → secret oracle → girişim → ölçüm
q0 q1 q2 anc c X H H H H secret = 110 s bit = 1 s bit = 1 H H H M M M
Doğrulama

Hedef: oracle içindeki ss dizisini tek ölçümle okumak.

  • secret = 110
  • ölçüm = 110
  • shots=1 deterministik ideal devre
  • Neden tek sorgu?

    Oracle tüm xx değerlerine aynı anda faz işareti bıraktığı için gizli dizinin bütün bitleri aynı ölçüm desenine taşınır.

  • Klasik fark

    Klasik çözümde ss dizisinin her biti ayrı sorguyla öğrenilir. Kuantum çözümde sorgu sayısı sabit kalır; yalnızca devre genişliği artar.

  • Gerçek donanım notu

    İdeal simülatörde tek sonuç görülür. Gerçek cihazda kapı ve okuma gürültüsü nedeniyle küçük oranlarda hatalı bit dizileri gözlenebilir.