Kuantum bilgisayarlar, bilgiyi yalnızca 0 veya 1 olarak değil, bu durumların olasılıksal birleşimi olarak işler. Peki bu tuhaf dünyayı evimizdeki klasik bilgisayarda deneyebilir miyiz? Evet: Bir kuantum simülatörü, kuantum donanımının fiziksel hız avantajını vermez; ancak kübitlerin durumlarını matematiksel olarak takip ederek süperpozisyon, girişim ve dolanıklığı görünür hâle getirir. Hedefimiz küçük devreleri simüle etmek ve Shor algoritmasının periyot bulma fikrini anlamaktır. ``
Bir kübitin genel durumu aşağıdaki karmaşık vektördür:
\[\vert \psi\rangle = \alpha \vert 0\rangle + \beta \vert 1\rangle\]Burada $\alpha$ ve $\beta$ karmaşık sayılardır; ölçüm olasılıkları ise Born kuralıyla hesaplanır: $P(0)= \vert \alpha \vert ^2$, $P(1)= \vert \beta \vert ^2$ ve toplamları 1 olmalıdır. Klasik bit kesin bir kutudayken, kübit ölçülene kadar iki kutunun da kapısını aralık bırakır. Bu, “aynı anda her cevabı hesaplıyor” gibi romantik ama eksik bir anlatımdır: Asıl güç, doğru cevapları güçlendiren girişim desenlerindedir.
| Kavram | Klasik karşılığı | Kuantum davranışı |
|---|---|---|
| Bit / kübit | 0 veya 1 | $\alpha\lvert 0\rangle+\beta\lvert 1\rangle$ |
| Rastgelelik | İşlemden önce veya sonra seçilir | Ölçüm anında olasılıksal sonuç oluşur |
| Bağıntı | Ayrı değişkenlerle saklanır | Dolanıklıkta tek bir ortak durum vardır |
| Maliyet | $n$ bit için $n$ değer | $n$ kübit için $2^n$ genlik |
Simülatörün kalbi, $n$ kübitlik sistemi uzunluğu $2^n$ olan bir NumPy vektörüyle temsil etmektir. Başlangıç durumu $ \vert 00\ldots0\rangle$ olduğundan ilk genlik 1, diğerleri 0’dır. Hadamard kapısı süperpozisyon üretir; CNOT ise kontrol kübiti 1 olduğunda hedefi çevirir. Aşağıdaki örnek, iki kübitte Bell durumu $\frac{ \vert 00\rangle+ \vert 11\rangle}{\sqrt{2}}$ oluşturur:
import numpy as np
H = np.array([[1, 1], [1, -1]], dtype=complex) / np.sqrt(2)
I = np.eye(2, dtype=complex)
CNOT = np.array([
[1, 0, 0, 0], [0, 1, 0, 0],
[0, 0, 0, 1], [0, 0, 1, 0]
], dtype=complex)
state = np.array([1, 0, 0, 0], dtype=complex) # |00>
state = np.kron(H, I) @ state # H, ilk kübite
state = CNOT @ state # ilk kübit kontrol
print(np.round(state, 3))
Çıktıda yalnızca $ \vert 00\rangle$ ve $ \vert 11\rangle$ genliklerinin dolu olması dolanıklığı gösterir. Bu, “ilk kübit 0, ikinci 0; ilk 1, ikinci 1” diye iki ayrı klasik kayıt tutmak değildir. Tek tek kübitler ölçülmeden belirli değere sahip değildir; ama birlikte ölçüldüklerinde sonuçları mükemmel biçimde ilişkilidir.
Shor algoritması, $N$ sayısını çarpanlara ayırmayı periyot bulma problemine dönüştürür. Rastgele bir $a$ seçilir ve
\[f(x)=a^x \bmod N\]fonksiyonunun periyodu $r$ aranır. Eğer $r$ çiftse ve $a^{r/2}\not\equiv-1\pmod N$ ise, çarpan adayları $\gcd(a^{r/2}-1,N)$ ve $\gcd(a^{r/2}+1,N)$ olur. Örneğin $N=15$, $a=2$ için dizi $1,2,4,8,1,\ldots$ şeklindedir; yani $r=4$. Böylece $\gcd(2^2-1,15)=3$ ve $\gcd(2^2+1,15)=5$ bulunur.
| Shor adımı | Klasik görev | Kuantum devresindeki rol |
|---|---|---|
| Üs alma | $a^x \bmod N$ hesaplama | Tersinir modüler üs alma |
| Periyot çıkarma | Örnekleri analiz etme | QFT ile frekansı belirginleştirme |
| Çarpan üretme | EBOB hesaplama | Ölçüm sonrası klasik işlem |
Küçük bir projede modüler fonksiyonu durum vektörüne uygulayıp ardından Kuantum Fourier Dönüşümü (QFT) ekleyebilirsiniz. QFT, periyodik genlikleri frekans tepelerine dönüştürür; ölçümden gelen yaklaşık kesir de sürekli kesirler yöntemiyle $r$ adayına çevrilir. Ancak kritik gerçek şudur: klasik simülatör bellek açısından $O(2^n)$ büyür. Bu yüzden Shor’un büyük sayılardaki vaadini simülatörde değil, hata düzeltmeli gerçek kuantum donanımında bekleriz. Yine de Bell durumu, QFT ve 15’in çarpanlara ayrılması; kuantum programlamanın en eğlenceli laboratuvarıdır.
Yorumlar