5.2.3 Het Deutsch-Jozsa algoritme
Zijn de bovenstaande observaties ook nog ergens nuttig voor? Jazeker! Stel dat een onbekende functie is die of constant of gebalanceerd is. Dan is er een eenvoudig quantumalgoritme dat kan bepalen welke van deze twee het geval is, door slechts één enkele evaluatie van te gebruiken (dus één toepassing van ).
Dit algoritme heet het Deutsch-Jozsa algoritme en werkt in vijf eenvoudige stappen:
-
1.
Start met .
-
2.
Pas de Hadamard-transformatie toe.
-
3.
Pas het fase-orakel dat hoort bij de functie toe.
-
4.
Pas weer de Hadamard-transformatie toe.
-
5.
Meet alle qubits. Als alle uitkomsten nul zijn, moet de functie constant zijn. Anders moet de functie gebalanceerd zijn.
Om te zien hoe dit zich verhoudt tot klassieke algoritmen, moet je bedenken dat elk klassiek algoritme de functie in het ergste geval minstens keer moet evalueren. Stel inderdaad dat we de functie op de helft van de invoerbitstrings toepassen (d.w.z. op invoerbits) en we krijgen elke keer hetzelfde antwoord. Dan kunnen we nog steeds niet concluderen dat de functie constant is, omdat het zo zou kunnen zijn dat de functie op de resterende helft van de bitstrings het tegenovergestelde antwoord geeft en dus toch gebalanceerd is. Dit is dus het slechtste geval. In dit scenario hebben we vragen verspild en nog steeds niets nuttigs geleerd. Om er zeker van te zijn of constant of gebalanceerd is, moeten we het evalueren op nog een invoer. In totaal komt dit neer op evaluaties van , vergeleken met evaluatie in het quantumgeval. Merk op dat zelfs voor bescheiden waardes zoals dit verschil zo dramatisch is dat je niet in staat zou zijn om zo vaak te evalueren in een redelijke hoeveelheid tijd (tegen die tijd zou de zon zonder brandstof raken en zou je naar een ander zonnestelsel moeten verhuizen).
Samengevat: Als een functie is die ofwel constant ofwel gebalanceerd is, dan kan het Deutsch-Jozsa algoritme met slechts één evaluatie van bepalen welke van de twee het geval is. Dit is exponentieel beter dan een klassiek algoritme, dat in het slechtste geval de functie moet evalueren op invoerbits.
Huiswerkopdracht 5.2 (Deutsch-Jozsa uitvoeren).
Het gele vakje Oracle in Quirky implementeert het fase-orakel voor een functie die constant of gebalanceerd is. Implementeer het Deutsch-Jozsa algoritme in Quirky en gebruik het om te bepalen welke van de twee het geval is.