5.2.3 Het Deutsch-Jozsa algoritme

Zijn de bovenstaande observaties ook nog ergens nuttig voor? Jazeker! Stel dat f:{0,1}n{0,1}f\colon\{0,1\}^{n}\to\{0,1\} 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 ff te gebruiken (dus één toepassing van OfO_{f}).

Dit algoritme heet het Deutsch-Jozsa algoritme en werkt in vijf eenvoudige stappen:

  1. 1.

    Start met |00\left|0\dots 0\right\rangle.

  2. 2.

    Pas de Hadamard-transformatie HHH\otimes\dotsb\otimes H toe.

  3. 3.

    Pas het fase-orakel OfO_{f} dat hoort bij de functie ff toe.

  4. 4.

    Pas weer de Hadamard-transformatie HHH\otimes\dotsb\otimes H toe.

  5. 5.

    Meet alle qubits. Als alle uitkomsten nul zijn, moet de functie ff 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 ff in het ergste geval minstens 2n2+1\frac{2^{n}}{2}+1 keer moet evalueren. Stel inderdaad dat we de functie op de helft van de invoerbitstrings toepassen (d.w.z. op 2n/22^{n}/2 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 2n/22^{n}/2 vragen verspild en nog steeds niets nuttigs geleerd. Om er zeker van te zijn of ff constant of gebalanceerd is, moeten we het evalueren op nog een invoer. In totaal komt dit neer op 2n2+1\frac{2^{n}}{2}+1 evaluaties van ff, vergeleken met 11 evaluatie in het quantumgeval. Merk op dat zelfs voor bescheiden waardes zoals n=100n=100 dit verschil zo dramatisch is dat je niet in staat zou zijn om ff 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 f:{0,1}n{0,1}f\colon\{0,1\}^{n}\to\{0,1\} een functie is die ofwel constant ofwel gebalanceerd is, dan kan het Deutsch-Jozsa algoritme met slechts één evaluatie van ff 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 2n2+1\frac{2^{n}}{2}+1 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.

Hack.

We voegen metingen en een ’Probability display’ toe:

[Uncaptioned image]

De waarschijnlijkheid van de uitkomst [00][0\dots 0] is nul, dus de functie is niet constant. Dit betekent dat het gebalanceerd moet zijn.