Algoritmo de Grover
Para este módulo do Qiskit em Sala de Aula, os estudantes precisam ter um ambiente Python funcional com os seguintes pacotes instalados:
qiskitv2.1.0 ou mais recenteqiskit-ibm-runtimev0.40.1 ou mais recenteqiskit-aerv0.17.0 ou mais recenteqiskit.visualizationnumpypylatexenc
Para configurar e instalar os pacotes acima, consulte o guia Instalar o Qiskit. Para executar jobs em computadores quânticos reais, os estudantes precisam criar uma conta no IBM Quantum®, seguindo as etapas do guia Configure sua conta IBM Cloud.
Este módulo foi testado e utilizou 12 segundos de tempo de QPU. Esta é uma estimativa de boa fé; seu uso real pode variar.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Introdução
O algoritmo de Grover é um algoritmo quântico fundamental que aborda o problema de busca não estruturada: dada uma coleção de elementos e uma forma de verificar se um determinado elemento é aquele que você está procurando, quão rapidamente você pode encontrar o elemento desejado? Na computação clássica, quando os dados não estão ordenados e não há estrutura que possa ser explorada, a melhor abordagem é verificar cada elemento individualmente, resultando em uma complexidade de consulta de — em média, você precisará verificar cerca de metade dos elementos antes de encontrar o alvo.

O algoritmo de Grover, introduzido por Lov Grover em 1996, demonstra como um computador quântico pode resolver esse problema de forma muito mais eficiente, precisando de apenas etapas para encontrar o elemento marcado com alta probabilidade. Isso representa uma aceleração quadrática em relação aos métodos clássicos, o que é significativo para grandes conjuntos de dados.
O algoritmo opera no seguinte contexto:
- Enunciado do problema: Você tem uma função que retorna 1 quando é o elemento desejado, e 0 caso contrário. Essa função é frequentemente chamada de oráculo ou caixa preta, pois você só pode aprender sobre os dados consultando .
- Aproveitando a quântica: Enquanto algoritmos clássicos para esse problema exigem em média consultas, o algoritmo de Grover pode encontrar a solução em aproximadamente consultas, o que é muito mais rápido para grandes .
- Como funciona (em alto nível):
- O computador quântico primeiro cria uma superposição de todos os estados possíveis, representando todos os elementos possíveis simultaneamente.
- Em seguida, aplica repetidamente uma sequência de operações quânticas (a iteração de Grover) que amplifica a probabilidade da resposta correta e diminui as demais.
- Após iterações suficientes, medir o estado quântico fornece a resposta correta com alta probabilidade.
Aqui está um diagrama muito simples do algoritmo de Grover, que omite muitas nuances. Para um diagrama mais detalhado, consulte este artigo.

