Deutsch–Jozsa algoritması — tek sorguda fonksiyon karakteri
Deutsch–Jozsa algoritması, siyah bir kutu (oracle) içinde saklanan bir fonksiyonun sabit mi yoksa dengeli mi olduğunu tek bir kuantum sorgusuyla belirler. Klasik dünyada en kötü durumda giriş denenirken, kuantum devresi tüm girişleri süperpozisyon içinde aynı anda oracle'a gönderir ve cevabı girişim deseninden okur.
Deutsch–Jozsa algoritması nedir?
Deutsch–Jozsa, kuantum hesaplamanın klasik hesaplamaya göre ilk temiz ayrımlarından birini gösteren oracle algoritmasıdır. Elimizde içeriğini doğrudan görmediğimiz bir fonksiyon vardır; bu fonksiyon yalnızca sabit ya da dengeli olabilir. Algoritmanın görevi, fonksiyonu tek tek örneklemek yerine, onun küresel karakterini tek bir oracle çağrısıyla anlamaktır.
Bu algoritmanın öğretici gücü şuradadır: kuantum bilgisayar sonucu "tüm girdileri deneyerek" değil, tüm girdilerin fazlarını aynı hesaplama içinde çarpıştırarak bulur. Sabit fonksiyonda fazlar başlangıç durumunu geri toplar; dengeli fonksiyonda ise fazlar birbirini söndürür ve ölçümde en az bir görülür.
Problem tanımı
bitlik bir giriş alan ve tek bitlik sonuç üreten bir fonksiyon düşünelim: . Bu fonksiyonun söz verdiğimiz iki sınıftan birine ait olduğunu biliyoruz; bilmediğimiz tek şey hangisi olduğudur.
-
Sabit (constant)
Giriş ne olursa olsun sonuç hep aynıdır. Yani tüm değerleri için ya da tüm değerleri için .
-
Dengeli (balanced)
Olası girişlerin tam yarısı için , diğer yarısı için sonucunu verir. Fonksiyon evreni iki eşit parçaya böler.
-
Klasik maliyet
Kesin karar için en kötü durumda sorgu gerekir. Çünkü ilk cevap aynı gelirse, hâlâ fonksiyonun sabit mi yoksa dengeli mi olduğu kesinleşmemiş olabilir.
-
Kuantum maliyet
Deutsch–Jozsa devresi oracle'ı yalnızca bir kez çağırır. Ölçümde görülürse fonksiyon sabit, aksi halde dengelidir.
Algoritmanın mantığı: girişim ve faz
Algoritmanın kalbinde kuantum girişimi vardır. Klasik bir bilgisayar girdileri tek tek denerken, Deutsch–Jozsa tüm girdileri aynı genlik içinde taşır. Oracle, fonksiyon sonucunu doğrudan ölçüme yazmak yerine faza kodlar; son Hadamard katmanı da bu faz bilgisini ölçülebilir bit desenine dönüştürür.
-
1
Hazırlık
giriş kübiti durumunda başlar. Yardımcı (ancilla) kübit ise yapılır. Bu ancilla, oracle sonucunu faza çevirmek için kullanılır.
-
2
Süperpozisyon
Tüm kübitlere Hadamard uygulanır. Giriş register'ı bütün olası girdiyi aynı anda temsil eder; ancilla ise durumuna geçer.
-
3
Oracle (kara kutu)
Oracle, dönüşümünü uygular. Ancilla durumunda olduğu için fonksiyon sonucu ana register'ın fazına olarak yansır.
-
4
Girişim ve ölçüm
Giriş kübitlerine yeniden Hadamard uygulanır. Sabit fonksiyonda fazlar yapıcı girişimle sonucunu güçlendirir; dengeli fonksiyonda ise bu sonuç yıkıcı girişimle kaybolur.
Derin sezgi · oracle fazı nasıl taşır?
Görsel olarak şöyle düşünebilirsin: klasik bir dilde sonucu bir değişkene yazarsın (). Burada ise yardımcı kübit durumundayken yapılan aynı işlem, yardımcıyı değiştirmek yerine fonksiyonun sonucunu ana kübitlerin vibrasyonuna (fazına) bir eksi işareti olarak yansıtır. Bu, bir duvara top fırlattığında topun yön değiştirmesi — yani geri tepmesi — ama duvarın yerinde kalması gibidir: bilgi yardımcı kübitte birikmez, ana sisteme geri seker.
Algoritmanın Qiskit reçetesi
Qiskit tarafında devre kübit ve klasik bit ile kurulur. Son kübit ancilla'dır; ölçüm yalnızca giriş register'ına yapılır. Çünkü karar, oracle'ın ancilla'da bıraktığı değerden değil, giriş register'ında oluşan girişim deseninden okunur.
-
Başlangıç
hazırlanır. Qiskit kodunda qc.x(n) satırı ancilla'yı durumuna çevirir.
-
Hadamard katmanı
qc.h(range(n + 1)) hem giriş kübitlerini süperpozisyona alır hem de ancilla'yı durumuna taşır.
-
Oracle
Sabit fonksiyon için oracle ya hiçbir şey yapmaz ya ancilla'yı çevirir. Dengeli örnekte her giriş kübitinden ancilla'ya CNOT zinciri kurulur. Böylece bilgisi faza kodlanır.
-
Son Hadamard ve ölçüm
Giriş register'ına yeniden Hadamard uygulanır ve yalnızca ilk kübit ölçülür. Ölçüm sonucu ise sabit; dışında herhangi bir desen ise dengeli kararını verir.
Qiskit kodu
Aşağıdaki örnek giriş kübiti için Deutsch–Jozsa devresini kurar. type="constant" yerine type="balanced" yazıldığında oracle dengeli fonksiyon gibi davranır ve ölçümde dışında bir sonuç beklenir.
import numpy as np
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
def deutsch_jozsa_circuit(n, type="constant"):
# n giriş kübiti + 1 yardımcı kübit
qc = QuantumCircuit(n + 1, n)
# 1. Hazırlık: yardımcı kübiti |1> yap ve hepsine H uygula.
qc.x(n)
qc.h(range(n + 1))
qc.barrier()
# 2. Oracle (kara kutu) kısmı
if type == "constant":
# Sabit fonksiyon: hiçbir şey yapma veya ancilla'yı çevir.
if np.random.randint(2) == 1:
qc.x(n)
else:
# Dengeli fonksiyon örneği: CNOT zinciri.
for i in range(n):
qc.cx(i, n)
qc.barrier()
# 3. Son işlem: giriş kübitlerine H uygula ve ölç.
qc.h(range(n))
qc.measure(range(n), range(n))
return qc
n = 3
qc = deutsch_jozsa_circuit(n, type="constant")
# Simülasyon
simulator = AerSimulator()
result = simulator.run(qc, shots=1).result()
counts = result.get_counts()
print(f"\nÖlçüm Sonucu: {counts}")
if "0" * n in counts:
print("Sonuç: Fonksiyon SABİT (Constant)")
else:
print("Sonuç: Fonksiyon DENGELİ (Balanced)")
Kodun derinlemesine analizi
QuantumCircuit(n + 1, n) satırı, giriş kübiti ve bir ancilla oluşturur; klasik register ise yalnızca bittir. Çünkü ancilla algoritmanın iç mekanizmasıdır, sonuç kararını giriş kübitleri taşır.
qc.x(n) ancilla'yı durumuna getirir. Ardından qc.h(range(n + 1)) bütün kübitlere Hadamard uygular. Bu iki adım birlikte ancilla'yı durumuna taşır; phase kickback için gereken hassas ayar budur.
Sabit oracle kısmında devre ya hiçbir şey yapmaz ya da yalnızca ancilla'ya uygular. Her iki durumda da giriş register'ındaki faz deseni tüm girdiler için aynıdır; son Hadamard katmanı sonucunu geri toplar.
Dengeli oracle örneği ise her giriş kübitinden ancilla'ya CNOT gönderir. Bu seçim gibi davranan dengeli bir fonksiyon üretir. Son Hadamard katmanı, sonucunu yıkıcı girişimle bastırır.
Daha somut bakarsak: koddaki CNOT zinciri klasik anlamda parity (eşlik) fonksiyonudur. Girdilerin yarısı bitlerinin sayısı tek olduğu için , diğer yarısı için döner. Bu simetrik yapı, faz geri tepmesinin ardından genliklerin tam olarak yarı yarıya ters işaret kazanmasını sağlar; son Hadamard katmanı bu eşit ama zıt katkıları topladığında sonucu sıfırlanır. Yani dengeli oracle örneği, kuantum bilgisayarın yıkıcı girişim (destructive interference) yeteneğinin matematiksel bir kutlamasıdır — klasik bilgisayarın asla taklit edemediği iptal mekanizması burada karar vermenin aracı olur.
Devre ve doğrulama
Aşağıdaki şema için sabit oracle akışını gösterir. Dengeli oracle seçildiğinde orta oracle bloğunun içine giriş kübitlerinden ancilla'ya giden CNOT kapıları eklenir; karar kuralı değişmez.
Şemayı adım adım oku
-
En altta ancilla önce X ile |1⟩ yapılır; ardından tüm kübitlere H uygulanarak giriş register’ı süperpozisyona, ancilla ise |−⟩ durumuna alınır.
-
Ortadaki Oracle bloğu, fonksiyonun “sabit mi dengeli mi” karakterini giriş genliklerinin fazlarına işler (phase kickback).
-
Son H katmanı bu faz desenini girişimde birleştirir: sabitte 0…0 geri toplanır, dengelide dağılıp “0…0” dışına kaçar.
-
Giriş kübitleri ölçülür: 0^n ise sabit, aksi halde dengeli kararı verilir.
Karar kuralı: ölçülürse sabit, dışında bir desen ölçülürse dengeli.
- 000 → constant
- 001, 010, ... → balanced
- shots=1 deterministik ideal devre
-
Klasik karşılaştırma
için klasik en kötü durum maliyeti sorgudur. Deutsch–Jozsa aynı sınıflandırmayı tek oracle sorgusuyla yapar.
-
Oracle tasarımı
Kodda verilen balanced oracle yalnızca örnek bir dengeli fonksiyondur. Deutsch–Jozsa'nın vaadi, hangi balanced oracle seçilirse seçilsin sonucunun kaybolmasıdır.
-
Neden ancilla ölçülmüyor?
Ancilla fonksiyon değerini faza taşımak için kullanılır; karar bilgisi son durumda giriş register'ındadır. Bu yüzden klasik register yalnızca bit içerir.