Pular para o conteúdo principal

Análise

Agora vamos analisar o algoritmo de Grover para entender como ele funciona. Começaremos com o que poderia ser descrito como uma análise simbólica, onde calculamos como a operação de Grover GG age sobre certos estados, e depois conectaremos essa análise simbólica a uma imagem geométrica que é útil para visualizar como o algoritmo funciona.

Soluções e não-soluções

Vamos começar definindo dois conjuntos de strings.

A0={xΣn:f(x)=0}A1={xΣn:f(x)=1}\begin{aligned} A_0 &= \bigl\{ x\in\Sigma^n : f(x) = 0\bigr\} \\ A_1 &= \bigl\{ x\in\Sigma^n : f(x) = 1\bigr\} \end{aligned}

O conjunto A1A_1 contém todas as soluções do nosso problema de busca, enquanto A0A_0 contém as strings que não são soluções (que podemos chamar de não-soluções quando conveniente). Esses dois conjuntos satisfazem A0A1=A_0 \cap A_1 = \varnothing e A0A1=Σn,A_0 \cup A_1 = \Sigma^n, ou seja, trata-se de uma bipartição de Σn.\Sigma^n.

Em seguida, definiremos dois vetores unitários representando superposições uniformes sobre os conjuntos de soluções e não-soluções.

A0=1A0xA0xA1=1A1xA1x\begin{aligned} \vert A_0\rangle &= \frac{1}{\sqrt{\vert A_0\vert}} \sum_{x\in A_0} \vert x\rangle \\ \vert A_1\rangle &= \frac{1}{\sqrt{\vert A_1\vert}} \sum_{x\in A_1} \vert x\rangle \end{aligned}

Formalmente, cada um desses vetores só está definido quando o conjunto correspondente é não-vazio, mas daqui em diante vamos nos concentrar no caso em que nem A0A_0 nem A1A_1 é vazio. Os casos em que A0=A_0 = \varnothing e A1=A_1 = \varnothing podem ser tratados separadamente com facilidade, e faremos isso mais tarde.

Como observação, a notação usada aqui é comum: sempre que temos um conjunto finito e não-vazio S,S, podemos escrever S\vert S\rangle para denotar o vetor de estado quântico uniforme sobre os elementos de S.S.

Vamos também definir u\vert u \rangle como o estado quântico uniforme sobre todas as strings de nn bits:

u=1NxΣnx.\vert u\rangle = \frac{1}{\sqrt{N}} \sum_{x\in\Sigma^n} \vert x\rangle.

Observe que

u=A0NA0+A1NA1.\vert u\rangle = \sqrt{\frac{\vert A_0 \vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1 \vert}{N}} \vert A_1\rangle.

Temos também que u=Hn0n,\vert u\rangle = H^{\otimes n} \vert 0^n \rangle, portanto u\vert u\rangle representa o estado do registrador Q\mathsf{Q} após a inicialização no passo 1 do algoritmo de Grover.

Isso implica que, imediatamente antes das iterações de GG acontecerem no passo 2, o estado de Q\mathsf{Q} está contido no espaço vetorial bidimensional gerado por A0\vert A_0\rangle e A1,\vert A_1\rangle, e além disso os coeficientes desses vetores são números reais. Como veremos, o estado de Q\mathsf{Q} sempre terá essas propriedades — ou seja, o estado é uma combinação linear real de A0\vert A_0\rangle e A1\vert A_1\rangle — após qualquer número de iterações da operação GG no passo 2.

Uma observação sobre a operação de Grover

Voltaremos agora nossa atenção para a operação de Grover

G=HnZORHnZf,G = H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} Z_f,

começando com uma observação interessante sobre ela.

Imagine por um momento que substituímos a função ff pela composição de ff com a função NOT — ou seja, a função que obtemos invertendo o bit de saída de f.f. Chamaremos essa nova função de g,g, e podemos expressá-la usando símbolos de algumas formas alternativas.