Algumas coisas a observar sobre o algoritmo de Grover:
- Ele é ótimo para busca não estruturada: nenhum algoritmo quântico pode resolver o problema com menos de consultas.
- Ele oferece apenas uma aceleração quadrática, não exponencial — ao contrário de alguns outros algoritmos quânticos (por exemplo, o algoritmo de Shor para fatoração).
- Ele tem implicações práticas, como a potencial aceleração de ataques de força bruta a sistemas criptográficos, embora a aceleração não seja suficiente para quebrar a maioria das criptografias modernas por si só.
Para estudantes de graduação familiarizados com conceitos básicos de computação e modelos de consulta, o algoritmo de Grover oferece uma ilustração clara de como a computação quântica pode superar abordagens clássicas para certos problemas, mesmo que a melhoria seja "apenas" quadrática. Ele também serve como porta de entrada para compreender algoritmos quânticos mais avançados e o potencial mais amplo da computação quântica.
A amplificação de amplitude é um algoritmo ou sub-rotina quântica de propósito geral que pode ser usada para obter uma aceleração quadrática em relação a um conjunto de algoritmos clássicos. O algoritmo de Grover foi o primeiro a demonstrar essa aceleração em problemas de busca não estruturada. Formular um problema de busca de Grover requer uma função oráculo que marca um ou mais estados de base computacional como os estados que nos interessam encontrar, e um circuito de amplificação que aumenta a amplitude dos estados marcados e, consequentemente, suprime os estados restantes.
Aqui demonstramos como construir oráculos de Grover e usar o GroverOperator da biblioteca de circuitos do Qiskit para configurar facilmente uma instância de busca de Grover. O primitivo Sampler do Runtime permite a execução contínua de circuitos de Grover.
Matemática
Suponha que exista uma função que mapeia strings binárias para uma única variável binária, ou seja,
Um exemplo, definido em , é
Outro exemplo, definido em , é
Você é incumbido de encontrar estados quânticos que correspondam aos argumentos de que são mapeados para 1. Em outras palavras, encontre todos os tais que (ou, se não houver solução, informe isso). Chamaremos os não-soluções de . Claro, faremos isso em um computador quântico, usando estados quânticos, então é útil expressar essas strings binárias como estados:
Usando a notação de estados quânticos (notação de Dirac), buscamos um ou mais estados especiais em um conjunto de estados possíveis, onde é o número de qubits, e com os não-soluções denominados
Podemos imaginar a função como fornecida por um oráculo: uma caixa preta que podemos consultar para determinar seu efeito sobre um estado . Na prática, frequentemente conheceremos a função, mas ela pode ser muito complexa de implementar, o que significa que reduzir o número de consultas ou aplicações de pode ser importante. Alternativamente, podemos imaginar um paradigma em que uma pessoa consulta um oráculo controlado por outra pessoa, de modo que não conhecemos a função oráculo, mas apenas seu efeito sobre certos estados por meio de consultas.
Este é um "problema de busca não estruturada", na medida em que não há nada de especial em que nos ajude em nossa busca. As saídas não estão ordenadas, as soluções não são conhecidamente agrupadas, e assim por diante. Como analogia, considere antigas listas telefônicas em papel. Essa busca não estruturada seria como procurar um determinado número, e não como pesquisar em uma lista de nomes em ordem alfabética.
No caso em que uma única solução é procurada, isso requer classicamente um número de consultas linear em . Claro, você poderia encontrar uma solução na primeira tentativa, ou poderia não encontrar nenhuma solução nas primeiras tentativas, de modo que precisaria consultar a -ésima entrada para ver se há alguma solução. Como as funções não têm estrutura explorável, você precisa de tentativas em média. O algoritmo de Grover requer um número de consultas ou computações de que escala como .
Esboço dos circuitos no algoritmo de Grover
Um tratamento matemático completo do algoritmo de Grover pode ser encontrado, por exemplo, em Fundamentals of quantum algorithms, um curso de John Watrous no IBM Quantum Learning. Um tratamento condensado está incluído em um apêndice ao final deste módulo. Mas por ora, apenas revisaremos a estrutura geral do circuito quântico que implementa o algoritmo de Grover.
O algoritmo de Grover pode ser dividido nas seguintes etapas:
- Preparação de uma superposição inicial (aplicação de portas Hadamard em todos os qubits)
- "Marcação" do estado alvo (dos estados alvo) com uma inversão de fase
- Uma etapa de "difusão", em que portas Hadamard e uma inversão de fase são aplicadas a todos os qubits.
- Possíveis repetições das etapas de marcação e difusão para maximizar a probabilidade de medir o estado alvo
- Medição
Frequentemente, a porta de marcação e as camadas de difusão compostas por e são chamadas coletivamente de "operador de Grover". Neste diagrama, apenas uma única repetição do operador de Grover é mostrada.
As portas Hadamard são bem conhecidas e amplamente utilizadas na computação quântica. A porta Hadamard cria estados de superposição. Concretamente, ela é definida por
Sua operação sobre qualquer outro estado é definida por linearidade. Em particular, uma camada de portas Hadamard nos permite ir do estado inicial com todos os qubits em (denotado ) para um estado em que cada qubit tem alguma probabilidade de ser medido em ou ; isso nos permite explorar o espaço de todos os estados possíveis de forma diferente da computação clássica.
Uma propriedade importante decorrente da porta Hadamard é que uma segunda aplicação pode desfazer tais estados de superposição:
Isso será importante em breve.
Verifique sua compreensão
Leia a pergunta abaixo, pense em sua resposta e clique no triângulo para revelar a solução.
Partindo da definição da porta Hadamard, demonstre que uma segunda aplicação da porta Hadamard desfaz tais superposições conforme afirmado acima.
Resposta:
Se aplicarmos X ao estado , obtemos o valor +1 e ao estado obtemos -1, então se tivéssemos uma distribuição 50-50, obteríamos um valor esperado de 0.
A porta é menos comum e é definida por
Por fim, a porta é definida por
Note que o efeito disso é que inverte o sinal em um estado alvo para o qual , deixando outros estados inalterados.
Em um nível muito alto e abstrato, você pode pensar nas etapas do circuito da seguinte maneira:
- Primeira camada Hadamard: coloca os qubits em uma superposição de todos os estados possíveis.
- : marca o estado alvo (os estados alvo) colocando um sinal "-" à frente dele. Isso não altera imediatamente as probabilidades de medição, mas altera como o estado alvo se comportará nas etapas subsequentes.
- Outra camada Hadamard: o sinal "-" introduzido na etapa anterior mudará o sinal relativo entre alguns termos. Como as portas Hadamard convertem uma mistura de estados computacionais em um estado computacional, e convertem em , essa diferença de sinal relativo pode começar a desempenhar um papel em quais estados são medidos.
- Uma última camada de portas Hadamard é aplicada e, em seguida, as medições são realizadas. Veremos com mais detalhes como isso funciona na próxima seção.
Exemplo
Para entender melhor como o algoritmo de Grover funciona, vamos trabalhar um pequeno exemplo com dois qubits. Isso pode ser considerado opcional para aqueles que não estão focados em mecânica quântica e notação de Dirac. Mas para aqueles que esperam trabalhar substancialmente com computadores quânticos, isso é altamente recomendado.
Aqui está o diagrama do circuito com os estados quânticos rotulados em várias posições. Note que com apenas dois qubits, há apenas quatro estados possíveis que poderiam ser medidos em qualquer circunstância: , , e .

Suponha que o oráculo (, desconhecido para nós) marque o estado . Vamos trabalhar as ações de cada conjunto de portas quânticas, incluindo o oráculo, e ver qual distribuição de estados possíveis surge no momento da medição. No início, temos
Usando a definição das portas Hadamard, temos
Agora o oráculo marca o estado alvo:
Note que nesse estado, todos os quatro resultados possíveis têm a mesma probabilidade de serem medidos. Todos têm um peso de magnitude o que significa que cada um tem uma chance de ser medido. Portanto, embora o estado esteja marcado pela fase "-", isso ainda não resultou em uma probabilidade aumentada de medir esse estado. Continuamos aplicando a próxima camada de portas Hadamard.
Combinando termos semelhantes, encontramos
Agora inverte o sinal em todos os estados exceto :
E finalmente aplicamos a última camada de portas Hadamard: