Ang Deutsch-Jozsa algorithm
Ang algorithm ni Deutsch ay mas mahusay kaysa sa lahat ng classical algorithm para sa isang query problem, ngunit maliit lamang ang kalamangan: isa kumpara sa dalawang query. Pinapalawig ng Deutsch-Jozsa algorithm ang kalamantang ito β at, sa katunayan, maaari itong gamitin para malutas ang ilang iba't ibang query problem.
Narito ang quantum circuit na paglalarawan ng Deutsch-Jozsa algorithm. Maaaring kailanganin din ang karagdagang classical post-processing na hakbang, na hindi ipinapakita sa figure, depende sa partikular na problemang nilulutas.
Siyempre, hindi pa natin tinalakay kung anong mga problema ang nilulutas ng algorithm na ito; gagawin ito sa dalawang seksyong susunod.
Ang Deutsch-Jozsa problemβ
Magsisimula tayo sa query problem na orihinal na layunin ng Deutsch-Jozsa algorithm na malutas, na kilala bilang ang Deutsch-Jozsa problem.
Ang input function para sa problemang ito ay may anyo na para sa isang arbitrary na positibong integer na Tulad ng Deutsch's problem, ang gawain ay mag-output ng kung ang ay constant at kung ang ay balanced, na nangangahulugang ang bilang ng mga input string kung saan ang function ay kumukuha ng halagang ay katumbas ng bilang ng mga input string kung saan ang function ay kumukuha ng halagang .
Pansinin na, kapag ang ay mas malaki sa mayroong mga function ng anyo na hindi constant at hindi rin balanced. Halimbawa, ang function na na tinukoy bilang
ay hindi nahuhulog sa alinman sa dalawang kategoryang ito. Para sa Deutsch-Jozsa problem, hindi na natin alalahanin ang mga ganitong function β itinuturing itong mga "don't care" na input. Ibig sabihin, para sa problemang ito mayroon tayong pangako na ang ay constant o balanced.
Ang Deutsch-Jozsa algorithm, sa iisang query nito, ay nilulutas ang problemang ito sa sumusunod na paraan: kung lahat ng na resulta ng pagsukat ay kung gayon ang function na ay constant; at kung hindi, kapag hindi bababa sa isa sa mga resulta ng pagsukat ay kung gayon ang function na ay balanced. Isa pang paraan ng pagsasabi nito ay ang circuit na inilarawan sa itaas ay sinusundan ng classical post-processing na hakbang kung saan kinukuwenta ang OR ng mga resulta ng pagsukat upang makabuo ng output.
Pagsusuri ng algorithmβ
Para masuri ang pagganap ng Deutsch-Jozsa algorithm para sa Deutsch-Jozsa problem, makakatulong na magsimula sa pag-iisip tungkol sa kilos ng isang layer ng mga Hadamard gate. Ang isang Hadamard na operasyon ay maaaring ipahayag bilang isang matrix sa karaniwang paraan,
ngunit maaari rin nating ipahayag ang operasyong ito sa pamamagitan ng kilos nito sa mga standard basis state:
Ang dalawang ekwasyong ito ay maaaring pagsamahin sa isang formula,
na totoo para sa parehong pagpipilian ng
Ngayon, ipagpalagay na sa halip na isang Qubit lamang ay mayroon tayong na Qubit, at isang Hadamard na operasyon ay isinasagawa sa bawat isa. Ang pinagsama-samang operasyon sa na Qubit ay inilarawan ng tensor product na ( beses), na isinusulat natin bilang para sa kaiklian at kalinawan. Gamit ang formula mula sa itaas, sinusundan ng pagpapalawak at pagpapasimple, maaari nating ipahayag ang kilos ng pinagsama-samang operasyong ito sa mga standard basis state ng Qubit tulad nito:
Dito, sa pamamagitan ng paraan, isinusulat natin ang mga binary string na may haba na bilang at sumusunod sa indexing convention ng Qiskit.
Ang formula na ito ay nagbibigay sa atin ng kapaki-pakinabang na kasangkapan para suriin ang quantum circuit sa itaas. Pagkatapos isagawa ang unang layer ng mga Hadamard gate, ang estado ng na Qubit (kasama ang pinakakaliwang/pinakamababang Qubit, na tinatrato nang hiwalay mula sa iba) ay
Kapag isinagawa ang operasyong , ang estado ay nababago sa
sa pamamagitan ng parehong phase kick-back na penomenon na nakita natin sa pagsusuri ng algorithm ni Deutsch.
Pagkatapos ay isinasagawa ang ikalawang layer ng mga Hadamard gate, na (ayon sa formula sa itaas) ay nagbabago ng estado na ito sa
Medyo kumplikado ang hitsura ng ekspresyong ito, at hindi masyadong maraming masasabi tungkol sa mga probabilidad na makuha ang iba't ibang resulta ng pagsukat nang hindi alam pa ang higit pa tungkol sa function na
Sa kabutihang palad, ang kailangan lang nating malaman ay ang probabilidad na lahat ng resulta ng pagsukat ay β dahil iyon ang probabilidad na matukoy ng algorithm na ang ay constant. Ang probabilidad na ito ay may simpleng formula.
Sa mas detalyadong paliwanag, kung ang ay constant, kung gayon alinman ay para sa bawat string na kung saan ang halaga ng sum ay o kaya ay para sa bawat string na kung saan ang halaga ng sum ay Sa pag-divide ng at pagkuha ng parisukat ng absolute value ay nakukuha natin ang
Kung, sa kabilang banda, ang ay balanced, kung gayon ang ay kumukuha ng halagang sa kalahati ng mga string na at halagang sa kabilang kalahati, kaya ang mga at na termino sa sum ay nagkakansela at natitira tayo sa halagang
Napagtatanto natin na ang algorithm ay gumagana nang tama basta natutupad ang pangako.
Kahirapan sa classicalβ
Ang Deutsch-Jozsa algorithm ay gumagana sa bawat pagkakataon, laging nagbibigay ng tamang sagot kapag natutupad ang pangako, at nangangailangan ng isang query lamang. Paano ito ikukumpara sa classical query algorithm para sa Deutsch-Jozsa problem?
Una, ang anumang deterministic na classical algorithm na wastong nalulutas ng Deutsch-Jozsa problem ay dapat gumawa ng exponential na maraming query: kailangan ang na query sa pinakamasamang kaso. Ang dahilan ay, kung ang isang deterministic na algorithm ay nag-query sa sa o mas kaunting iba't ibang string, at nakakakuha ng parehong function value sa bawat pagkakataon, kung gayon parehong sagot ay posible pa rin. Ang function ay maaaring constant, o maaaring balanced ngunit sa malas ang mga query ay nagbabalik ng parehong function value.
Ang ikalawang posibilidad ay maaaring mukhang hindi malamang β ngunit para sa mga deterministic na algorithm ay walang randomness o kawalan ng katiyakan, kaya mabibigo sila nang sistematiko sa ilang mga function. Kaya naman mayroon tayong makabuluhang kalamangan ng quantum kumpara sa classical na algorithm sa aspetong ito.
Ngunit mayroon isang caveat, at iyon ay ang mga probabilistic na classical algorithm ay kayang malutas ang Deutsch-Jozsa problem nang may napakataas na probabilidad gamit ang ilang query lamang. Sa partikular, kung pipili lang tayo ng ilang iba't ibang string na may haba na nang random, at mag-query sa sa mga string na iyon, hindi malamang na makakakuha tayo ng parehong function value para sa lahat ng mga ito kapag ang ay balanced.
Para maging tiyak, kung pipiliin natin ang na input string na nang uniformly at random, suriin ang at sumagot ng kung pareho ang lahat ng function value, at kung hindi, palagi tayong magiging tama kapag ang ay constant, at maling sagot sa kaso ng balanced na na may probabilidad na lamang. Kung kukuha tayo ng halimbawa, ang algorithm na ito ay sasagot nang tama nang may probabilidad na mas malaki sa %.
Dahil dito, mayroon pa rin tayong medyo maliit na kalamangan ng quantum kumpara sa classical na algorithm β ngunit ito ay isang nasusukat na kalamangan na kumakatawan sa pagpapabuti kumpara sa algorithm ni Deutsch.
Deutsch-Jozsa gamit ang 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
Para ipatupad ang Deutsch-Jozsa algorithm sa Qiskit, magsisimula tayo sa pamamagitan ng pagtukoy ng function na dj_query na gumagawa ng quantum circuit na nagpapatupad ng query gate, para sa isang random na piniling function na nakakatugon sa pangako para sa Deutsch-Jozsa problem.
Sa 50% na tsansa, ang function ay constant, at sa 50% na tsansa ang function ay balanced.
Para sa bawat isa sa dalawang posibilidad na iyon, ang function ay pinipili nang uniformly mula sa mga function ng ganoong uri.
Ang argument ay ang bilang ng input bits ng function.
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
Maaari nating ipakita ang quantum circuit na implementasyon ng query gate gamit ang draw na paraan tulad ng dati.
display(dj_query(3).draw(output="mpl"))
Susunod na tutukuyin natin ang isang function na gumagawa ng Deutsch-Jozsa circuit, na tumatanggap ng quantum circuit na implementasyon ng query gate bilang argument.
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
Sa wakas, isang function na nagpapatakbo ng Deutsch-Jozsa circuit nang isang beses ay tinukoy.
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"
Maaari nating subukan ang ating implementasyon sa pamamagitan ng random na pagpili ng function, pagpapakita ng quantum circuit na implementasyon ng query gate para sa function na ito, at pagpapatakbo ng Deutsch-Jozsa algorithm sa function na iyon.
f = dj_query(3)
display(f.draw("mpl"))
display(dj_algorithm(f))

'balanced'
Ang Bernstein-Vazirani problemβ
Susunod, tatalakayin natin ang isang problem na kilala bilang ang Bernstein-Vazirani problem. Tinatawag din itong Fourier sampling problem, kahit mayroon pa ring mas pangkalahatang mga formulation ng problemang ito na tinatawag rin sa pangalang iyon.
Una, ipakilala natin ang ilang notasyon. Para sa anumang dalawang binary string na at na may haba na tinutukoy natin ang
Tatawagin natin ang operasyong ito bilang ang binary dot product. Isang alternatibong paraan ng pagtukoy nito ay ganito.
Pansinin na ito ay isang symmetric na operasyon, ibig sabihin, ang resulta ay hindi nagbabago kung i-swap natin ang at kaya malaya tayong gawin ito anumang oras na maginhawa. Minsan ay kapaki-pakinabang na isipin ang binary dot product na bilang ang parity ng mga bit ng sa mga posisyon kung saan ang string na ay may o katumbas nito, ang parity ng mga bit ng sa mga posisyon kung saan ang string na ay may
Sa notasyong ito, maaari na nating tukuyin ang Bernstein-Vazirani problem.
Hindi na natin kailangan ng bagong quantum algorithm para sa problemang ito; nilulutas ito ng Deutsch-Jozsa algorithm. Para sa kalinawan, tukuyin natin ang quantum circuit mula sa itaas, na hindi kasama ang classical post-processing na hakbang ng pagkuwenta ng OR, bilang ang Deutsch-Jozsa circuit.
Pagsusuri ng algorithmβ
Para masuri kung paano gumagana ang Deutsch-Jozsa circuit para sa isang function na nakakatugon sa pangako para sa Bernstein-Vazirani problem, magsisimula tayo sa isang mabilis na obserbasyon. Gamit ang binary dot product, maaari nating alternatibong ilarawan ang kilos ng na Hadamard gate sa mga standard basis state ng Qubit tulad ng sumusunod.
Katulad ng nakita natin nang sinusuri ang algorithm ni Deutsch, ito ay dahil ang halagang para sa anumang integer na ay nakasalalay lamang sa kung ang ay even o odd.
Bumabalik sa DeutschβJozsa circuit, pagkatapos isagawa ang unang layer ng mga Hadamard gate, ang estado ng na Qubit ay
Ang query gate ay isinasagawa pagkatapos, na (sa pamamagitan ng phase kickback phenomenon) ay nagbabago ng estado sa
Gamit ang ating formula para sa kilos ng isang layer ng mga Hadamard gate, nakikita natin na ang ikalawang layer ng mga Hadamard gate ay nagbabago ng estado na ito sa
Ngayon ay maaari tayong gumawa ng ilang simplipikasyon, sa exponent ng sa loob ng sum. Pinangako sa atin na ang para sa ilang string na kaya maaari nating ipahayag ang estado bilang
Dahil ang at ay mga binary na halaga, maaari nating palitan ang addition ng exclusive-OR β muli dahil ang tanging mahalaga para sa isang integer sa exponent ng ay kung ito ay even o odd. Gamit ang symmetry ng binary dot product, makukuha natin ang ekspresyong ito para sa estado:
(Ang mga panaklong ay idinagdag para sa kalinawan, kahit hindi talaga kailangan dahil kaugalian na tratuhin ang binary dot product na may mas mataas na precedence kaysa sa exclusive-OR.)
Sa puntong ito gagamitin natin ang sumusunod na formula.
Maaari nating makuha ang formula sa pamamagitan ng katulad na formula para sa mga bit,
kasama ang pagpapalawak ng binary dot product at bitwise exclusive-OR:
Ito ay nagpapahintulot sa atin na ipahayag ang estado ng circuit bago pa ang mga pagsukat tulad nito:
Ang huling hakbang ay gamitin ang isa pang formula, na gumagana para sa bawat binary string na
Dito gumagamit tayo ng simpleng notasyon para sa mga string na gagamitin natin ng ilang beses pa sa aralin: ang ay ang all-zero string na may haba na
Isang simpleng paraan para ipakita na gumagana ang formula na ito ay ang isaalang-alang ang dalawang kaso nang hiwalay. Kung ang kung gayon ang para sa bawat string na kaya ang halaga ng bawat termino sa sum ay at nakakakuha tayo ng sa pamamagitan ng pagdaragdag at pag-divide ng Sa kabilang banda, kung ang alinman sa mga bit ng ay katumbas ng kung gayon ang binary dot product na ay katumbas ng para sa eksakto sa kalahati ng mga posibleng pagpipilian para sa at para sa kabilang kalahati β dahil ang halaga ng binary dot product na ay nagbabago (mula hanggang o mula hanggang ) kung i-flip natin ang anumang bit ng sa isang posisyon kung saan ang ay may
Kung ilalapat natin ang formula na ito para pasimplehin ang estado ng circuit bago ang mga pagsukat, makukuha natin ang
dahil sa katotohanang ang kung at kung ang Kaya, ang mga pagsukat ay nagpapakita ng eksakto ang string na na hinahanap natin.
Kahirapan sa classicalβ
Habang nilulutas ng Deutsch-Jozsa circuit ang Bernstein-Vazirani problem gamit ang isang query, ang anumang classical query algorithm ay kailangang gumawa ng hindi bababa sa na query para malutas ang problemang ito.
Maaari itong ipaliwanag sa pamamagitan ng tinatawag na information theoretic na argumento, na napakasimple sa kasong ito. Ang bawat classical query ay nagbubunyag ng isang bit ng impormasyon tungkol sa solusyon, at mayroon na bit ng impormasyon na kailangang matuklasan β kaya kailangan ng hindi bababa sa na query.
Sa katunayan, posible na malutas ang Bernstein-Vazirani problem nang klasikal sa pamamagitan ng pag-query sa function sa bawat isa sa na string na may isang sa bawat posibleng posisyon, at para sa lahat ng iba pang bit, na nagbubunyag ng mga bit ng nang isa-isa. Kaya naman, ang kalamangan ng quantum kumpara sa classical na algorithm para sa problemang ito ay query kumpara sa na query.
Bernstein-Vazirani gamit ang Qiskitβ
Naipatupad na natin ang Deutsch-Jozsa circuit sa itaas, at dito gagamitin natin ito para malutas ang Bernstein-Vazirani problem. Una, tutukuyin natin ang isang function na nagpapatupad ng query gate para sa Bernstein-Vazirani problem para sa anumang binary string na
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"))
Ngayon ay maaari tayong lumikha ng isang function na nagpapatakbo ng Deutsch-Jozsa circuit sa function, gamit ang compile_circuit na function na tinukoy nang mas maaga.
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'
Puna sa nomenclatureβ
Sa konteksto ng Bernstein-Vazirani problem, karaniwang tinutukoy ang Deutsch-Jozsa algorithm bilang "Bernstein-Vazirani algorithm." Ito ay bahagyang nakakalito, dahil ang algorithm ay ang Deutsch-Jozsa algorithm, gaya ng malinaw na itinakda nina Bernstein at Vazirani sa kanilang gawain.
Ang ginawa nina Bernstein at Vazirani pagkatapos ipakita na nilulutas ng Deutsch-Jozsa algorithm ang Bernstein-Vazirani problem (tulad ng nakasaad sa itaas) ay tumukoy ng mas kumplikadong problema, na kilala bilang ang recursive Fourier sampling problem. Ito ay isang lubhang contrived na problema kung saan ang mga solusyon sa iba't ibang instance ng problema ay epektibong nagbubukas ng mga bagong antas ng problema na nakaayos sa isang tree-like na istraktura. Ang Bernstein-Vazirani problem ay mahalagang base case lamang ng mas kumplikadong problemang ito.
Ang recursive Fourier sampling problem ay ang unang kilalang halimbawa ng isang query problem kung saan ang mga quantum algorithm ay may tinatawag na super-polynomial na kalamangan kumpara sa mga probabilistic na algorithm, na lumagpas sa kalamangan ng quantum kumpara sa classical na inaalok ng Deutsch-Jozsa algorithm. Sa intuitive na pagsasalita, ang recursive na bersyon ng problema ay nagpapalaki ng kumpara sa na kalamangan ng mga quantum algorithm sa mas malaking bagay.
Ang pinaka-mapaghamong aspeto ng mathematical analysis na nagtatag ng kalamantang ito ay ang pagpapakita na ang mga classical query algorithm ay hindi makakalutas ng problema nang hindi gumagawa ng maraming query. Ito ay napaka-tipikal; para sa maraming problema maaaring maging napakahirap na ibukod ang mga malikhaing classical na diskarte na naglulutas sa kanila nang mahusay.
Ang Simon's problem, at ang algorithm para dito na inilarawan sa susunod na seksyon, ay nagbibigay ng mas simpleng halimbawa ng isang super-polynomial (at, sa katunayan, exponential) na kalamangan ng quantum kumpara sa classical na algorithm, at sa kadahilanang ito ang recursive Fourier sampling problem ay hindi gaanong madalas na tinalakay. Ito ay, gayunpaman, isang kawili-wiling computational problem sa sarili nitong karapatan.