Escolhendo o número de iterações
Estabelecemos que o vetor de estado do registrador no algoritmo de Grover permanece no subespaço bidimensional gerado por e uma vez que a etapa de inicialização tenha sido executada.
O objetivo é encontrar um elemento e esse objetivo será alcançado se conseguirmos obter o estado — pois se medirmos esse estado, teremos a garantia de obter um resultado de medição Dado que o estado de após iterações na etapa 2 é
devemos escolher de forma que
seja o mais próximo possível de em valor absoluto, para maximizar a probabilidade de obter a partir da medição. Para qualquer ângulo o valor oscila conforme aumenta, mas não é necessariamente periódico — não há garantia de que obteremos o mesmo valor duas vezes.
Naturalmente, além de tornar grande a probabilidade de obter um elemento a partir da medição, também gostaríamos de escolher o menor possível, porque aplicações da operação requerem consultas à função Como queremos que seja próximo de em valor absoluto, uma forma natural de fazer isso é escolher de forma que
Resolvendo para obtemos
É claro que deve ser um inteiro, portanto não necessariamente conseguiremos atingir exatamente esse valor — mas o que podemos fazer é tomar o inteiro mais próximo desse valor, que é
Esse é o número recomendado de iterações para o algoritmo de Grover. À medida que prosseguirmos com a análise, veremos que a proximidade desse inteiro em relação ao valor-alvo afeta naturalmente o desempenho do algoritmo.
(A título de observação: se o valor-alvo estiver exatamente no meio entre dois inteiros, esta expressão de é o que obtemos ao arredondar para cima. Poderíamos, alternativamente, arredondar para baixo, o que faz sentido pois significa uma consulta a menos — mas isso é secundário e sem importância para o propósito desta lição.)
Lembrando que o valor do ângulo é dado pela fórmula
vemos que o número recomendado de iterações depende do número de strings em Isso representa um desafio se não soubermos quantas soluções temos, como discutiremos mais adiante.
Busca única
Primeiro, vamos nos concentrar na situação em que existe uma única string tal que Outra forma de dizer isso é que estamos considerando uma instância do problema de Busca única. Nesse caso, temos
que pode ser convenientemente aproximado como
quando se torna grande. Se substituirmos na expressão
obtemos
Lembrando que é não apenas o número de vezes que a operação é executada, mas também o número de consultas à função exigido pelo algoritmo, vemos que estamos no caminho certo para obter um algoritmo que requer consultas.
Agora investigaremos quão bem a escolha recomendada de funciona. A probabilidade de que a medição final resulte na solução única pode ser expressa explicitamente como
O primeiro argumento, refere-se ao número de itens sobre os quais estamos buscando, e o segundo argumento, que é neste caso, refere-se ao número de soluções. Um pouco mais adiante usaremos a mesma notação de forma mais geral, onde há múltiplas soluções.
Aqui está uma tabela das probabilidades de sucesso para valores crescentes de
Observe que essas probabilidades não são estritamente crescentes. Em particular, temos uma anomalia interessante quando onde obtemos uma solução com certeza. Pode-se, no entanto, provar em geral que
para todo portanto a probabilidade de sucesso tende a no limite conforme se torna grande, como os valores acima parecem sugerir. Isso é ótimo!
Observe, porém, que mesmo um limite fraco como estabelece a utilidade do algoritmo de Grover. Para qualquer resultado de medição que obtenhamos ao executar o procedimento, sempre podemos verificar se usando uma única consulta a E se deixarmos de obter a string única para a qual com probabilidade de no máximo ao executar o procedimento uma vez, então após execuções independentes do procedimento teremos deixado de obter essa string única com probabilidade de no máximo Ou seja, usando consultas a obteremos a solução única com probabilidade de pelo menos Usando o limite mais preciso revela que a probabilidade de encontrar usando esse método é na verdade pelo menos
Múltiplas soluções
À medida que o número de elementos em varia, o ângulo também varia, o que pode ter um efeito significativo na probabilidade de sucesso do algoritmo. Por brevidade, vamos escrever para denotar o número de soluções, e como antes assumiremos que
Como exemplo motivador, vamos imaginar que temos soluções em vez de uma única solução, como consideramos acima. Isso significa que
que é aproximadamente o dobro do ângulo que tínhamos no caso quando é grande. Suponha que não soubéssemos nada melhor e selecionássemos o mesmo valor de que no cenário de solução única:
O efeito será catastrófico, como a seguinte tabela de probabilidades revela.
Desta vez, a probabilidade de sucesso tende a conforme tende ao infinito. Isso acontece porque estamos efetivamente girando duas vezes mais rápido do que quando havia uma solução única, de modo que acabamos ultrapassando o alvo e pousando próximo de
Porém, se em vez disso usarmos a escolha recomendada de que é
para
então o desempenho será melhor. Para ser mais preciso, usar essa escolha de leva ao sucesso com alta probabilidade.
Generalizando o que foi afirmado anteriormente, pode-se provar que
onde estamos usando a notação sugerida anteriormente: denota a probabilidade de que o algoritmo de Grover executado por iterações revele uma solução quando há soluções no total dentre possibilidades.
Esse limite inferior de sobre a probabilidade de sucesso é ligeiramente peculiar, pois mais soluções implica um limite inferior pior — mas sob a suposição de que é significativamente menor que concluímos, ainda assim, que a probabilidade de sucesso é razoavelmente alta. Como antes, o simples fato de que é razoavelmente grande implica a utilidade do algoritmo.
Também acontece que
Esse limite inferior descreve a probabilidade de que uma string selecionada uniformemente ao acaso seja uma solução — portanto o algoritmo de Grover sempre se sai pelo menos tão bem quanto um palpite aleatório. (De fato, quando o algoritmo de Grover é um palpite aleatório.)
Agora vamos analisar o número de iterações (e portanto o número de consultas)
para
Para todo vale que e portanto
Isso implica que
Isso se traduz em uma economia no número de consultas conforme cresce. Em particular, o número de consultas necessário é
Número desconhecido de soluções
Se o número de soluções é desconhecido, então uma abordagem diferente é necessária, pois nessa situação não temos conhecimento de para informar nossa escolha de Existem, de fato, múltiplas abordagens.
Uma abordagem simples é escolher
uniformemente ao acaso. Selecionar dessa forma sempre encontra uma solução (assumindo que uma exista) com probabilidade maior que 40%, embora isso não seja óbvio e requeira uma análise que não será incluída aqui. Faz sentido, no entanto, especialmente quando pensamos no quadro geométrico: girar o estado de um número aleatório de vezes dessa forma não é diferente de escolher um vetor unitário aleatório no espaço gerado por e para o qual é provável que o coeficiente de seja razoavelmente grande. Repetindo esse procedimento e verificando o resultado da mesma forma descrita anteriormente, a probabilidade de encontrar uma solução pode ser tornada muito próxima de
Existe um método refinado que encontra uma solução quando ela existe usando consultas, mesmo quando o número de soluções não é conhecido, e requer consultas para determinar que não há soluções quando
A ideia básica é escolher uniformemente ao acaso do conjunto iterativamente, para valores crescentes de Em particular, podemos começar com e aumentá-lo exponencialmente, sempre encerrando o processo assim que uma solução for encontrada e limitando de modo a não desperdiçar consultas quando não houver solução. O processo aproveita o fato de que menos consultas são necessárias quando mais soluções existem. É necessário, no entanto, algum cuidado para equilibrar a taxa de crescimento de com a probabilidade de sucesso em cada iteração. (Tomar funciona, por exemplo, como uma análise revela. Dobrar porém, não funciona — isso acaba sendo um aumento rápido demais.)
Os casos triviais
Ao longo da análise que acabamos de realizar, assumimos que o número de soluções é diferente de zero. De fato, ao nos referirmos aos vetores
implicitamente assumimos que e são ambos não vazios. Aqui consideraremos brevemente o que acontece quando um desses conjuntos é vazio.
Antes de nos preocuparmos com uma análise, vamos observar o óbvio: se toda string é uma solução, veremos uma solução ao medir; e quando não há soluções, não veremos nenhuma. Em certo sentido, não há necessidade de ir mais fundo que isso.
Podemos, no entanto, verificar rapidamente a matemática para esses casos triviais. A situação em que um dos conjuntos e é vazio ocorre quando é constante; é vazio quando para todo e é vazio quando para todo Isso significa que
e portanto
Portanto, independentemente do número de iterações que realizarmos nesses casos, as medições sempre revelarão uma string aleatória uniforme