g(x)=¬f(x)=1f(x)=1f(x)={1f(x)=00f(x)=1g(x) = \neg f(x) = 1 \oplus f(x) = 1 - f(x) = \begin{cases} 1 & f(x) = 0\\[1mm] 0 & f(x) = 1 \end{cases}

Observe que

(1)g(x)=(1)1f(x)=(1)f(x)(-1)^{g(x)} = (-1)^{1 \oplus f(x)} = - (-1)^{f(x)}

para toda string xΣn,x\in\Sigma^n, e portanto

Zg=Zf.Z_g = - Z_f.

Isso significa que, se substituíssemos a função ff pela função g,g, o algoritmo de Grover não funcionaria de forma diferente — porque os estados obtidos pelo algoritmo nos dois casos são necessariamente equivalentes a menos de uma fase global.

Isso não é um problema! Intuitivamente, o algoritmo não se importa com quais strings são soluções e quais são não-soluções — ele apenas precisa ser capaz de distinguir soluções e não-soluções para operar corretamente.

Ação da operação de Grover

Agora vamos considerar a ação de GG sobre os vetores de estado quântico A0\vert A_0\rangle e A1.\vert A_1\rangle.

Primeiro, vamos observar que a operação ZfZ_f tem uma ação muito simples sobre A0\vert A_0\rangle e A1.\vert A_1\rangle.

ZfA0=A0ZfA1=A1\begin{aligned} Z_f \vert A_0\rangle & = \vert A_0\rangle \\[1mm] Z_f \vert A_1\rangle & = -\vert A_1\rangle \end{aligned}

Em segundo lugar, temos a operação HnZORHn.H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. A operação ZORZ_{\mathrm{OR}} é definida como

ZORx={xx=0nxx0n,Z_{\mathrm{OR}} \vert x\rangle = \begin{cases} \vert x\rangle & x = 0^n \\[2mm] -\vert x\rangle & x \neq 0^n, \end{cases}

novamente para toda string xΣn,x\in\Sigma^n, e uma forma alternativa conveniente de expressar essa operação é:

ZOR=20n0nI.Z_{\mathrm{OR}} = 2 \vert 0^n \rangle \langle 0^n \vert - \mathbb{I}.

Uma maneira simples de verificar que essa expressão concorda com a definição de ZORZ_{\mathrm{OR}} é avaliar sua ação sobre os estados da base computacional.

A operação HnZORHnH^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} pode portanto ser escrita assim:

HnZORHn=2Hn0n0nHnI=2uuI,H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} = 2 H^{\otimes n} \vert 0^n \rangle \langle 0^n \vert H^{\otimes n} - \mathbb{I} = 2 \vert u \rangle \langle u \vert - \mathbb{I},

usando a mesma notação, u,\vert u \rangle, que usamos acima para a superposição uniforme sobre todas as strings de nn bits.

E agora temos o que precisamos para calcular a ação de GG sobre A0\vert A_0\rangle e A1.\vert A_1\rangle. Primeiro, vamos calcular a ação de GG sobre A0.\vert A_0\rangle.

GA0=(2uuI)ZfA0=(2uuI)A0=2A0NuA0=2A0N(A0NA0+A1NA1)A0=(2A0N1)A0+2A0A1NA1=A0A1NA0+2A0A1NA1\begin{aligned} G \vert A_0 \rangle & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) Z_f \vert A_0\rangle \\ & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) \vert A_0\rangle \\ & = 2 \sqrt{\frac{\vert A_0\vert}{N}} \vert u\rangle -\vert A_0 \rangle\\ & = 2 \sqrt{\frac{\vert A_0\vert}{N}} \biggl( \sqrt{\frac{\vert A_0\vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1\vert}{N}} \vert A_1\rangle\biggr) -\vert A_0 \rangle \\ & = \biggl( \frac{2\vert A_0\vert}{N} - 1\biggr) \vert A_0 \rangle + \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} \vert A_1 \rangle \\ & = \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_0 \rangle + \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} \vert A_1 \rangle \end{aligned}

E em segundo lugar, vamos calcular a ação de GG sobre A1.\vert A_1\rangle.

GA1=(2uuI)ZfA1=(2uuI)A1=2A1Nu+A1=2A1N(A0NA0+A1NA1)+A1=2A1A0NA0+(12A1N)A1=2A1A0NA0+A0A1NA1\begin{aligned} G \vert A_1 \rangle & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I} \bigr) Z_f \vert A_1\rangle \\ & = - \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I} \bigr) \vert A_1\rangle \\ & = - 2 \sqrt{\frac{\vert A_1\vert}{N}} \vert u\rangle + \vert A_1 \rangle \\ & = - 2 \sqrt{\frac{\vert A_1\vert}{N}} \biggl(\sqrt{\frac{\vert A_0\vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1\vert}{N}} \vert A_1\rangle\biggr) + \vert A_1 \rangle \\ & = - \frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \vert A_0 \rangle + \biggl( 1 - \frac{2\vert A_1\vert}{N} \biggr) \vert A_1 \rangle \\ & = - \frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \vert A_0 \rangle + \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_1 \rangle \end{aligned}

Em ambos os casos estamos usando a equação

u=A0NA0+A1NA1\vert u\rangle = \sqrt{\frac{\vert A_0 \vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1 \vert}{N}} \vert A_1\rangle

juntamente com as expressões

