Nous allons maintenant analyser l'algorithme de Grover pour comprendre son fonctionnement.
Nous commencerons par ce qu'on pourrait appeler une analyse symbolique, où nous calculons comment l'opération de Grover G agit sur certains états, puis nous relierons cette analyse symbolique à une représentation géométrique qui aide à visualiser le fonctionnement de l'algorithme.
L'ensemble A1 contient toutes les solutions à notre problème de recherche, tandis que A0 contient les chaînes qui ne sont pas des solutions (qu'on peut appeler non-solutions quand c'est pratique).
Ces deux ensembles vérifient A0∩A1=∅ et A0∪A1=Σn, c'est-à-dire qu'il s'agit d'une bipartition de Σn.
Ensuite, nous allons définir deux vecteurs unitaires représentant des superpositions uniformes sur les ensembles de solutions et de non-solutions.
Formellement, chacun de ces vecteurs n'est défini que lorsque l'ensemble correspondant est non vide, mais nous allons désormais nous concentrer sur le cas où ni A0 ni A1 n'est vide.
Les cas A0=∅ et A1=∅ se traitent facilement séparément, et nous le ferons plus tard.
En passant, la notation utilisée ici est courante : chaque fois que nous avons un ensemble fini et non vide S, on peut écrire ∣S⟩ pour désigner le vecteur d'état quantique uniforme sur les éléments de S.
Définissons également ∣u⟩ comme l'état quantique uniforme sur toutes les chaînes de n bits :
∣u⟩=N1x∈Σn∑∣x⟩.
Remarque :
∣u⟩=N∣A0∣∣A0⟩+N∣A1∣∣A1⟩.
On a aussi ∣u⟩=H⊗n∣0n⟩, donc ∣u⟩ représente l'état du registre Q après l'initialisation à l'étape 1 de l'algorithme de Grover.
Cela implique que juste avant les itérations de G à l'étape 2, l'état de Q est contenu dans l'espace vectoriel bidimensionnel engendré par ∣A0⟩ et ∣A1⟩, et de plus les coefficients de ces vecteurs sont des nombres réels.
Comme nous le verrons, l'état de Q aura toujours ces propriétés — c'est-à-dire que l'état est une combinaison linéaire réelle de ∣A0⟩ et ∣A1⟩ — après n'importe quel nombre d'itérations de l'opération G à l'étape 2.
Intéressons-nous maintenant à l'opération de Grover
G=H⊗nZORH⊗nZf,
en commençant par une observation intéressante à son sujet.
Imagine un instant que nous remplaçions la fonction f par la composition de f avec la fonction NOT — autrement dit, la fonction obtenue en inversant le bit de sortie de f.
Appelons cette nouvelle fonction g ; on peut l'exprimer de plusieurs manières équivalentes.
g(x)=¬f(x)=1⊕f(x)=1−f(x)={10f(x)=0f(x)=1
Remarque :
(−1)g(x)=(−1)1⊕f(x)=−(−1)f(x)
pour toute chaîne x∈Σn, et donc
Zg=−Zf.
Cela signifie que si on substituait la fonction f par la fonction g, l'algorithme de Grover ne fonctionnerait pas différemment — car les états obtenus par l'algorithme dans les deux cas sont nécessairement équivalents à une phase globale près.
Ce n'est pas un problème !
Intuitivement, l'algorithme n'a pas à savoir quelles chaînes sont des solutions et lesquelles sont des non-solutions — il lui suffit de pouvoir distinguer solutions et non-solutions pour fonctionner correctement.
Considérons maintenant l'action de G sur les vecteurs d'état quantique ∣A0⟩ et ∣A1⟩.
D'abord, observons que l'opération Zf a une action très simple sur ∣A0⟩ et ∣A1⟩.
Zf∣A0⟩Zf∣A1⟩=∣A0⟩=−∣A1⟩
Ensuite, considérons l'opération H⊗nZORH⊗n.
L'opération ZOR est définie par
ZOR∣x⟩=⎩⎨⎧∣x⟩−∣x⟩x=0nx=0n,
de nouveau pour toute chaîne x∈Σn, et une façon alternative commode d'exprimer cette opération est la suivante :
ZOR=2∣0n⟩⟨0n∣−I.
Une façon simple de vérifier que cette expression est bien conforme à la définition de ZOR est d'évaluer son action sur les états de la base standard.
L'opération H⊗nZORH⊗n peut donc s'écrire ainsi :
H⊗nZORH⊗n=2H⊗n∣0n⟩⟨0n∣H⊗n−I=2∣u⟩⟨u∣−I,
en utilisant la même notation, ∣u⟩, que celle utilisée plus haut pour la superposition uniforme sur toutes les chaînes de n bits.
Nous avons maintenant tout ce qu'il faut pour calculer l'action de G sur ∣A0⟩ et ∣A1⟩.
Calculons d'abord l'action de G sur ∣A0⟩.
Comme nous l'avons déjà noté, l'état de Q juste avant l'étape 2 est contenu dans l'espace bidimensionnel engendré par ∣A0⟩ et ∣A1⟩, et nous venons d'établir que G envoie tout vecteur de cet espace sur un autre vecteur du même espace.
Cela signifie que, pour les besoins de l'analyse, nous pouvons concentrer notre attention exclusivement sur ce sous-espace.
Pour mieux comprendre ce qui se passe dans cet espace bidimensionnel, exprimons l'action de G sur cet espace sous forme de matrice,
dont les première et deuxième lignes/colonnes correspondent respectivement à ∣A0⟩ et ∣A1⟩.
Jusqu'ici dans cette série, nous avons toujours associé les lignes et colonnes des matrices aux états classiques d'un système, mais les matrices peuvent aussi servir à décrire l'action de transformations linéaires sur différentes bases, comme c'est le cas ici.
Bien que ce ne soit pas du tout évident au premier coup d'œil, la matrice M est ce qu'on obtient en élevant au carré une matrice d'apparence plus simple.
C'est parce qu'effectuer deux rotations d'angle θ revient à effectuer une rotation d'angle 2θ.
Une autre façon de le voir est d'utiliser l'expression alternative
θ=cos−1(N∣A0∣),
avec les formules de duplication issues de la trigonométrie :
cos(2θ)sin(2θ)=cos2(θ)−sin2(θ)=2sin(θ)cos(θ).
En résumé, l'état du registre Q au début de l'étape 2 est
Relions maintenant l'analyse que nous venons de mener à une représentation géométrique.
L'idée est que l'opération G est le produit de deux réflexions,
Zf et H⊗nZORH⊗n.
Et l'effet net de deux réflexions est d'effectuer une rotation.
Commençons par Zf.
Comme nous l'avons déjà observé précédemment :
Zf∣A0⟩Zf∣A1⟩=∣A0⟩=−∣A1⟩.
Dans l'espace vectoriel bidimensionnel engendré par ∣A0⟩ et ∣A1⟩,
il s'agit d'une réflexion par rapport à la droite parallèle à ∣A0⟩, que nous appellerons L1.
Voici une figure illustrant l'action de cette réflexion sur un vecteur unitaire hypothétique ∣ψ⟩,
que nous supposons être une combinaison linéaire réelle de ∣A0⟩ et ∣A1⟩.
Ensuite, nous avons l'opération H⊗nZORH⊗n, dont nous avons déjà vu qu'elle peut s'écrire
H⊗nZORH⊗n=2∣u⟩⟨u∣−I.
Il s'agit également d'une réflexion, cette fois par rapport à la droite L2 parallèle au vecteur ∣u⟩.
Voici une figure représentant l'action de cette réflexion sur un vecteur unitaire ∣ψ⟩.
Lorsque nous composons ces deux réflexions, nous obtenons une rotation — d'un angle égal au double de l'angle entre les axes de réflexion — comme l'illustre cette figure.
Cela explique, en termes géométriques, pourquoi l'effet de l'opération de Grover est de faire tourner les combinaisons linéaires de ∣A0⟩ et ∣A1⟩ d'un angle de 2θ.