Aller au contenu principal
Ce projet est en phase bêta. Tu as trouvé un bug ? Ouvrir un ticket GitHub. Une question ou une idée ? Pose ta question dans Discussions — tes retours sont les bienvenus !
Quelle est la qualité de la traduction sur cette page ?

Description de l'algorithme de Grover

Dans cette section, nous allons décrire l'algorithme de Grover. Nous commencerons par présenter les portes de requête de phase et la façon de les construire, puis nous décrirons l'algorithme de Grover lui-même. Enfin, nous discuterons brièvement de la façon dont cet algorithme s'applique naturellement à la recherche.

Portes de requête de phase​

L'algorithme de Grover utilise des opérations connues sous le nom de portes de requête de phase. Contrairement à une porte de requête ordinaire UfU_f, définie pour une fonction donnée ff de la manière habituelle décrite précédemment, une porte de requête de phase pour la fonction ff est définie comme

Zf∣x⟩=(−1)f(x)∣x⟩Z_f \vert x\rangle = (-1)^{f(x)} \vert x\rangle

pour toute chaîne x∈Σnx\in\Sigma^n.

L'opération ZfZ_f peut être implémentée en utilisant une porte de requête UfU_f comme le suggère ce diagramme :

Un circuit quantique implémentant une porte Z_f en utilisant une porte de requête avec le phénomène de rétroaction de phase

Cette implémentation utilise le phénomène de rétroaction de phase, et nécessite qu'un qubit d'espace de travail, initialisé dans l'état ∣−⟩,\vert -\rangle, soit disponible. Ce qubit reste dans l'état ∣−⟩\vert - \rangle après la fin de l'implémentation, et peut être réutilisé (pour implémenter des portes ZfZ_f ultérieures, par exemple) ou simplement écarté.

En plus de l'opération ZfZ_f, nous utiliserons également une porte de requête de phase pour la fonction OU à nn bits, qui est définie comme suit pour chaque chaîne x∈Σnx\in\Sigma^n.

OR(x)={0x=0n1x≠0n\mathrm{OR}(x) = \begin{cases} 0 & x = 0^n\\[0.5mm] 1 & x \neq 0^n \end{cases}

Explicitement, la porte de requête de phase pour la fonction OU à nn bits opère comme suit :

ZOR∣x⟩={∣x⟩x=0n−∣x⟩x≠0n.Z_{\mathrm{OR}} \vert x\rangle = \begin{cases} \vert x\rangle & x = 0^n \\[0.5mm] - \vert x\rangle & x \neq 0^n. \end{cases}

Pour être clair, c'est ainsi que ZORZ_{\mathrm{OR}} opère sur les états de base standard ; son comportement sur des états arbitraires est déterminé à partir de cette expression par linéarité.

L'opération ZORZ_{\mathrm{OR}} peut être implémentée comme un circuit quantique en commençant par un circuit booléen pour la fonction OU, puis en construisant une opération UORU_{\mathrm{OR}} (c'est-à-dire une porte de requête standard pour la fonction OU à nn bits) en utilisant la procédure décrite dans la leçon Fondements algorithmiques quantiques, et enfin une opération ZORZ_{\mathrm{OR}} en utilisant le phénomène de rétroaction de phase comme décrit ci-dessus. Remarque que l'opération ZORZ_{\mathrm{OR}} ne dépend pas de la fonction ff et peut donc être implémentée par un circuit quantique sans portes de requête.

Description de l'algorithme​

Maintenant que nous disposons des deux opérations ZfZ_f et ZORZ_{\mathrm{OR}}, nous pouvons décrire l'algorithme de Grover.

L'algorithme fait référence à un nombre tt, qui est le nombre d'itérations qu'il effectue (et donc le nombre de requêtes à la fonction ff qu'il nécessite). Ce nombre tt n'est pas spécifié par l'algorithme de Grover tel que nous le décrivons, et nous discuterons plus loin dans la leçon comment il peut être choisi.

Algorithme de Grover
  1. Initialiser un registre de nn qubits Q\mathsf{Q} dans l'état tout-zéro ∣0n⟩\vert 0^n \rangle puis appliquer une opération de Hadamard à chaque qubit de Q\mathsf{Q}.
  2. Appliquer tt fois l'opération unitaire G=H⊗nZORH⊗nZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f au registre Q\mathsf{Q}
  3. Mesurer les qubits de Q\mathsf{Q} dans la base standard et retourner la chaîne résultante.

L'opération G=H⊗nZORH⊗nZfG = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f itérée à l'étape 2 sera appelée l'opération de Grover dans la suite de cette leçon. Voici une représentation en circuit quantique de l'opération de Grover lorsque n=7 ⁣:n=7\!:

Une représentation en circuit quantique de l'opération de Grover

Dans ce diagramme, l'opération ZfZ_f est représentée comme étant plus grande que ZORZ_{\mathrm{OR}} comme indicateur visuel informel suggérant qu'elle est probablement l'opération la plus coûteuse. En particulier, lorsque nous travaillons dans le modèle de requêtes, ZfZ_f nécessite une requête tandis que ZORZ_{\mathrm{OR}} n'en nécessite aucune. Si au lieu de cela nous disposons d'un circuit booléen pour la fonction f,f, puis le convertissons en un circuit quantique pour Zf,Z_f, on peut raisonnablement s'attendre à ce que le circuit quantique résultant soit plus grand et plus complexe que celui pour ZOR.Z_{\mathrm{OR}}.

Voici un diagramme d'un circuit quantique pour l'algorithme entier lorsque n=7n=7 et t=3t=3. Pour des valeurs plus grandes de tt, il suffit d'insérer des instances supplémentaires de l'opération de Grover immédiatement avant les mesures.

Un circuit quantique pour l'algorithme de Grover lorsque t=3

L'algorithme de Grover peut être appliqué au problème de Recherche comme suit :

  • Choisir le nombre tt à l'étape 2. (Cela est discuté plus loin dans la leçon.)

  • Exécuter l'algorithme de Grover sur la fonction ff, en utilisant le choix que nous avons fait pour tt, pour obtenir une chaîne x∈Σnx\in\Sigma^n.

  • Interroger la fonction ff sur la chaîne xx pour voir si c'est une solution valide :

    • Si f(x)=1f(x) = 1, alors nous avons trouvé une solution, nous pouvons donc nous arrêter et retourner xx.

    • Sinon, si f(x)=0f(x) = 0, nous pouvons soit relancer la procédure, éventuellement avec un choix différent pour tt, soit décider d'abandonner et retourner « aucune solution ».

Une fois que nous aurons analysé le fonctionnement de l'algorithme de Grover, nous verrons qu'en prenant t=O(N)t = O(\sqrt{N}), on obtient une solution à notre problème de recherche (si elle existe) avec une forte probabilité.