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 tendo nenhuma 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 que faz avaliar para
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, onde garantimos 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.