uA0=A0NeuA1=A1N\langle u \vert A_0\rangle = \sqrt{\frac{\vert A_0 \vert}{N}} \qquad\text{e}\qquad \langle u \vert A_1\rangle = \sqrt{\frac{\vert A_1 \vert}{N}}

que decorrem dela.

Em resumo, temos

GA0=A0A1NA0+2A0A1NA1GA1=2A1A0NA0+A0A1NA1.\begin{aligned} G \vert A_0 \rangle & = \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_0 \rangle + \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} \vert A_1 \rangle\\[2mm] G \vert A_1 \rangle & = - \frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \vert A_0 \rangle + \frac{\vert A_0\vert - \vert A_1\vert}{N} \vert A_1 \rangle. \end{aligned}

Como já observamos, o estado de Q\mathsf{Q} imediatamente antes do passo 2 está contido no espaço bidimensional gerado por A0\vert A_0\rangle e A1,\vert A_1\rangle, e acabamos de estabelecer que GG mapeia qualquer vetor nesse espaço para outro vetor no mesmo espaço. Isso significa que, para fins de análise, podemos concentrar nossa atenção exclusivamente nesse subespaço.

Para entender melhor o que está acontecendo nesse espaço bidimensional, vamos expressar a ação de GG nesse espaço como uma matriz,

M=(A0A1N2A1A0N2A0A1NA0A1N),M = \begin{pmatrix} \frac{\vert A_0\vert - \vert A_1\vert}{N} & -\frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \\[2mm] \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} & \frac{\vert A_0\vert - \vert A_1\vert}{N} \end{pmatrix},

cujas primeira e segunda linhas/colunas correspondem a A0\vert A_0\rangle e A1,\vert A_1\rangle, respectivamente. Até agora nesta série, sempre conectamos as linhas e colunas de matrizes com os estados clássicos de um sistema, mas as matrizes também podem ser usadas para descrever as ações de mapeamentos lineares em diferentes bases, como temos aqui.

Embora não seja nada óbvio à primeira vista, a matriz MM é o que obtemos ao elevar ao quadrado uma matriz de aparência mais simples.

(A0NA1NA1NA0N)2=(A0A1N2A1A0N2A0A1NA0A1N)=M\begin{pmatrix} \sqrt{\frac{\vert A_0\vert}{N}} & - \sqrt{\frac{\vert A_1\vert}{N}} \\[2mm] \sqrt{\frac{\vert A_1\vert}{N}} & \sqrt{\frac{\vert A_0\vert}{N}} \end{pmatrix}^2 = \begin{pmatrix} \frac{\vert A_0\vert - \vert A_1\vert}{N} & -\frac{2 \sqrt{\vert A_1\vert \cdot \vert A_0\vert}}{N} \\[2mm] \frac{2 \sqrt{\vert A_0\vert \cdot \vert A_1\vert}}{N} & \frac{\vert A_0\vert - \vert A_1\vert}{N} \end{pmatrix} = M

A matriz

(A0NA1NA1NA0N)\begin{pmatrix} \sqrt{\frac{\vert A_0\vert}{N}} & - \sqrt{\frac{\vert A_1\vert}{N}} \\[2mm] \sqrt{\frac{\vert A_1\vert}{N}} & \sqrt{\frac{\vert A_0\vert}{N}} \end{pmatrix}

é uma matriz de rotação, que podemos alternativamente expressar como

(A0NA1NA1NA0N)=(cos(θ)sin(θ)sin(θ)cos(θ))\begin{pmatrix} \sqrt{\frac{\vert A_0\vert}{N}} & - \sqrt{\frac{\vert A_1\vert}{N}} \\[2mm] \sqrt{\frac{\vert A_1\vert}{N}} & \sqrt{\frac{\vert A_0\vert}{N}} \end{pmatrix} = \begin{pmatrix} \cos(\theta) & -\sin(\theta) \\[2mm] \sin(\theta) & \cos(\theta) \end{pmatrix}

para

θ=sin1(A1N).\theta = \sin^{-1}\biggl(\sqrt{\frac{\vert A_1\vert}{N}}\biggr).

Esse ângulo θ\theta vai desempenhar um papel muito importante na análise que se segue, portanto vale a pena enfatizar sua importância aqui quando o vemos pela primeira vez.

À luz dessa expressão da matriz, observamos que

M=(cos(θ)sin(θ)sin(θ)cos(θ))2=(cos(2θ)sin(2θ)sin(2θ)cos(2θ)).M = \begin{pmatrix} \cos(\theta) & -\sin(\theta) \\[2mm] \sin(\theta) & \cos(\theta) \end{pmatrix}^2 = \begin{pmatrix} \cos(2\theta) & -\sin(2\theta) \\[2mm] \sin(2\theta) & \cos(2\theta) \end{pmatrix}.

