Busca não estruturada
Resumo
Vamos começar com uma descrição do problema que o algoritmo de Grover resolve. Como de costume, vamos usar para denotar o alfabeto binário ao longo desta discussão.
Suponha que
é uma função de strings binárias de comprimento para bits. Vamos assumir que podemos computar essa função de forma eficiente, mas fora isso ela é arbitrária e não podemos contar com uma estrutura especial ou implementação específica que nos convenha.
O que o algoritmo de Grover faz é buscar uma string para a qual . Vamos nos referir a strings assim como soluções para o problema de busca. Se houver múltiplas soluções, qualquer uma delas é considerada uma saída correta; se não houver nenhuma solução, uma resposta correta exige que relatemos que não existem soluções.
Essa tarefa é descrita como um problema de busca não estruturada porque não podemos contar com que tenha alguma estrutura particular que facilite o processo. Não estamos buscando em uma lista ordenada nem dentro de alguma estrutura de dados especificamente projetada para facilitar a busca — estamos essencialmente procurando uma agulha no palheiro.
De forma intuitiva, podemos imaginar que temos um circuito booleano extremamente complicado que computa , e podemos facilmente executar esse circuito em uma string de entrada escolhida. Mas como o circuito é tão complicado, não temos como compreendê-lo simplesmente examinando-o (além da capacidade de avaliá-lo em strings de entrada escolhidas).
Uma forma de realizar essa tarefa de busca classicamente é simplesmente iterar por todas as strings , avaliando em cada uma para verificar se é ou não uma solução. Daqui em diante, vamos escrever
por conveniência. Há strings em , portanto iterar por todas elas requer avaliações de . Operando sob a premissa de que estamos limitados a avaliar em entradas escolhidas, isso é o melhor que podemos fazer com um algoritmo determinístico se quisermos garantir o sucesso. Com um algoritmo probabilístico, poderíamos esperar economizar tempo escolhendo strings de entrada aleatórias para , mas ainda precisaríamos de avaliações de se quisermos que esse método tenha alta probabilidade de sucesso.
O algoritmo de Grover resolve esse problema de busca com alta probabilidade usando apenas avaliações de . Para ser claro, essas avaliações de função devem ocorrer em superposição, de forma semelhante aos algoritmos de consulta discutidos na lição Algoritmos quânticos de consulta, incluindo o algoritmo de Deutsch, o algoritmo de Deutsch-Jozsa e o algoritmo de Simon. Ao contrário desses algoritmos, o algoritmo de Grover adota uma abordagem iterativa: ele avalia em superposições de strings de entrada e intercala essas avaliações com outras operações que têm o efeito de criar padrões de interferência, levando a uma solução com alta probabilidade (se existir) após iterações.
Enunciado formal do problema
Vamos formalizar o problema que o algoritmo de Grover resolve usando o modelo de consulta de computação. Ou seja, vamos assumir que temos acesso à função por meio de uma porta de consulta definida da maneira usual:
para todo e . Essa é a ação de sobre estados da base computacional, e sua ação em geral é determinada pela linearidade.
Como discutido na lição Fundamentos algorítmicos quânticos, se temos um circuito booleano para computar , podemos transformar essa descrição do circuito booleano em um circuito quântico que implementa (usando algum número de qubits de espaço de trabalho que iniciam e encerram a computação no estado ). Assim, embora estejamos usando o modelo de consulta para formalizar o problema que o algoritmo de Grover resolve, ele não está limitado a esse modelo; podemos executar o algoritmo de Grover em qualquer função para a qual tenhamos um circuito booleano.
Aqui está um enunciado preciso do problema, que recebe o nome de Busca porque estamos procurando uma solução, ou seja, uma string para a qual assume o valor .
Note que este não é um problema de promessa — a função é arbitrária. No entanto, será útil considerar a seguinte variante do problema com promessa, na qual temos a garantia de que há exatamente uma solução. Esse problema apareceu como um exemplo de problema de promessa na lição Algoritmos quânticos de consulta.
Note também que o problema Ou mencionado na mesma lição está intimamente relacionado à Busca. Nesse problema, o objetivo é simplesmente determinar se uma solução existe ou não, ao contrário de realmente encontrar uma solução.