L'algorithme de Grover est utilisé, entre autres, pour rechercher un élément dans une liste non ordonnée d'éléments de longueur . Même s'il y a beaucoup de questions ici concernant ce sujet, je manque toujours le point.
Recherche dans une liste, la manière classique
Normalement, je conçois une fonction de recherche de cette façon
Je donne donc la liste et l'élément voulu en entrée, et je reçois la position de l'élément dans la liste en tant que sortie. Je pense avoir compris que les informations sur sont intégrées dans l'algorithme via la porte oracle , donc notre fonction devient
Faisons un exemple pratique. Pensez à chercher l'as de pique de pique
La liste de longueur est .
L'élément recherché est . Je devrais obtenir . Chaque carte peut être encodée avec bits, la liste a éléments donc nous avons besoin de bits pour encoder la liste. Dans ce cas, l'oracle implémentera la fonction:
Cependant, l'entrée de l'algorithme de Grover n'est pas un état de qubits.
(NB: l'image du jeu mélangé est prise à partir d' ici )
Grover et son oracle
Plusieurs sources (par exemple ici - expliquées graphiquement) disent que l'entrée de l'algorithme est différente: l'entrée est un état pris dans l'espace de recherche où est le nombre d'éléments de la liste. Chaque numéro correspond à la position d'un élément dans la liste.
L'entrée de est maintenant un qubit vector , qui doit être une superposition de tous les éléments dans l'espace de recherche .
Nous savons
- correspond à ;
- correspond à ;
- correspond à ;
- correspond à qui est l'élément recherché;
- etc...
Dans ce cas, nous avons
Mais dans ce cas, notre oracle devrait implémenter la fonction
La construction de l'oracle nécessite que nous sachions que est en position 5. Quel est l'intérêt d'exécuter l'algorithme si nous avons déjà recherché l'élément afin de construire l'oracle?