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.
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 untuk integer positif yang sewenang-wenangnya. Seperti masalah Deutsch, tugasnya ialah mengeluarkan jika adalah malar dan jika adalah seimbang, yang sekali lagi bermakna bilangan rentetan input di mana fungsi mengambil nilai adalah sama dengan bilangan rentetan input di mana fungsi mengambil nilai .
Perhatikan bahawa, apabila lebih besar daripada terdapat fungsi berbentuk yang bukan malar mahupun seimbang. Sebagai contoh, fungsi yang ditakrifkan sebagai
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 sama ada malar atau seimbang.
Algoritma Deutsch-Jozsa, dengan satu pertanyaannya, menyelesaikan masalah ini dalam erti kata berikut: jika setiap satu daripada hasil ukuran adalah maka fungsi adalah malar; dan sebaliknya, jika sekurang-kurangnya satu hasil ukuran adalah maka fungsi 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,
tetapi kita juga boleh menyatakan operasi ini dari segi tindakannya pada keadaan asas piawai:
Kedua-dua persamaan ini boleh digabungkan menjadi satu formula tunggal,
yang berlaku untuk kedua-dua pilihan
Sekarang andaikan bahawa bukannya hanya satu Qubit kita mempunyai Qubit, dan operasi Hadamard dilakukan pada setiap satu. Operasi gabungan pada Qubit dihuraikan oleh hasil darab tensor ( kali), yang kita tulis sebagai 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 Qubit seperti ini:
Di sini, kita menulis rentetan binari panjang sebagai dan mengikut konvensyen pengindeksan Qiskit.
Formula ini memberi kita alat yang berguna untuk menganalisis Circuit kuantum di atas. Selepas lapisan Gate Hadamard pertama dilakukan, keadaan Qubit (termasuk Qubit paling kiri/bawah, yang dirawat secara berasingan daripada yang lain) ialah
Apabila operasi dilakukan, keadaan ini berubah menjadi
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
Ungkapan ini kelihatan agak rumit, dan tidak banyak yang boleh disimpulkan tentang kebarangkalian mendapat hasil ukuran yang berbeza tanpa mengetahui lebih lanjut tentang fungsi
Nasib baik, yang perlu kita ketahui hanyalah kebarangkalian bahawa setiap satu hasil ukuran adalah β kerana itulah kebarangkalian algoritma menentukan bahawa adalah malar. Kebarangkalian ini mempunyai formula yang mudah.
Secara lebih terperinci, jika adalah malar, maka sama ada untuk setiap rentetan dalam kes ini nilai jumlah ialah atau untuk setiap rentetan dalam kes ini nilai jumlah ialah Membahagi dengan dan mengambil kuasa dua nilai mutlak menghasilkan
Sebaliknya, jika adalah seimbang, maka mengambil nilai pada separuh rentetan dan nilai pada separuh yang lain, jadi sebutan dan sebutan dalam jumlah saling menghapuskan dan kita mendapat nilai
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: pertanyaan diperlukan dalam kes terburuk. Alasannya ialah, jika algoritma deterministik membuat pertanyaan pada 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 secara rawak, dan membuat pertanyaan pada rentetan tersebut, tidak mungkin kita mendapat nilai fungsi yang sama untuk semua daripadanya apabila adalah seimbang.
Lebih spesifik, jika kita memilih rentetan input secara seragam rawak, menilai dan menjawab jika nilai fungsi semuanya sama, dan jika tidak, maka kita akan sentiasa betul apabila adalah malar, dan salah dalam kes seimbang dengan kebarangkalian hanya Jika kita ambil sebagai contoh, algoritma ini akan menjawab dengan betul dengan kebarangkalian lebih daripada %.
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"))
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))

