Scegliere il numero di iterazioni
Abbiamo stabilito che il vettore di stato del registro nell'algoritmo di Grover rimane nel sottospazio bidimensionale generato da e una volta eseguito il passo di inizializzazione.
L'obiettivo è trovare un elemento e questo obiettivo sarà raggiunto se riusciamo a ottenere lo stato — poiché, misurando questo stato, siamo certi di ottenere un risultato di misura Dato che lo stato di dopo iterazioni al passo 2 è
dovremmo scegliere in modo che
sia il più vicino possibile a in valore assoluto, per massimizzare la probabilità di ottenere dalla misura. Per qualsiasi angolo il valore oscilla all'aumentare di , anche se non è necessariamente periodico — non c'è garanzia che si ottenga mai due volte lo stesso valore.
Naturalmente, oltre a massimizzare la probabilità di ottenere un elemento dalla misura, vorremmo anche scegliere il più piccolo possibile, perché applicazioni dell'operazione richiedono query alla funzione Poiché vogliamo che sia vicino a in valore assoluto, un modo naturale per farlo è scegliere in modo che
Risolvendo per si ottiene
Ovviamente, deve essere un intero, quindi non sarà necessariamente possibile raggiungere esattamente questo valore — ma quello che possiamo fare è prendere l'intero più vicino a questo valore, che è
Questo è il numero di iterazioni consigliato per l'algoritmo di Grover. Proseguendo con l'analisi, vedremo che la vicinanza di questo intero al valore target influenza naturalmente le prestazioni dell'algoritmo.
(Come nota a margine, se il valore target si trova esattamente a metà strada tra due interi, questa espressione di corrisponde all'arrotondamento per eccesso. In alternativa si potrebbe arrotondare per difetto, il che è ragionevole perché significa una query in meno — ma si tratta di un dettaglio secondario e non rilevante ai fini della lezione.)
Ricordando che il valore dell'angolo è dato dalla formula
vediamo che il numero di iterazioni consigliato dipende dal numero di stringhe in Questo rappresenta una sfida se non sappiamo quante soluzioni abbiamo, come discuteremo più avanti.
Ricerca unica
Prima di tutto, concentriamoci sulla situazione in cui esiste un'unica stringa tale che Un altro modo per dirlo è che stiamo considerando un'istanza del problema di Ricerca unica. In questo caso abbiamo
che può essere convenientemente approssimato come
quando diventa grande. Se sostituiamo nell'espressione
otteniamo
Ricordando che è non solo il numero di volte in cui l'operazione viene eseguita, ma anche il numero di query alla funzione richieste dall'algoritmo, vediamo che siamo sulla buona strada per ottenere un algoritmo che richiede query.
Ora indagheremo quanto funziona bene la scelta consigliata di La probabilità che la misura finale restituisca la soluzione unica può essere espressa esplicitamente come
Il primo argomento, si riferisce al numero di elementi su cui effettuiamo la ricerca, e il secondo argomento, che in questo caso è si riferisce al numero di soluzioni. Poco più avanti utilizzeremo la stessa notazione in modo più generale, quando ci sono più soluzioni.
Ecco una tabella delle probabilità di successo per valori crescenti di
Si noti che queste probabilità non sono strettamente crescenti. In particolare, si osserva un'anomalia interessante quando dove si ottiene una soluzione con certezza. Tuttavia, è possibile dimostrare in generale che
per ogni quindi la probabilità di successo tende a nel limite in cui diventa grande, come sembrano suggerire i valori sopra riportati. Ottimo!
Si noti però che anche un limite debole come stabilisce l'utilità dell'algoritmo di Grover. Qualunque sia il risultato di misura ottenuto dall'esecuzione della procedura, possiamo sempre verificare se con una singola query a E se non riusciamo a ottenere la stringa unica per cui con probabilità al massimo eseguendo la procedura una volta, dopo esecuzioni indipendenti della procedura non saremo riusciti a ottenere questa stringa unica con probabilità al massimo Cioè, usando query a otterremo la soluzione unica con probabilità almeno Usando il limite migliore si rivela che la probabilità di trovare con questo metodo è in realtà almeno
Soluzioni multiple
Al variare del numero di elementi in varia anche l'angolo il che può avere un effetto significativo sulla probabilità di successo dell'algoritmo. Per brevità, scriviamo per indicare il numero di soluzioni, e come prima assumiamo
Come esempio motivante, immaginiamo di avere soluzioni invece di una sola, come considerato in precedenza. Questo significa che
che è approssimativamente il doppio dell'angolo che avevamo nel caso quando è grande. Supponiamo di non sapere nulla di meglio, e di selezionare lo stesso valore di del caso con soluzione unica:
L'effetto sarà catastrofico, come rivela la seguente tabella di probabilità.
Questa volta la probabilità di successo tende a al tendere di all'infinito. Ciò accade perché stiamo effettivamente ruotando a una velocità doppia rispetto al caso con soluzione unica, quindi finiamo per oltrepassare il target e atterrare vicino a
Se invece utilizziamo la scelta consigliata di che è
per
le prestazioni saranno migliori. Per essere più precisi, usando questa scelta di si ottiene successo con alta probabilità.
Generalizzando quanto affermato in precedenza, è possibile dimostrare che
dove usiamo la notazione suggerita in precedenza: indica la probabilità che l'algoritmo di Grover, eseguito per iterazioni, riveli una soluzione quando ci sono soluzioni in totale su possibilità.
Questo limite inferiore di sulla probabilità di successo è leggermente peculiare, nel senso che più soluzioni ci sono, peggiore è il limite inferiore — ma sotto l'assunzione che sia significativamente più piccolo di concludiamo comunque che la probabilità di successo è ragionevolmente alta. Come prima, il solo fatto che sia ragionevolmente grande implica l'utilità dell'algoritmo.
Accade anche che
Questo limite inferiore descrive la probabilità che una stringa selezionata uniformemente a caso sia una soluzione — quindi l'algoritmo di Grover fa sempre almeno quanto la scelta casuale. (In effetti, quando l'algoritmo di Grover è una scelta casuale.)
Ora osserviamo il numero di iterazioni (e quindi il numero di query)
per
Per ogni vale e quindi
Questo implica che
Ciò si traduce in un risparmio nel numero di query al crescere di In particolare, il numero di query necessarie è
Numero di soluzioni sconosciuto
Se il numero di soluzioni è sconosciuto, è necessario un approccio diverso, poiché in questa situazione non abbiamo alcuna conoscenza di per guidare la scelta di Esistono, in realtà, diversi approcci.
Un approccio semplice è scegliere
uniformemente a caso. Selezionare in questo modo trova sempre una soluzione (supponendo che ne esista almeno una) con probabilità superiore al 40%, anche se questo non è ovvio e richiede un'analisi che non verrà inclusa qui. Ha però senso, soprattutto quando si pensa all'immagine geometrica: ruotare lo stato di un numero casuale di volte in questo modo non è dissimile dal scegliere un vettore unitario casuale nello spazio generato da e per il quale è probabile che il coefficiente di sia ragionevolmente grande. Ripetendo questa procedura e verificando il risultato nello stesso modo descritto in precedenza, la probabilità di trovare una soluzione può essere resa molto vicina a
Esiste un metodo raffinato che trova una soluzione quando ne esiste una usando query, anche quando il numero di soluzioni non è noto, e richiede query per determinare che non ci sono soluzioni quando
L'idea di base è scegliere uniformemente a caso dall'insieme in modo iterativo, per valori crescenti di In particolare, si può partire con e aumentarlo in modo esponenziale, terminando sempre il processo non appena si trova una soluzione e limitando per non sprecare query quando non esiste una soluzione. Il processo sfrutta il fatto che sono necessarie meno query quando esistono più soluzioni. È tuttavia necessaria una certa attenzione per bilanciare il tasso di crescita di con la probabilità di successo per ogni iterazione. (Prendere funziona, ad esempio, come rivela un'analisi. Raddoppiare invece, non funziona — risulta un aumento troppo rapido.)
I casi banali
In tutta l'analisi appena svolta, abbiamo assunto che il numero di soluzioni sia diverso da zero. Infatti, riferendoci ai vettori
abbiamo implicitamente assunto che e siano entrambi non vuoti. Qui considereremo brevemente cosa succede quando uno di questi insiemi è vuoto.
Prima di procedere con un'analisi, osserviamo l'ovvio: se ogni stringa è una soluzione, vedremo una soluzione quando misuriamo; e quando non ci sono soluzioni, non ne vedremo nessuna. In un certo senso non c'è bisogno di andare oltre.
Possiamo però verificare rapidamente la matematica per questi casi banali. La situazione in cui uno tra e è vuoto si verifica quando è costante; è vuoto quando per ogni e è vuoto quando per ogni Questo significa che
e quindi
Quindi, indipendentemente dal numero di iterazioni eseguite in questi casi, le misure riveleranno sempre una stringa casuale uniforme