A pesquisa Operacional e os Recursos Renováveis 4 a 7 de novembro de 2003, Natal-RN
UMA NOVA DEMONSTRAÇÃO DA COMPLEXIDADE
DO ALGORITMO DE GROVER
Carlile Lavor
Universidade do Estado do Rio de Janeiro (IME-UERJ)
Rua São Francisco Xavier 524, 6o andar, bl. D
20550-900, Rio de Janeiro – RJ, Brasil e-mail: [email protected]
Renato Portugal
Laboratório Nacional de Computação Científica - LNCC Av. Getúlio Vargas 333, 25651-070, Petrópolis – RJ, Brasil
e-mail: [email protected]
Luiz M. Carvalho
Universidade do Estado do Rio de Janeiro (IME-UERJ)
Rua São Francisco Xavier 524, 6o andar, bl. D
20550-900, Rio de Janeiro – RJ, Brasil
e-mail: [email protected]
Nelson Maculan
Programa de Engenharia de Sistemas e Computação – COPPE Universidade Federal do Rio de Janeiro - UFRJ C. P. 68511, 21945-970, Rio de Janeiro – RJ, Brasil
e-mail: [email protected]
Resumo. Dentre os algoritmos quânticos, o algoritmo de Grover é o que tem um impacto mais
importante na área de Pesquisa Operacional. Originalmente, ele foi utilizado para resolver o seguinte problema: tem-se uma lista não ordenada com N elementos e deseja-se localizar um elemento específico. O melhor algoritmo clássico resolve este problema em O(N) passos.
Surpreendentemente, o algoritmo de Grover resolve o problema em O(
N
) passos. Isso éobtido devido às propriedades da Mecânica Quântica. Neste artigo, apresentamos os conceitos necessários para a compreensão do algoritmo de Grover e damos uma nova demonstração de sua complexidade.
Palavras-chave: Algoritmos Quânticos, Busca Quântica, Algoritmo de Grover.
Abstract. Grover’s algorithm is the most important quantum algorithm that can be applied in
the field of Operations Research. Originally, it was used to solve the following problem: suppose we have an unstructured database with N elements and we wish to search for a particular one. The best classical algorithm solves this problem requiring O(N) steps. Remarkably, using the properties of Quantum Mechanics, Grover’s algorithm requires only
O(
N
) steps. In this paper, we give the concepts necessary to understand the algorithm andpresent a new demonstration of its complexity.
1 Introdução
O algoritmo de Grover [3, 4, 6] foi aplicado, inicialmente, em um problema de busca: tem-se uma lista não ordenada com N elementos e deseja-se localizar um elemento específico. O melhor algoritmo clássico resolve este problema em O(N) passos, enquanto que o algoritmo de
Grover requer, apenas, O(
N
) passos. Este resultado é obtido usando as propriedades daMecânica Quântica.
Neste artigo, apresentamos uma nova demonstração da complexidade do algoritmo de Grover, baseada na sua interpretação geométrica.
O texto está organizado da seguinte forma. Na seção 2, damos a interpretação física de um qubit. Na seção 3, descrevemos o algoritmo, e, na seção 4, apresentamos uma interpretação geométrica. Na seção 5, demonstramos sua complexidade e finalizamos com a seção 6.
2 O bit quântico (qubit)
Um qubit |ψ〉 é uma combinação linear
|ψ〉 = α|0〉 + β|1〉, (1)
onde α e β são números complexos e os vetores |0〉 e |1〉 são representados por
|0〉 =
0
1
e |1〉 =
1
0
.A interpretação física do vetor |ψ〉, em (1), é que ele está simultaneamente nos estados |0〉 e |1〉. Isso faz com que, a princípio, a quantidade de informação que pode ser armazenada no estado |ψ〉 seja infinita. Entretanto, essa informação está no nível quântico. Para torná-la acessível no nível clássico, precisamos fazer uma medida. A mecânica quântica diz que o processo de
medida altera o estado de um qubit, fazendo-o assumir o estado |0〉, com probabilidade |α|2, ou
o estado |1〉, com probabilidade |β|2 [8]. Isso significa que os valores α e β não podem ser
conhecidos através de uma medida. Com apenas duas possibilidades, |0〉 ou |1〉, temos então que |α|2+ |β|2 = 1.
Calculando a norma de |ψ〉, em (1), obtemos:
|| |ψ〉 || = (|α|2+ |β|2)1/2 = 1.
Ou seja, o estado de um qubit tem sempre norma 1. Como as mudanças de estado de um sistema isolado em mecânica quântica são descritas por transformações lineares [8], as matrizes associadas a essas transformações que preservam a norma são matrizes unitárias [8].
Para tratar estados com mais de um qubit, usamos o produto tensorial [8]. Para os nossos propósitos, definimos o produto tensorial A ⊗ B, entre as matrizes A
∈
Cm×n e B∈
Cp×q , como(A ⊗ B)ij = (A)ijB,
onde i = 1, ..., m e j = 1, ..., n. Usaremos também a notação |v〉|w〉 ou |vw〉 para o produto tensorial |v〉 ⊗ |w〉.
Com o produto tensorial, podemos então generalizar o que vimos para o caso de um
qubit. Um estado qualquer |ψ〉 com n qubits é uma superposição de N = 2n estados da base
computacional {|0〉, ..., |N − 1〉}, dada por |ψ〉 =
∑
− = 1 0 N i αi|i〉, onde∑
− = 1 0 N i |αi|2 = 1.Note que a base computacional está representada em notação decimal.
3 O algoritmo de Grover
Originalmente, o algoritmo de Grover foi aplicado em um problema de busca [3, 4, 6]: tem-se uma lista não ordenada com N elementos e deseja-se localizar um elemento específico. O melhor algoritmo clássico para resolver este problema tem complexidade O(N). Entretanto, usando as propriedades da mecânica quântica, o algoritmo de Grover resolve o problema em
O(
N
) passos.Sem perda de generalidade, vamos supor que a busca será realizada sobre a lista {0, 1,
..., N − 1}, onde N = 2n para algum número natural n, e que a função f : {0, 1, ..., N − 1} → {0,
1}, definida por f(i) = 0 0 1, 0, se i i se i i = ≠ (2)
será utilizada para o reconhecimento do elemento procurado i0.
O algoritmo de Grover utiliza 2 registradores quânticos: o primeiro, com n qubits, inicializado no estado |0...0〉, e o segundo, com 1 qubit, inicializado no estado |1〉. Antes da execução do algoritmo, o primeiro registrador é modificado, formando uma superposição de todos os estados da base computacional {|0〉, ..., |N − 1〉}. Isso pode ser obtido aplicando o operador de Hadamard H em cada qubit do primeiro registrador. O operador H é dado por
H = 2 1 1 1 1 1 − .
É fácil ver que
H|0〉 =
2 1
(|0〉 + |1〉).
Isto é, aplicando o operador H sobre o estado |0〉, obtemos uma superposição dos estados |0〉 e |1〉, em que a probabilidade de se obter um dos estados, ao se fazer uma medida do estado H|0〉, é a mesma: 50%. Aplicando o operador H em cada qubit de um registrador com 2 qubits, temos:
= 2 1 (|0〉 + |1〉) ⊗ 2 1 (|0〉 + |1〉) =
2
1
(|00〉 + |01〉 + |10〉 + |11〉). Em notação decimal, H⊗2|00〉 =2
1
(|0〉 + |1〉 + |2〉 + |3〉).Generalizando para estados com n qubits, obtemos (N = 2n):
H⊗n(|0...0〉) = (H|0〉)⊗n = ( 2 1 (|0〉 + |1〉))⊗n = N 1
∑
− = 1 0 N i |i〉.Esse estado será denotado por |ψ〉. Aplicando então o operador H em cada qubit do primeiro registrador, obtemos uma superposição de todos os estados da base computacional.
Para completar a inicialização do algoritmo, o operador H também é aplicado sobre o estado inicial do segundo registrador, resultando em
H|1〉 =
2
1 (|0〉 − |1〉).
Esse estado será denotado por |−〉.
No algoritmo de Grover, a função f, em (2), utilizada para a identificação do elemento
procurado, é representada por um operador unitário Uf , definido por
Uf (|i〉|j〉) = |i〉|j⊕f(i)〉, (3)
onde |i〉 é o estado de n qubits do primeiro registrador, |j〉 é o estado de 1 qubit do segundo
registrador e ⊕ é a soma modulo 2.
No primeiro passo do algoritmo, o operador Uf é aplicado sobre o estado (|ψ〉|−〉),
resultante da inicialização: Uf (|ψ〉|−〉) = Uf (( N 1
∑
− = 1 0 N i |i〉)|−〉) = N 1∑
− = 1 0 N i Uf (|i〉|−〉) = N 1∑
− = 1 0 N i 2 1 (Uf(|i〉|0〉) − Uf (|i〉|1〉)) = N 1∑
− = 1 0 N i 2 1= N 1
∑
− = 1 0 N i 2 1(|i〉(| f(i)〉 − |1⊕ f(i)〉)) = N 1 (
∑
− ≠ = 1 , 0 0 N i i i 2 1 (|i〉(|0〉 − |1〉)) − 2 1 (|i0〉(|0〉 − |1〉))). = N 1∑
− = 1 0 N i ((−1)f(i)|i〉|−〉) = (∑
− = 1 0 N i N 1 (−1)f(i)|i〉)|−〉.Note que o estado do segundo registrador não se altera e o estado do primeiro registrador torna-se uma superposição de todos os estados da batorna-se computacional onde a amplitude do elemento procurado foi alterada de (
N
1 ) para (−
N
1
). O novo estado do primeiro registrador será denotado por |ψ1〉.
Após a aplicação do operador Uf , algo notável ocorreu. Além da função f ter sido
avaliada simultaneamente em todos os elementos da lista onde está sendo feita a busca (paralelismo quântico [8]), o estado associado ao elemento procurado foi identificado como sendo o único com amplitude negativa. Entretanto, essa informação só está disponível quanticamente. Não vai adiantar fazer uma medida agora, pois a probabilidade de obtermos o elemento procurado é |− N 1 |2 =
N
1
.O estado resultante do primeiro registrador, ao final do primeiro passo do algoritmo, é |ψ1〉 =
∑
− = 1 0 N i ( N 1 (−1)f(i)|i〉),que pode ser reescrito como
|ψ1〉 = |ψ〉 − N 2 |i0〉, (4) onde |ψ〉 = N 1
∑
− = 1 0 N i |i〉 (5) e i0 é o elemento procurado.O próximo passo será aumentar a probabilidade do elemento procurado ser obtido, após uma medida. Para isso, aplicaremos o operador (2|ψ〉〈ψ| − I) (I é o operador identidade) sobre o
|ψG〉 = (2|ψ〉〈ψ| − I)|ψ1〉 = (2|ψ〉〈ψ| − I)(|ψ〉 − N 2 |i0〉) = (2〈ψ|ψ〉)|ψ〉 − ( N 4 〈ψ|i0〉)|ψ〉 − |ψ〉 + N 2 |i0〉. (6) De (5), 〈ψ|i0〉 = N 1
∑
− = 1 0 N i 〈i|i0〉 = N 1 . (7) Substituindo (7) em (6), temos: |ψG〉 = (N
N
−
4
)|ψ〉 + N 2 |i0〉. (8) Esse é o estado do primeiro registrador, ao final do segundo passo do algoritmo. O estado do segundo registrador permanece inalterado (|−〉).De (5) e (8), obtemos a amplitude do estado |i0〉, ao final do segundo passo do
algoritmo: (
N
N
−
4
)( N 1 ) + N 2 = N N N 4 3 − .Por exemplo, para N = 4, a probabilidade de obtermos o elemento procurado, após uma medida, passa de 25% (final do primeiro passo) para 100%. No entanto, para valores grandes de N, a
probabilidade ainda é pequena. A idéia é, então, repetir a aplicação dos operadores Uf e
(2|ψ〉〈ψ| − I) (a composição desses dois operadores é chamada de operador de Grover G). O número de vezes que o operador G deve ser aplicado será obtido com base na interpretação geométrica do algoritmo (note que todos os estados e amplitudes considerados no algoritmo estão em Rn).
4 Interpretação geométrica
A seguir, daremos uma interpretação geométrica para os dois operadores que formam o operador de Grover G.
Seja |i〉, um estado qualquer da base computacional {|0〉, ..., |N − 1〉}. Da definição de
Uf , em (3), Uf (|i〉|−〉) = 2 1 (Uf (|i〉(|0〉 − |1〉))) = 2 1 (Uf (|i〉|0〉) − Uf (|i〉|1〉)) = 2 1 (|i〉|f(i)〉 − |i〉|1⊕ f(i)〉).
Da mesma forma que fizemos no cálculo de Uf(|ψ〉|−〉), Uf(|i〉|−〉) = (−1)f(i)|i〉|−〉. Ou seja, se i ≠i0, então Uf(|i〉|−〉) = |i〉|−〉, e, se i = i0, então Uf (|i〉|−〉) = − |i0〉|−〉.
Aplicando Uf sobre um vetor qualquer gerado pelos elementos da base computacional {|0〉, ...,
|N − 1〉}, temos (omitimos o segundo registrador):
Uf((
∑
− ≠ = 1 , 0 0 N i i i αi|i〉) + α 0 i |i0〉) = (∑
− ≠ = 1 , 0 0 N i i i αiUf|i〉) + α 0 i Uf |i0〉 = (∑
− ≠ = 1 , 0 0 N i i i αi|i〉) − α 0 i |i0〉.Da expressão acima, podemos concluir que a aplicação do operador Uf sobre um vetor
qualquer gerado pelos elementos da base computacional {|0〉, ..., |N − 1〉}, resulta numa reflexão
desse vetor em relação ao subespaço ortogonal à |i0〉, gerado por todos os outros elementos da
base computacional.
Vejamos agora, a interpretação geométrica do operador (2|ψ〉〈ψ| − I). Aplicando esse operador sobre um vetor unitário |a〉 qualquer, gerado pelos elementos da base computacional {|0〉, ..., |N − 1〉}, obtemos:
|b〉 = (2|ψ〉〈ψ| − I)|a〉 = 2〈ψ|a〉|ψ〉 − |a〉. (9) O ângulo β entre |ψ〉 e |b〉 é dado por
cosβ = 〈ψ|b〉
= 2〈ψ|a〉〈ψ|ψ〉 − 〈ψ|a〉 = 〈ψ|a〉,
que é o co-seno do ângulo α entre |ψ〉 e |a〉. Como α, β ∈ [0, π], α = β. Usando este fato e a expressão em (9), podemos concluir que a aplicação do operador (2|ψ〉〈ψ| − I) sobre um vetor unitário |a〉 resulta em um vetor do subespaço gerado por |ψ〉 e |a〉, que é uma reflexão do vetor |a〉 em relação ao vetor |ψ〉.
Com essas duas interpretações geométricas, podemos finalmente determinar o número de vezes que o operador de Grover deve ser aplicado.
5 Complexidade do algoritmo de Grover
Da expressão (7), vemos que o ângulo entre os vetores |ψ〉 e |i0〉 é menor do que 90º.
Seja θ, o ângulo entre os vetores |ψ〉 e G|ψ〉. De (7) e (8), cosθ = 〈ψ|G|ψ〉 =
N
N
−
4
〈ψ|ψ〉 + N 2 〈ψ|i0〉 =N
N
−
4
+ N 2 ( N 1 ) = 1 −N
2
, (10) e, de (4) e (7), 〈ψ|ψ1〉 = 〈ψ|ψ〉 − N 2 〈ψ|i0〉 = 1 − N 2 ( N 1 ) = 1 −N
2
.Portanto, o ângulo entre os vetores |ψ〉 e |ψ1〉 também é θ. A diferença é que as rotações, a
partir de |ψ〉, são em sentidos opostos ((4) e (8)). Note que as rotações são realizadas no subespaço gerado por |ψ〉 e |i0〉 (este subespaço será denotado por V0).
Do exposto acima e de (8), concluímos que, após uma aplicação do operador G sobre
|ψ〉, o ângulo γ entre |i0〉 e |ψ〉 diminui de θ radianos. Mostraremos que esse resultado vale para
cada aplicação de G.
Sejam |σ〉, um vetor unitário de V0 tal que o ângulo entre |i0〉 e |σ〉 seja γ − α1 (α1 é
então o ângulo entre |σ〉 e |ψ〉); |σ1〉, o estado do primeiro registrador após a aplicação do
operador Uf sobre |σ〉|−〉; e α2, o ângulo entre |ψ〉 e |σ1〉 (ver figura abaixo). Note que, pelo
O vetor G|σ〉 também está em V0, pois
G|σ〉 = (2|ψ〉〈ψ| − I) Uf|σ〉 = (2|ψ〉〈ψ| − I) |σ1〉 = 2〈ψ|σ1〉|ψ〉 − |σ1〉 = 2cosα2|ψ〉 − |σ1〉.
Como |σ1〉 está em V0, o mesmo acontece para G|σ〉 (omitimos o estado do segundo registrador
|−〉). Calculemos o ângulo entre |σ〉 e G|σ〉:
〈σ|G|σ〉 = 2cosα2〈σ|ψ〉 − 〈σ|σ1〉
= 2cosα2cosα1 − cos(α1 + α2)
= cos(α2 − α1).
G|σ〉 é o resultado da aplicação do operador (2|ψ〉〈ψ| − I) sobre o vetor |σ1〉. Portanto, como
vimos na seção anterior, G|σ〉 é a reflexão de |σ1〉 em relação ao vetor |ψ〉. Por sua vez, isso
implica que o ângulo entre |ψ〉 e |σ1〉 seja igual ao ângulo entre |ψ〉 e G|σ〉. Como o ângulo entre
|ψ1〉 e |σ1〉 é α1, e, o ângulo entre |ψ1〉 e |ψ〉 é θ, então,
α2 = α1 + θ ⇒ α2 − α1 = θ.
Conclusão: o ângulo entre os vetores |σ〉 e G|σ〉 também é θ. O fato de G ser um operador
unitário garante que o ângulo entre |i0〉 e G|σ〉 é menor do que o ângulo entre |i0〉 e |σ〉 (veja a
figura acima e compare os ângulos entre |σ〉 e |ψ〉 e entre G|σ〉 e G|ψ〉).
Resta a pergunta: quantas aplicações k do operador G serão necessárias para que o ângulo entre |i0〉 e Gk|ψ〉 seja nulo? Isto é, qual é o valor de k tal que
0 = arccos(〈ψ|i0〉) − kθ ? Usando (7) e (10), 0 = arccos( N 1 ) − k(arccos(
N
N
−
2
)) ⇒ k = arccos( N 1 ) / arccos(N
N
−
2
). Calculando o limite, temos:∞ → N
lim
N k =4
π
. Ou seja, k = O( N ). 6 Considerações finaisNeste trabalho, apresentamos uma nova demonstração da complexidade do algoritmo de Grover, baseada na sua interpretação geométrica.
Apesar de ser uma área ainda pouco explorada, os algoritmos quânticos já têm aplicações em problemas de otimização [9] e em problemas envolvendo grafos [2, 5]. Trabalhos neste sentido estão em andamento.
Referências
[1] R. Brüschweiler, Novel strategy for database searching in spin Liouville space by NMR ensemble computing, Phys. Rev. Lett., 85 (2000), 4815-4818.
[2] C. Dürr, M. Mhalla, and Y. Lei, Quantum query complexity of graph connectivity, arXiv: quant-ph/0303169, (2003).
[3] L.K. Grover, A fast quantum mechanical algorithm for database search, Proc. 28th Annual ACM Symposium on the Theory of Computing (STOC), (1996), 212-219.
[4] L.K. Grover, Quantum Mechanics helps in searching for a needle in a haystack, Phys. Rev.
Lett., 79 (1997), 325-328.
[5] M. Heiligman, Quantum algorithms for lowest weight paths and spanning trees in complete graphs, arXiv: quant-ph/0303131, (2003).
[6] C. Lavor, L.R.U. Manssur e R. Portugal, Grover’s Algorithm: Quantum Database Search, arXiv: quant-ph/0301079, (2003).
[7] Z.L. Madi, R. Brüschweiler and R.R. Ernst, One- and two-dimensional ensemble quantum computing in spin Liouville space, J. Chem. Phys, 109 (1998), 10603-10611.
[8] M.A. Nielsen e I.L. Chuang, Quantum Computation and Quantum Information, Cambridge University Press, Cambridge (2000).
[9] V. Protopopescu and J. Barhen, Solving a class of continuous global optimization problems using quantum algorithms, Phys. Lett. A, 296 (2002), 9-14.
[10] P. Shor, Algorithms for Quantum Computation: Discrete logarithms and factoring, SIAM