'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 dan dengan panjang kita takrifkan
Kita akan merujuk operasi ini sebagai hasil darab titik binari. Cara alternatif untuk mentakrifkannya adalah seperti berikut.
Perhatikan bahawa ini adalah operasi simetri, bermakna hasilnya tidak berubah jika kita tukarkan dan jadi kita bebas berbuat demikian bila-bila masa perlu. Kadang-kadang berguna untuk memikirkan hasil darab titik binari sebagai pariti bit-bit dalam pada kedudukan di mana rentetan mempunyai atau secara setara, pariti bit-bit dalam pada kedudukan di mana rentetan mempunyai
Dengan notasi ini, kita kini boleh mentakrifkan masalah Bernstein-Vazirani.
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 Gate Hadamard ke atas keadaan asas piawai bagi Qubit seperti berikut.
Serupa dengan apa yang kita lihat semasa menganalisis algoritma Deutsch, ini kerana nilai untuk mana-mana integer hanya bergantung pada sama ada genap atau ganjil.
Beralih kepada Circuit DeutschβJozsa, selepas lapisan pertama Gate Hadamard dilakukan, keadaan Qubit adalah
Gate kueri kemudian dilakukan, yang (melalui fenomena tendangan fasa) mengubah keadaan kepada
Menggunakan rumus kita untuk tindakan lapisan Gate Hadamard, kita dapati bahawa lapisan kedua Gate Hadamard kemudian mengubah keadaan ini kepada
Kini kita boleh membuat beberapa penyederhanaan pada eksponen di dalam jumlah. Kita dijanjikan bahawa untuk rentetan tertentu jadi kita boleh ungkapkan keadaan sebagai
Kerana dan adalah nilai binari, kita boleh menggantikan penambahan dengan eksklusif-OR β sekali lagi kerana satu-satunya perkara yang penting bagi integer dalam eksponen adalah sama ada ia genap atau ganjil. Menggunakan simetri hasil darab titik binari, kita memperoleh ungkapan ini untuk keadaan tersebut:
(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.
Kita boleh memperoleh rumus ini melalui rumus serupa untuk bit,
bersama-sama dengan pengembangan hasil darab titik binari dan eksklusif-OR bitwise:
Ini membolehkan kita mengungkapkan keadaan Circuit sejurus sebelum pengukuran seperti ini:
Langkah terakhir adalah menggunakan satu lagi rumus, yang berlaku untuk setiap rentetan binari
Di sini kita menggunakan notasi ringkas untuk rentetan yang akan kita gunakan beberapa kali lagi dalam pelajaran ini: adalah rentetan semua-sifar dengan panjang
Cara mudah untuk membuktikan bahawa rumus ini betul adalah dengan mempertimbangkan dua kes secara berasingan. Jika maka untuk setiap rentetan jadi nilai setiap sebutan dalam jumlah adalah dan kita mendapat selepas menjumlah dan membahagi dengan Sebaliknya, jika mana-mana satu bit dalam adalah sama dengan maka hasil darab titik binari adalah sama dengan untuk tepat separuh daripada pilihan yang mungkin bagi dan untuk separuh yang lain β kerana nilai hasil darab titik binari bertukar (dari ke atau dari ke ) jika kita tukarkan mana-mana bit dalam pada kedudukan di mana mempunyai
Jika kita kini menerapkan rumus ini untuk menyederhanakan keadaan Circuit sebelum pengukuran, kita peroleh
kerana jika dan hanya jika Oleh itu, pengukuran mendedahkan tepat rentetan 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 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 bit maklumat yang perlu diungkap β jadi sekurang-kurangnya kueri diperlukan.
Malah, adalah mungkin untuk menyelesaikan masalah Bernstein-Vazirani secara klasik dengan membuat kueri terhadap fungsi pada setiap rentetan yang mempunyai satu sahaja, pada setiap kedudukan yang mungkin, dan untuk semua bit lain, yang mendedahkan bit-bit dalam satu demi satu. Oleh itu, kelebihan kuantum berbanding algoritma klasik untuk masalah ini adalah kueri berbanding 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
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"))
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 berbanding 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.