L'algoritmo di Grover viene utilizzato, tra le altre cose, per cercare un elemento in un elenco non ordinato di elementi di lunghezza . Anche se ci sono molte domande qui su questo argomento, mi manca ancora il punto.
Ricerca in un elenco, in modo classico
Normalmente, progetterei una funzione di ricerca in questo modo
Quindi do l'elenco e l'elemento desiderato come input e ricevo la posizione dell'elemento nell'elenco come output. Penso di aver compreso che le informazioni su sono incorporate nell'algoritmo attraverso l'oracolo gate , quindi la nostra funzione diventa
Facciamo un esempio pratico. Prova a cercare l'asso di picche 1 \ spadesuit
L'elenco della lunghezza è .
L'elemento desiderato è . Dovrei ottenere . Ogni scheda può essere codificata con bit, la lista ha elementi quindi abbiamo bisogno di bit per codificare la lista. In questo caso, l'oracolo implementerà la funzione:
Tuttavia, l'input dell'algoritmo di Grover non è uno stato di qubit.
(NB: l'immagine del mazzo mischiato è presa da qui )
Grover e il suo oracolo
Diverse fonti (ad es. Qui - spiegate graficamente) affermano che l'input dell'algoritmo è diverso: l'input è uno stato preso dallo spazio di ricerca dove è il numero di elementi dell'elenco. Ogni numero corrisponde alla posizione di un elemento nell'elenco.
L'input di ora è un qubit vector , che deve essere una sovrapposizione di tutti gli elementi nello spazio di ricerca .
Sappiamo
- J ♣ corrisponde a ;
- 10 ♢ corrisponde a ;
- 4 ♡ corrisponde a ;
- 1 ♠ corrisponde a che è l'elemento desiderato;
- e così via...
In questo caso abbiamo
Ma in questo caso, il nostro oracolo dovrebbe implementare la funzione
Costruire l'oracolo ci richiede di sapere che è in posizione 5. Qual è il punto di eseguire l'algoritmo se abbiamo già cercato l'elemento per costruire l'oracolo?