Langkau ke kandungan utama

Algoritma Deutsch-Jozsa

Algoritma Deutsch mengatasi semua algoritma klasik untuk masalah pertanyaan, tetapi kelebihan itu agak sederhana: satu pertanyaan berbanding dua. Algoritma Deutsch-Jozsa memperluaskan kelebihan ini β€” malah, ia boleh digunakan untuk menyelesaikan beberapa masalah pertanyaan yang berbeza.

Berikut ialah penerangan Circuit kuantum bagi algoritma Deutsch-Jozsa. Langkah pemprosesan pasca klasik tambahan, yang tidak ditunjukkan dalam rajah, mungkin juga diperlukan bergantung pada masalah tertentu yang diselesaikan.

Deutsch-Jozsa algorithm

Sudah tentu, kita belum membincangkan masalah apa yang diselesaikan oleh algoritma ini; perkara ini dibincangkan dalam dua bahagian berikutnya.

Masalah Deutsch-Jozsa​

Kita akan mulakan dengan masalah pertanyaan yang algoritma Deutsch-Jozsa pada asalnya direka untuk diselesaikan, yang dikenali sebagai masalah Deutsch-Jozsa.

Fungsi input untuk masalah ini mengambil bentuk f:Σn→Σf:\Sigma^n \rightarrow \Sigma untuk integer positif nn yang sewenang-wenangnya. Seperti masalah Deutsch, tugasnya ialah mengeluarkan 00 jika ff adalah malar dan 11 jika ff adalah seimbang, yang sekali lagi bermakna bilangan rentetan input di mana fungsi mengambil nilai 00 adalah sama dengan bilangan rentetan input di mana fungsi mengambil nilai 11.

Perhatikan bahawa, apabila nn lebih besar daripada 1,1, terdapat fungsi berbentuk f:Σn→Σf:\Sigma^n \rightarrow \Sigma yang bukan malar mahupun seimbang. Sebagai contoh, fungsi f:Σ2→Σf:\Sigma^2\rightarrow\Sigma yang ditakrifkan sebagai

f(00)=0f(01)=0f(10)=0f(11)=1\begin{aligned} f(00) & = 0 \\ f(01) & = 0 \\ f(10) & = 0 \\ f(11) & = 1 \end{aligned}

tidak termasuk dalam mana-mana dua kategori ini. Untuk masalah Deutsch-Jozsa, kita tidak perlu risau tentang fungsi seperti ini β€” ia dianggap sebagai input "jangan ambil pusing". Iaitu, untuk masalah ini kita ada janji bahawa ff sama ada malar atau seimbang.

Masalah Deutsch-Jozsa

Input: fungsi f:{0,1}n→{0,1}f:\{0,1\}^n\rightarrow\{0,1\}
Janji: ff sama ada malar atau seimbang
Output: 00 jika ff malar, 11 jika ff seimbang

Algoritma Deutsch-Jozsa, dengan satu pertanyaannya, menyelesaikan masalah ini dalam erti kata berikut: jika setiap satu daripada nn hasil ukuran adalah 0,0, maka fungsi ff adalah malar; dan sebaliknya, jika sekurang-kurangnya satu hasil ukuran adalah 1,1, maka fungsi ff adalah seimbang. Cara lain untuk menyatakannya ialah Circuit yang dihuraikan di atas diikuti dengan langkah pemprosesan pasca klasik di mana OR bagi hasil ukuran dikira untuk menghasilkan output.

Analisis algoritma​

Untuk menganalisis prestasi algoritma Deutsch-Jozsa bagi masalah Deutsch-Jozsa, adalah berguna untuk memulakan dengan memikirkan tindakan satu lapisan Gate Hadamard. Operasi Hadamard boleh dinyatakan sebagai matriks dengan cara biasa,