Isso ocorre porque rotacionar pelo ângulo θ\theta duas vezes é equivalente a rotacionar pelo ângulo 2θ.2\theta. Outra forma de ver isso é usar a expressão alternativa

θ=cos1(A0N),\theta = \cos^{-1}\biggl(\sqrt{\frac{\vert A_0\vert}{N}}\biggr),

juntamente com as fórmulas do ângulo duplo da trigonometria:

cos(2θ)=cos2(θ)sin2(θ)sin(2θ)=2sin(θ)cos(θ).\begin{aligned} \cos(2\theta) & = \cos^2(\theta) - \sin^2(\theta)\\[1mm] \sin(2\theta) & = 2 \sin(\theta)\cos(\theta). \end{aligned}

Em resumo, o estado do registrador Q\mathsf{Q} no início do passo 2 é

u=A0NA0+A1NA1=cos(θ)A0+sin(θ)A1,\vert u\rangle = \sqrt{\frac{\vert A_0\vert}{N}} \vert A_0\rangle + \sqrt{\frac{\vert A_1\vert}{N}} \vert A_1\rangle = \cos(\theta) \vert A_0\rangle + \sin(\theta) \vert A_1\rangle,

e o efeito de aplicar GG a esse estado é rotacioná-lo por um ângulo 2θ2\theta dentro do espaço gerado por A0\vert A_0\rangle e A1.\vert A_1\rangle. Assim, por exemplo, temos

Gu=cos(3θ)A0+sin(3θ)A1G2u=cos(5θ)A0+sin(5θ)A1G3u=cos(7θ)A0+sin(7θ)A1\begin{aligned} G \vert u \rangle &= \cos(3\theta) \vert A_0\rangle + \sin(3\theta) \vert A_1\rangle\\[1mm] G^2 \vert u \rangle &= \cos(5\theta) \vert A_0\rangle + \sin(5\theta) \vert A_1\rangle\\[1mm] G^3 \vert u \rangle &= \cos(7\theta) \vert A_0\rangle + \sin(7\theta) \vert A_1\rangle \end{aligned}

e em geral

Gtu=cos((2t+1)θ)A0+sin((2t+1)θ)A1.G^t \vert u \rangle = \cos\bigl((2t + 1)\theta\bigr) \vert A_0\rangle + \sin\bigl((2t + 1)\theta\bigr) \vert A_1\rangle.

Imagem geométrica

Agora vamos conectar a análise que acabamos de fazer a uma imagem geométrica. A ideia é que a operação GG é o produto de duas reflexões, ZfZ_f e HnZORHn.H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}. E o efeito líquido de realizar duas reflexões é realizar uma rotação.

Vamos começar com Zf.Z_f. Como já observamos anteriormente, temos

ZfA0=A0ZfA1=A1.\begin{aligned} Z_f \vert A_0\rangle & = \vert A_0\rangle \\[1mm] Z_f \vert A_1\rangle & = -\vert A_1\rangle. \end{aligned}

Dentro do espaço vetorial bidimensional gerado por A0\vert A_0\rangle e A1,\vert A_1\rangle, essa é uma reflexão em torno da reta paralela a A0,\vert A_0\rangle, que chamaremos de L1.L_1. Aqui está uma figura ilustrando a ação dessa reflexão sobre um vetor unitário hipotético ψ,\vert\psi\rangle, que assumimos ser uma combinação linear real de A0\vert A_0\rangle e A1.\vert A_1\rangle.

Uma figura que ilustra a ação de uma reflexão sobre um vetor.

Em segundo lugar, temos a operação HnZORHn,H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n}, que já vimos poder ser escrita como

HnZORHn=2uuI.H^{\otimes n} Z_{\mathrm{OR}} H^{\otimes n} = 2 \vert u \rangle \langle u \vert - \mathbb{I}.

Essa também é uma reflexão, desta vez em torno da reta L2L_2 paralela ao vetor u.\vert u\rangle. Aqui está uma figura que ilustra a ação dessa reflexão sobre um vetor unitário ψ.\vert\psi\rangle.

Uma figura que ilustra a ação de uma segunda reflexão sobre um vetor.

Quando combinamos essas duas reflexões, obtemos uma rotação — pelo dobro do ângulo entre as retas de reflexão — como esta figura ilustra.

Uma figura que ilustra a ação da operação de Grover sobre um vetor.

Isso explica, em termos geométricos, por que o efeito da operação de Grover é rotacionar combinações lineares de A0\vert A_0\rangle e A1\vert A_1\rangle por um ângulo de 2θ.2\theta.