H=(121212βˆ’12),H = \begin{pmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\[2mm] \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{pmatrix},

tetapi kita juga boleh menyatakan operasi ini dari segi tindakannya pada keadaan asas piawai:

H∣0⟩=12∣0⟩+12∣1⟩H∣1⟩=12∣0βŸ©βˆ’12∣1⟩.\begin{aligned} H \vert 0\rangle & = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{1}{\sqrt{2}} \vert 1 \rangle\\[3mm] H \vert 1\rangle & = \frac{1}{\sqrt{2}} \vert 0 \rangle - \frac{1}{\sqrt{2}} \vert 1 \rangle. \end{aligned}

Kedua-dua persamaan ini boleh digabungkan menjadi satu formula tunggal,

H∣a⟩=12∣0⟩+12(βˆ’1)a∣1⟩=12βˆ‘b∈{0,1}(βˆ’1)ab∣b⟩,H \vert a \rangle = \frac{1}{\sqrt{2}} \vert 0 \rangle + \frac{1}{\sqrt{2}} (-1)^a \vert 1 \rangle = \frac{1}{\sqrt{2}} \sum_{b\in\{0,1\}} (-1)^{ab} \vert b\rangle,

yang berlaku untuk kedua-dua pilihan a∈Σ.a\in\Sigma.

Sekarang andaikan bahawa bukannya hanya satu Qubit kita mempunyai nn Qubit, dan operasi Hadamard dilakukan pada setiap satu. Operasi gabungan pada nn Qubit dihuraikan oleh hasil darab tensor HβŠ—β‹―βŠ—HH\otimes \cdots \otimes H (nn kali), yang kita tulis sebagai HβŠ—nH^{\otimes n} untuk keringkasan dan kejelasan. Menggunakan formula di atas, diikuti dengan mengembangkan dan kemudian memudahkan, kita boleh menyatakan tindakan operasi gabungan ini pada keadaan asas piawai bagi nn Qubit seperti ini:

HβŠ—n∣xnβˆ’1β‹―x1x0⟩=(H∣xnβˆ’1⟩)βŠ—β‹―βŠ—(H∣x0⟩)=(12βˆ‘ynβˆ’1∈Σ(βˆ’1)xnβˆ’1ynβˆ’1∣ynβˆ’1⟩)βŠ—β‹―βŠ—(12βˆ‘y0∈Σ(βˆ’1)x0y0∣y0⟩)=12nβˆ‘ynβˆ’1β‹―y0∈Σn(βˆ’1)xnβˆ’1ynβˆ’1+β‹―+x0y0∣ynβˆ’1β‹―y0⟩.\begin{aligned} & H^{\otimes n} \vert x_{n-1} \cdots x_1 x_0 \rangle \\ & \qquad = \bigl(H \vert x_{n-1} \rangle \bigr) \otimes \cdots \otimes \bigl(H \vert x_{0} \rangle \bigr) \\ & \qquad = \Biggl( \frac{1}{\sqrt{2}} \sum_{y_{n-1}\in\Sigma} (-1)^{x_{n-1} y_{n-1}} \vert y_{n-1} \rangle \Biggr) \otimes \cdots \otimes \Biggl( \frac{1}{\sqrt{2}} \sum_{y_{0}\in\Sigma} (-1)^{x_{0} y_{0}} \vert y_{0} \rangle \Biggr) \\ & \qquad = \frac{1}{\sqrt{2^n}} \sum_{y_{n-1}\cdots y_0 \in \Sigma^n} (-1)^{x_{n-1}y_{n-1} + \cdots + x_0 y_0} \vert y_{n-1} \cdots y_0 \rangle. \end{aligned}

Di sini, kita menulis rentetan binari panjang nn sebagai xnβˆ’1β‹―x0x_{n-1}\cdots x_0 dan ynβˆ’1β‹―y0,y_{n-1}\cdots y_0, mengikut konvensyen pengindeksan Qiskit.

Formula ini memberi kita alat yang berguna untuk menganalisis Circuit kuantum di atas. Selepas lapisan Gate Hadamard pertama dilakukan, keadaan n+1n+1 Qubit (termasuk Qubit paling kiri/bawah, yang dirawat secara berasingan daripada yang lain) ialah

(H∣1⟩)(HβŠ—n∣0β‹―0⟩)=βˆ£βˆ’βŸ©βŠ—12nβˆ‘xnβˆ’1β‹―x0∈Σn∣xnβˆ’1β‹―x0⟩.\bigl( H \vert 1 \rangle \bigr) \bigl( H^{\otimes n} \vert 0 \cdots 0 \rangle \bigr) = \vert - \rangle \otimes \frac{1}{\sqrt{2^n}} \sum_{x_{n-1}\cdots x_0 \in \Sigma^n} \vert x_{n-1} \cdots x_0 \rangle.

Apabila operasi UfU_f dilakukan, keadaan ini berubah menjadi

βˆ£βˆ’βŸ©βŠ—12nβˆ‘xnβˆ’1β‹―x0∈Σn(βˆ’1)f(xnβˆ’1β‹―x0)∣xnβˆ’1β‹―x0⟩\vert - \rangle \otimes \frac{1}{\sqrt{2^n}} \sum_{x_{n-1}\cdots x_0 \in \Sigma^n} (-1)^{f(x_{n-1}\cdots x_0)} \vert x_{n-1} \cdots x_0 \rangle

melalui fenomena tendangan fasa yang sama seperti yang kita lihat dalam analisis algoritma Deutsch.

Kemudian lapisan Gate Hadamard kedua dilakukan, yang (melalui formula di atas) mengubah keadaan ini menjadi

βˆ£βˆ’βŸ©βŠ—12nβˆ‘xnβˆ’1β‹―x0∈Σnβˆ‘ynβˆ’1β‹―y0∈Σn(βˆ’1)f(xnβˆ’1β‹―x0)+xnβˆ’1ynβˆ’1+β‹―+x0y0∣ynβˆ’1β‹―y0⟩.\vert - \rangle \otimes \frac{1}{2^n} \sum_{x_{n-1}\cdots x_0 \in \Sigma^n} \sum_{y_{n-1}\cdots y_0 \in \Sigma^n} (-1)^{f(x_{n-1}\cdots x_0) + x_{n-1}y_{n-1} + \cdots + x_0 y_0} \vert y_{n-1} \cdots y_0 \rangle.

Ungkapan ini kelihatan agak rumit, dan tidak banyak yang boleh disimpulkan tentang kebarangkalian mendapat hasil ukuran yang berbeza tanpa mengetahui lebih lanjut tentang fungsi f.f.

Nasib baik, yang perlu kita ketahui hanyalah kebarangkalian bahawa setiap satu hasil ukuran adalah 00 β€” kerana itulah kebarangkalian algoritma menentukan bahawa ff adalah malar. Kebarangkalian ini mempunyai formula yang mudah.

∣12nβˆ‘xnβˆ’1β‹―x0∈Σn(βˆ’1)f(xnβˆ’1β‹―x0)∣2={1ifΒ fΒ isΒ constant0ifΒ fΒ isΒ balanced\Biggl\vert \frac{1}{2^n} \sum_{x_{n-1}\cdots x_0 \in \Sigma^n} (-1)^{f(x_{n-1}\cdots x_0)} \Biggr\vert^2 = \begin{cases} 1 & \text{if $f$ is constant}\\[1mm] 0 & \text{if $f$ is balanced} \end{cases}

Secara lebih terperinci, jika ff adalah malar, maka sama ada f(xnβˆ’1β‹―x0)=0f(x_{n-1}\cdots x_0) = 0 untuk setiap rentetan xnβˆ’1β‹―x0,x_{n-1}\cdots x_0, dalam kes ini nilai jumlah ialah 2n,2^n, atau f(xnβˆ’1β‹―x0)=1f(x_{n-1}\cdots x_0) = 1 untuk setiap rentetan xnβˆ’1β‹―x0,x_{n-1}\cdots x_0, dalam kes ini nilai jumlah ialah βˆ’2n.-2^n. Membahagi dengan 2n2^n dan mengambil kuasa dua nilai mutlak menghasilkan 1.1.

Sebaliknya, jika ff adalah seimbang, maka ff mengambil nilai 00 pada separuh rentetan xnβˆ’1β‹―x0x_{n-1}\cdots x_0 dan nilai 11 pada separuh yang lain, jadi sebutan +1+1 dan sebutan βˆ’1-1 dalam jumlah saling menghapuskan dan kita mendapat nilai 0.0.

Kita menyimpulkan bahawa algoritma beroperasi dengan betul selagi janji dipenuhi.

Kesukaran klasik​

Algoritma Deutsch-Jozsa berfungsi setiap masa, sentiasa memberi jawapan yang betul apabila janji dipenuhi, dan memerlukan satu pertanyaan sahaja. Bagaimana ini berbanding dengan algoritma pertanyaan klasik untuk masalah Deutsch-Jozsa?

Pertama, mana-mana algoritma klasik deterministik yang menyelesaikan masalah Deutsch-Jozsa dengan betul mesti membuat pertanyaan yang amat banyak: 2nβˆ’1+12^{n-1} + 1 pertanyaan diperlukan dalam kes terburuk. Alasannya ialah, jika algoritma deterministik membuat pertanyaan ff pada 2nβˆ’12^{n-1} atau lebih sedikit rentetan berbeza, dan mendapat nilai fungsi yang sama setiap kali, maka kedua-dua jawapan masih mungkin. Fungsi itu mungkin malar, atau ia mungkin seimbang tetapi malangnya semua pertanyaan kebetulan mengembalikan nilai fungsi yang sama.

Kemungkinan kedua mungkin kelihatan tidak mungkin β€” tetapi untuk algoritma deterministik tiada kerawakan atau ketidaktentuan, jadi mereka akan gagal secara sistematik pada fungsi tertentu. Oleh itu kita mempunyai kelebihan yang ketara bagi kuantum berbanding algoritma klasik dalam hal ini.

Walau bagaimanapun, terdapat satu tangkapan, iaitu algoritma klasik kebarangkalian boleh menyelesaikan masalah Deutsch-Jozsa dengan kebarangkalian yang sangat tinggi menggunakan hanya beberapa pertanyaan sahaja. Khususnya, jika kita hanya memilih beberapa rentetan berbeza panjang nn secara rawak, dan membuat pertanyaan ff pada rentetan tersebut, tidak mungkin kita mendapat nilai fungsi yang sama untuk semua daripadanya apabila ff adalah seimbang.

Lebih spesifik, jika kita memilih kk rentetan input x1,…,xk∈Σnx^1,\ldots,x^k \in \Sigma^n secara seragam rawak, menilai f(x1),…,f(xk),f(x^1),\ldots,f(x^k), dan menjawab 00 jika nilai fungsi semuanya sama, dan 11 jika tidak, maka kita akan sentiasa betul apabila ff adalah malar, dan salah dalam kes ff seimbang dengan kebarangkalian hanya 2βˆ’k+1.2^{-k + 1}. Jika kita ambil k=11,k = 11, sebagai contoh, algoritma ini akan menjawab dengan betul dengan kebarangkalian lebih daripada 99.999.9%.

Atas sebab ini, kita masih mempunyai kelebihan yang agak sederhana bagi kuantum berbanding algoritma klasik β€” tetapi ia tetap merupakan kelebihan yang boleh diukur yang menunjukkan peningkatan berbanding algoritma Deutsch.

Deutsch-Jozsa dengan Qiskit​

# Added by doQumentation β€” required packages for this notebook
!pip install -q numpy qiskit qiskit-aer
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
import numpy as np

Untuk melaksanakan algoritma Deutsch-Jozsa dalam Qiskit, kita akan mulakan dengan mentakrifkan fungsi dj_query yang menjana Circuit kuantum yang melaksanakan Gate pertanyaan, untuk fungsi yang dipilih secara rawak yang memenuhi janji untuk masalah Deutsch-Jozsa. Dengan kebarangkalian 50%, fungsi adalah malar, dan dengan kebarangkalian 50% fungsi adalah seimbang. Untuk setiap dua kemungkinan tersebut, fungsi dipilih secara seragam daripada fungsi-fungsi jenis itu. Argumen ialah bilangan bit input bagi fungsi.

def dj_query(num_qubits):
# Create a circuit implementing for a query gate for a random function
# satisfying the promise for the Deutsch-Jozsa problem.

qc = QuantumCircuit(num_qubits + 1)

if np.random.randint(0, 2):
# Flip output qubit with 50% chance
qc.x(num_qubits)
if np.random.randint(0, 2):
# return constant circuit with 50% chance
return qc

# Choose half the possible input strings
on_states = np.random.choice(
range(2**num_qubits), # numbers to sample from
2**num_qubits // 2, # number of samples
replace=False, # makes sure states are only sampled once
)

def add_cx(qc, bit_string):
for qubit, bit in enumerate(reversed(bit_string)):
if bit == "1":
qc.x(qubit)
return qc

for state in on_states:
qc.barrier() # Barriers are added to help visualize how the functions are created.
qc = add_cx(qc, f"{state:0b}")
qc.mcx(list(range(num_qubits)), num_qubits)
qc = add_cx(qc, f"{state:0b}")

qc.barrier()

return qc

Kita boleh menunjukkan pelaksanaan Circuit kuantum bagi Gate pertanyaan menggunakan kaedah draw seperti biasa.

display(dj_query(3).draw(output="mpl"))

Output of the previous code cell

Seterusnya kita takrifkan fungsi yang mencipta Circuit Deutsch-Jozsa, mengambil pelaksanaan Circuit kuantum bagi Gate pertanyaan sebagai argumen.

def compile_circuit(function: QuantumCircuit):
# Compiles a circuit for use in the Deutsch-Jozsa algorithm.

n = function.num_qubits - 1
qc = QuantumCircuit(n + 1, n)
qc.x(n)
qc.h(range(n + 1))
qc.compose(function, inplace=True)
qc.h(range(n))
qc.measure(range(n), range(n))
return qc

Akhirnya, fungsi yang menjalankan Circuit Deutsch-Jozsa sekali ditakrifkan.

def dj_algorithm(function: QuantumCircuit):
# Determine if a function is constant or balanced.

qc = compile_circuit(function)

result = AerSimulator().run(qc, shots=1, memory=True).result()
measurements = result.get_memory()
if "1" in measurements[0]:
return "balanced"
return "constant"

Kita boleh menguji pelaksanaan kita dengan memilih fungsi secara rawak, memaparkan pelaksanaan Circuit kuantum bagi Gate pertanyaan untuk fungsi ini, dan kemudian menjalankan algoritma Deutsch-Jozsa pada fungsi tersebut.

f = dj_query(3)
display(f.draw("mpl"))
display(dj_algorithm(f))

Output of the previous code cell

'balanced'

Masalah Bernstein-Vazirani​

Seterusnya, kita akan bincangkan satu masalah yang dikenali sebagai masalah Bernstein-Vazirani. Ia juga dipanggil masalah pensampelan Fourier, walaupun terdapat rumusan yang lebih umum bagi masalah ini yang turut menggunakan nama tersebut.

Pertama, mari kita perkenalkan sedikit notasi. Untuk mana-mana dua rentetan binari x=xnβˆ’1β‹―x0x = x_{n-1} \cdots x_0 dan y=ynβˆ’1β‹―y0y = y_{n-1}\cdots y_0 dengan panjang n,n, kita takrifkan

xβ‹…y=xnβˆ’1ynβˆ’1βŠ•β‹―βŠ•x0y0.x \cdot y = x_{n-1} y_{n-1} \oplus \cdots \oplus x_0 y_0.

Kita akan merujuk operasi ini sebagai hasil darab titik binari. Cara alternatif untuk mentakrifkannya adalah seperti berikut.

xβ‹…y={1xnβˆ’1ynβˆ’1+β‹―+x0y0Β adalahΒ ganjil0xnβˆ’1ynβˆ’1+β‹―+x0y0Β adalahΒ genapx \cdot y = \begin{cases} 1 & x_{{n-1}} y_{n-1} + \cdots + x_0 y_0 \text{ adalah ganjil}\\[0.5mm] 0 & x_{{n-1}} y_{n-1} + \cdots + x_0 y_0 \text{ adalah genap} \end{cases}

Perhatikan bahawa ini adalah operasi simetri, bermakna hasilnya tidak berubah jika kita tukarkan xx dan y,y, jadi kita bebas berbuat demikian bila-bila masa perlu. Kadang-kadang berguna untuk memikirkan hasil darab titik binari xβ‹…yx \cdot y sebagai pariti bit-bit dalam xx pada kedudukan di mana rentetan yy mempunyai 1,1, atau secara setara, pariti bit-bit dalam yy pada kedudukan di mana rentetan xx mempunyai 1.1.

Dengan notasi ini, kita kini boleh mentakrifkan masalah Bernstein-Vazirani.

Masalah Bernstein-Vazirani

Input: suatu fungsi f:{0,1}n→{0,1}f:\{0,1\}^n\rightarrow\{0,1\}
Janji: wujud rentetan binari s=snβˆ’1β‹―s0s = s_{n-1} \cdots s_0 di mana f(x)=sβ‹…xf(x) = s\cdot x untuk semua x∈Σnx\in\Sigma^n
Output: rentetan ss

Kita sebenarnya tidak memerlukan algoritma kuantum baharu untuk masalah ini; algoritma Deutsch-Jozsa menyelesaikannya. Demi kejelasan, mari kita rujuk Circuit kuantum di atas, yang tidak merangkumi langkah pasca-pemprosesan klasik untuk mengira OR, sebagai Circuit Deutsch-Jozsa.

Analisis algoritma​

Untuk menganalisis cara Circuit Deutsch-Jozsa berfungsi bagi fungsi yang memenuhi janji masalah Bernstein-Vazirani, kita akan mulakan dengan satu pemerhatian ringkas. Menggunakan hasil darab titik binari, kita boleh menerangkan secara alternatif tindakan nn Gate Hadamard ke atas keadaan asas piawai bagi nn Qubit seperti berikut.

HβŠ—n∣x⟩=12nβˆ‘y∈Σn(βˆ’1)xβ‹…y∣y⟩H^{\otimes n} \vert x \rangle = \frac{1}{\sqrt{2^n}} \sum_{y\in\Sigma^n} (-1)^{x\cdot y} \vert y\rangle

Serupa dengan apa yang kita lihat semasa menganalisis algoritma Deutsch, ini kerana nilai (βˆ’1)k(-1)^k untuk mana-mana integer kk hanya bergantung pada sama ada kk genap atau ganjil.

Beralih kepada Circuit Deutsch–Jozsa, selepas lapisan pertama Gate Hadamard dilakukan, keadaan n+1n+1 Qubit adalah

βˆ£βˆ’βŸ©βŠ—12nβˆ‘x∈Σn∣x⟩.\vert - \rangle \otimes \frac{1}{\sqrt{2^n}} \sum_{x \in \Sigma^n} \vert x \rangle.

Gate kueri kemudian dilakukan, yang (melalui fenomena tendangan fasa) mengubah keadaan kepada

βˆ£βˆ’βŸ©βŠ—12nβˆ‘x∈Σn(βˆ’1)f(x)∣x⟩.\vert - \rangle \otimes \frac{1}{\sqrt{2^n}} \sum_{x \in \Sigma^n} (-1)^{f(x)} \vert x \rangle.

Menggunakan rumus kita untuk tindakan lapisan Gate Hadamard, kita dapati bahawa lapisan kedua Gate Hadamard kemudian mengubah keadaan ini kepada

βˆ£βˆ’βŸ©βŠ—12nβˆ‘x∈Σnβˆ‘y∈Σn(βˆ’1)f(x)+xβ‹…y∣y⟩.\vert - \rangle \otimes \frac{1}{2^n} \sum_{x \in \Sigma^n} \sum_{y \in \Sigma^n} (-1)^{f(x) + x \cdot y} \vert y \rangle.

Kini kita boleh membuat beberapa penyederhanaan pada eksponen βˆ’1-1 di dalam jumlah. Kita dijanjikan bahawa f(x)=sβ‹…xf(x) = s\cdot x untuk rentetan tertentu s=snβˆ’1β‹―s0,s = s_{n-1} \cdots s_0, jadi kita boleh ungkapkan keadaan sebagai

βˆ£βˆ’βŸ©βŠ—12nβˆ‘x∈Σnβˆ‘y∈Σn(βˆ’1)sβ‹…x+xβ‹…y∣y⟩.\vert - \rangle \otimes \frac{1}{2^n} \sum_{x \in \Sigma^n} \sum_{y \in \Sigma^n} (-1)^{s\cdot x + x \cdot y} \vert y \rangle.

Kerana sβ‹…xs\cdot x dan xβ‹…yx\cdot y adalah nilai binari, kita boleh menggantikan penambahan dengan eksklusif-OR β€” sekali lagi kerana satu-satunya perkara yang penting bagi integer dalam eksponen βˆ’1-1 adalah sama ada ia genap atau ganjil. Menggunakan simetri hasil darab titik binari, kita memperoleh ungkapan ini untuk keadaan tersebut:

βˆ£βˆ’βŸ©βŠ—12nβˆ‘x∈Σnβˆ‘y∈Σn(βˆ’1)(sβ‹…x)βŠ•(yβ‹…x)∣y⟩.\vert - \rangle \otimes \frac{1}{2^n} \sum_{x \in \Sigma^n} \sum_{y \in \Sigma^n} (-1)^{(s\cdot x) \oplus (y \cdot x)} \vert y \rangle.

(Kurungan telah ditambah untuk kejelasan, walaupun ia tidak benar-benar diperlukan kerana adalah konvensional untuk memperlakukan hasil darab titik binari sebagai mempunyai keutamaan lebih tinggi daripada eksklusif-OR.)

Pada ketika ini kita akan menggunakan rumus berikut.

(sβ‹…x)βŠ•(yβ‹…x)=(sβŠ•y)β‹…x(s\cdot x) \oplus (y \cdot x) = (s \oplus y) \cdot x

Kita boleh memperoleh rumus ini melalui rumus serupa untuk bit,

(ac)βŠ•(bc)=(aβŠ•b)c,(a c) \oplus (b c) = (a \oplus b) c,

bersama-sama dengan pengembangan hasil darab titik binari dan eksklusif-OR bitwise:

(sβ‹…x)βŠ•(yβ‹…x)=(snβˆ’1xnβˆ’1)βŠ•β‹―βŠ•(s0x0)βŠ•(ynβˆ’1xnβˆ’1)βŠ•β‹―βŠ•(y0x0)=(snβˆ’1βŠ•ynβˆ’1)xnβˆ’1βŠ•β‹―βŠ•(s0βŠ•y0)x0=(sβŠ•y)β‹…x\begin{aligned} (s\cdot x) \oplus (y \cdot x) & = (s_{n-1} x_{n-1}) \oplus \cdots \oplus (s_{0} x_{0}) \oplus (y_{n-1} x_{n-1}) \oplus \cdots \oplus (y_{0} x_{0}) \\ & = (s_{n-1} \oplus y_{n-1}) x_{n-1} \oplus \cdots \oplus (s_{0} \oplus y_{0}) x_{0} \\ & = (s \oplus y) \cdot x \end{aligned}

Ini membolehkan kita mengungkapkan keadaan Circuit sejurus sebelum pengukuran seperti ini:

βˆ£βˆ’βŸ©βŠ—12nβˆ‘x∈Σnβˆ‘y∈Σn(βˆ’1)(sβŠ•y)β‹…x∣y⟩.\vert - \rangle \otimes \frac{1}{2^n} \sum_{x \in \Sigma^n} \sum_{y \in \Sigma^n} (-1)^{(s\oplus y)\cdot x} \vert y \rangle.

Langkah terakhir adalah menggunakan satu lagi rumus, yang berlaku untuk setiap rentetan binari z=znβˆ’1β‹―z0.z = z_{n-1}\cdots z_0.

12nβˆ‘x∈Σn(βˆ’1)zβ‹…x={1jikaΒ z=0n0jikaΒ zβ‰ 0n\frac{1}{2^n} \sum_{x \in \Sigma^n} (-1)^{z \cdot x} = \begin{cases} 1 & \text{jika $z = 0^n$}\\ 0 & \text{jika $z\neq 0^n$} \end{cases}

Di sini kita menggunakan notasi ringkas untuk rentetan yang akan kita gunakan beberapa kali lagi dalam pelajaran ini: 0n0^n adalah rentetan semua-sifar dengan panjang n.n.

Cara mudah untuk membuktikan bahawa rumus ini betul adalah dengan mempertimbangkan dua kes secara berasingan. Jika z=0n,z = 0^n, maka zβ‹…x=0z\cdot x = 0 untuk setiap rentetan x∈Σn,x\in\Sigma^n, jadi nilai setiap sebutan dalam jumlah adalah 1,1, dan kita mendapat 11 selepas menjumlah dan membahagi dengan 2n.2^n. Sebaliknya, jika mana-mana satu bit dalam zz adalah sama dengan 1,1, maka hasil darab titik binari zβ‹…xz\cdot x adalah sama dengan 00 untuk tepat separuh daripada pilihan yang mungkin bagi x∈Σnx\in\Sigma^n dan 11 untuk separuh yang lain β€” kerana nilai hasil darab titik binari zβ‹…xz\cdot x bertukar (dari 00 ke 11 atau dari 11 ke 00) jika kita tukarkan mana-mana bit dalam xx pada kedudukan di mana zz mempunyai 1.1.

Jika kita kini menerapkan rumus ini untuk menyederhanakan keadaan Circuit sebelum pengukuran, kita peroleh

βˆ£βˆ’βŸ©βŠ—12nβˆ‘x∈Σnβˆ‘y∈Σn(βˆ’1)(sβŠ•y)β‹…x∣y⟩=βˆ£βˆ’βŸ©βŠ—βˆ£s⟩,\vert - \rangle \otimes \frac{1}{2^n} \sum_{x \in \Sigma^n} \sum_{y \in \Sigma^n} (-1)^{(s\oplus y)\cdot x} \vert y \rangle = \vert - \rangle \otimes \vert s \rangle,

kerana sβŠ•y=0ns\oplus y = 0^n jika dan hanya jika y=s.y = s. Oleh itu, pengukuran mendedahkan tepat rentetan ss yang kita cari.

Kesukaran klasik​

Walaupun Circuit Deutsch-Jozsa menyelesaikan masalah Bernstein-Vazirani dengan satu kueri, mana-mana algoritma kueri klasik mesti membuat sekurang-kurangnya nn kueri untuk menyelesaikan masalah ini.

Ini boleh dibuktikan melalui hujah yang dipanggil teori maklumat, yang sangat mudah dalam kes ini. Setiap kueri klasik mendedahkan satu bit maklumat tentang penyelesaian, dan terdapat nn bit maklumat yang perlu diungkap β€” jadi sekurang-kurangnya nn kueri diperlukan.

Malah, adalah mungkin untuk menyelesaikan masalah Bernstein-Vazirani secara klasik dengan membuat kueri terhadap fungsi pada setiap nn rentetan yang mempunyai satu 11 sahaja, pada setiap kedudukan yang mungkin, dan 00 untuk semua bit lain, yang mendedahkan bit-bit dalam ss satu demi satu. Oleh itu, kelebihan kuantum berbanding algoritma klasik untuk masalah ini adalah 11 kueri berbanding nn kueri.

Bernstein-Vazirani dengan Qiskit​

Kita telah pun melaksanakan Circuit Deutsch-Jozsa di atas, dan di sini kita akan menggunakannya untuk menyelesaikan masalah Bernstein-Vazirani. Pertama, kita akan takrifkan fungsi yang melaksanakan Gate kueri untuk masalah Bernstein-Vazirani bagi mana-mana rentetan binari s.s.

def bv_query(s):
# Create a quantum circuit implementing a query gate for the
# Bernstein-Vazirani problem.

qc = QuantumCircuit(len(s) + 1)
for index, bit in enumerate(reversed(s)):
if bit == "1":
qc.cx(index, len(s))
return qc

display(bv_query("1011").draw(output="mpl"))

Output of the previous code cell

Kini kita boleh mencipta fungsi yang menjalankan Circuit Deutsch-Jozsa ke atas fungsi tersebut, menggunakan fungsi compile_circuit yang telah ditakrifkan sebelum ini.

def bv_algorithm(function: QuantumCircuit):
qc = compile_circuit(function)
result = AerSimulator().run(qc, shots=1, memory=True).result()
return result.get_memory()[0]

display(bv_algorithm(bv_query("1011")))
'1011'

Catatan tentang penamaan​

Dalam konteks masalah Bernstein-Vazirani, adalah lazim bahawa algoritma Deutsch-Jozsa dirujuk sebagai "algoritma Bernstein-Vazirani." Ini sedikit mengelirukan, kerana algoritmanya memang algoritma Deutsch-Jozsa, seperti yang dinyatakan dengan jelas oleh Bernstein dan Vazirani dalam karya mereka.

Apa yang Bernstein dan Vazirani lakukan setelah menunjukkan bahawa algoritma Deutsch-Jozsa menyelesaikan masalah Bernstein-Vazirani (seperti yang dinyatakan di atas) adalah mentakrifkan satu masalah yang jauh lebih rumit, dikenali sebagai masalah pensampelan Fourier rekursif. Ini adalah masalah yang sangat direka-bentuk di mana penyelesaian kepada contoh-contoh masalah yang berbeza secara efektif membuka tahap-tahap baharu masalah yang disusun dalam struktur seperti pokok. Masalah Bernstein-Vazirani pada dasarnya hanyalah kes asas bagi masalah yang lebih rumit ini.

Masalah pensampelan Fourier rekursif adalah contoh pertama yang diketahui bagi masalah kueri di mana algoritma kuantum mempunyai kelebihan yang dipanggil super-polinomial berbanding algoritma probabilistik, dengan itu melampaui kelebihan kuantum berbanding klasik yang ditawarkan oleh algoritma Deutsch-Jozsa. Secara intuitif, versi rekursif masalah ini memperkuatkan kelebihan 11 berbanding nn bagi algoritma kuantum kepada sesuatu yang jauh lebih besar.

Aspek paling mencabar dalam analisis matematik yang membuktikan kelebihan ini adalah menunjukkan bahawa algoritma kueri klasik tidak dapat menyelesaikan masalah tersebut tanpa membuat banyak kueri. Ini cukup tipikal; untuk banyak masalah, boleh jadi sangat sukar untuk menolak pendekatan klasik yang kreatif yang menyelesaikannya dengan cekap.

Masalah Simon, dan algoritma untuknya yang diterangkan dalam bahagian seterusnya, memang memberikan contoh yang jauh lebih mudah tentang kelebihan super-polinomial (dan, sebenarnya, eksponen) kuantum berbanding algoritma klasik, dan atas sebab ini masalah pensampelan Fourier rekursif kurang kerap dibincangkan. Ia tetap merupakan masalah pengiraan yang menarik dengan sendirinya.

Source: IBM Quantum docs β€” updated 15 Jan 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of approx. 26 Mac 2026