Algoritmo de Simon
O algoritmo de Simon é um algoritmo de consulta quântica para um problema conhecido como problema de Simon. Trata-se de um problema de promessa com características semelhantes aos problemas de Deutsch-Jozsa e Bernstein-Vazirani, mas com especificidades diferentes.
O algoritmo de Simon é significativo porque oferece uma vantagem exponencial dos algoritmos quânticos sobre os clássicos (incluindo os probabilísticos), e a técnica que ele utiliza inspirou Peter Shor a descobrir um algoritmo quântico eficiente para a fatoração de inteiros.
Problema de Simon
A função de entrada para o problema de Simon tem a forma
para inteiros positivos e . Poderíamos restringir nossa atenção ao caso em prol da simplicidade, mas há pouco a ganhar fazendo essa suposição — o algoritmo de Simon e sua análise são basicamente os mesmos de qualquer forma.
Vamos desdobrar a promessa para entender melhor o que ela diz em breve, mas primeiro é importante deixar claro que ela exige que tenha uma estrutura muito especial — portanto, a maioria das funções não satisfará essa promessa. Vale também reconhecer que esse problema não pretende ter importância prática. Pelo contrário, é um problema um tanto artificial, criado especificamente para ser fácil para computadores quânticos e difícil para computadores clássicos.
Existem dois casos principais: o primeiro é que é a string de zeros , e o segundo é que não é a string de zeros.
-
Caso 1: Se é a string de zeros, podemos simplificar a declaração de "se e somente se" na promessa para que ela leia Isso equivale a ser uma função injetora (um-para-um).
-
Caso 2: Se não é a string de zeros, então a promessa sendo satisfeita para essa string implica que é dois-para-um, o que significa que para cada string de saída possível de existem exatamente duas strings de entrada que fazem produzir essa string. Além disso, essas duas strings de entrada devem ter a forma e para alguma string
É importante reconhecer que só pode existir uma string que funcione quando a promessa é satisfeita, portanto sempre há uma resposta correta única para funções que satisfazem a promessa.
Aqui está um exemplo de uma função da forma que satisfaz a promessa para a string .
Existem strings de entrada diferentes e strings de saída diferentes, cada uma ocorrendo duas vezes — portanto, essa é uma função dois-para-um. Além disso, para quaisquer duas strings de entrada diferentes que produzem a mesma string de saída, vemos que o XOR bit a bit dessas duas strings de entrada é igual a , o que equivale a dizer que uma delas é igual à outra submetida ao XOR com .
Observe que a única coisa que importa sobre as strings de saída reais é se elas são iguais ou diferentes para diferentes escolhas de strings de entrada. Por exemplo, no exemplo acima, existem quatro strings e que aparecem como saídas de Poderíamos substituir essas quatro strings por outras strings diferentes, desde que sejam todas distintas, e a solução correta não mudaria.
Descrição do algoritmo
Aqui está um diagrama de circuito quântico representando o algoritmo de Simon.
Para ser preciso, há qubits no topo que são submetidos a portas Hadamard e qubits na parte inferior que entram diretamente na porta de consulta. Parece muito semelhante aos algoritmos que já discutimos na lição, mas desta vez não há kickback de fase; os qubits inferiores entram todos na porta de consulta no estado .
Para resolver o problema de Simon usando esse circuito, na prática serão necessárias várias execuções independentes seguidas de uma etapa de pós-processamento clássico, que será descrita mais adiante após a análise do comportamento do circuito.
Análise
A análise do algoritmo de Simon começa de forma semelhante ao algoritmo de Deutsch-Jozsa. Após a primeira camada de portas Hadamard ser aplicada nos qubits superiores, o estado se torna
Quando é aplicado, a saída da função é submetida ao XOR no estado todo-zero dos qubits inferiores, e o estado se torna
Quando a segunda camada de portas Hadamard é aplicada, obtemos o seguinte estado usando a mesma fórmula para a ação de uma camada de portas Hadamard de antes.
Neste ponto, a análise diverge das análises dos algoritmos anteriores desta lição.
Estamos interessados na probabilidade de as medições resultarem em cada string possível . Pelas regras de análise de medições descritas na lição Sistemas múltiplos do curso Fundamentos de informação quântica, encontramos que a probabilidade de obter a string é igual a
Para entender melhor essas probabilidades, precisaremos de mais um pouco de notação e terminologia. Primeiro, a imagem da função é o conjunto que contém todas as suas strings de saída.
Segundo, para cada string , podemos expressar o conjunto de todas as strings de entrada para as quais a função assume o valor como .
O conjunto é conhecido como a pré-imagem de sob . Podemos definir a pré-imagem sob de qualquer conjunto no lugar de de forma análoga — é o conjunto de todos os elementos que mapeia para aquele conjunto. (Esta notação não deve ser confundida com a inversa da função , que pode não existir. O fato de que o argumento no lado esquerdo é o conjunto em vez do elemento é a pista que nos permite evitar essa confusão.)
Usando esta notação, podemos dividir a soma em nossa expressão para as probabilidades acima para obter
Toda string é representada exatamente uma vez pelas duas somatórias — basicamente estamos colocando essas strings em baldes separados dependendo de qual string de saída elas produzem quando avaliamos a função , e então somando separadamente sobre todos os baldes.
Podemos agora avaliar a norma euclidiana ao quadrado para obter
Para simplificar ainda mais essas probabilidades, vamos analisar o valor
para uma escolha arbitrária de .
Se acontece de , então é uma função injetora e sempre há apenas um único elemento , para todo . O valor da expressão é neste caso.
Se, por outro lado, então existem exatamente duas strings no conjunto Para ser preciso, se escolhermos como qualquer uma dessas duas strings, então a outra string deve ser pela promessa no problema de Simon. Usando essa observação, podemos simplificar da seguinte forma.
Assim, o valor é independente da escolha específica de em ambos os casos.
Podemos agora concluir a análise examinando os mesmos dois casos de antes separadamente.
-
Caso 1: Neste caso a função é injetora, portanto existem strings e obtemos
Em palavras, as medições resultam em uma string escolhida uniformemente ao acaso.
-
Caso 2: Neste caso é dois-para-um, portanto existem elementos em Usando a fórmula acima, concluímos que a probabilidade de medir cada é
Em palavras, obtemos uma string escolhida uniformemente ao acaso do conjunto , que contém strings. (Como , exatamente metade das strings binárias de comprimento tem produto escalar binário com e a outra metade tem produto escalar binário com , como já observamos na análise do algoritmo de Deutsch-Jozsa para o problema de Bernstein-Vazirani.)
Pós-processamento clássico
Agora sabemos quais são as probabilidades para os possíveis resultados de medição quando executamos o circuito quântico do algoritmo de Simon. Isso é suficiente para determinar ?
A resposta é sim, desde que estejamos dispostos a repetir o processo várias vezes e aceitar que ele pode falhar com alguma probabilidade, que podemos tornar muito pequena executando o circuito vezes suficientes. A ideia essencial é que cada execução do circuito nos fornece evidências estatísticas sobre , e podemos usar essas evidências para encontrar com probabilidade muito alta se executarmos o circuito um número suficiente de vezes.
Suponhamos que executamos o circuito independentemente vezes, para . Não há nada de especial nesse número específico de iterações — poderíamos tomar maior (ou menor) dependendo da probabilidade de falha que estamos dispostos a tolerar, como veremos. Escolher garantirá que tenhamos mais de % de chance de recuperar .
Ao executar o circuito vezes, obtemos strings . Para ser claro, os sobrescritos aqui são parte dos nomes dessas strings, não expoentes ou índices de seus bits, portanto temos
Formamos agora uma matriz com linhas e colunas tomando os bits dessas strings como entradas de valor binário.
Agora, não sabemos o que é neste ponto — nosso objetivo é encontrar essa string. Mas imagine por um momento que sabemos a string , e formamos um vetor coluna a partir dos bits da string da seguinte forma.
Se realizarmos a multiplicação matriz-vetor módulo — ou seja, realizamos a multiplicação normalmente e depois tomamos o resto das entradas do resultado após dividir por — obtemos o vetor todo-zero.
Ou seja, tratada como um vetor coluna como descrito acima, a string sempre será um elemento do espaço nulo da matriz , desde que façamos a aritmética módulo . Isso vale tanto no caso quanto no caso . Para ser mais preciso, o vetor todo-zero está sempre no espaço nulo de , e é acompanhado pelo vetor cujas entradas são os bits de no caso em que .
A questão restante é se haverá outros vetores no espaço nulo de além dos correspondentes a e . A resposta é que isso se torna cada vez mais improvável à medida que aumenta — e se escolhermos , o espaço nulo de não conterá outros vetores além dos correspondentes a e com mais de % de chance. De forma mais geral, se substituirmos por para uma escolha arbitrária de um inteiro positivo , a probabilidade de que os vetores correspondentes a e estejam sozinhos no espaço nulo de é de pelo menos .
Usando álgebra linear, é possível calcular eficientemente uma descrição do espaço nulo de módulo . Especificamente, isso pode ser feito usando eliminação gaussiana, que funciona da mesma forma com aritmética módulo que com números reais ou complexos. Desde que os vetores correspondentes a e estejam sozinhos no espaço nulo de , o que ocorre com alta probabilidade, podemos deduzir a partir dos resultados desse cálculo.
Dificuldade clássica
Quantas consultas um algoritmo de consulta clássico precisa fazer para resolver o problema de Simon? A resposta é: muitas, em geral.
Existem diferentes afirmações precisas que podem ser feitas sobre a dificuldade clássica desse problema, e aqui está apenas uma delas. Se tivermos qualquer algoritmo de consulta probabilístico, e esse algoritmo fizer menos de consultas, que é um número de consultas exponencial em , então esse algoritmo falhará em resolver o problema de Simon com probabilidade de pelo menos .
Às vezes, provar resultados de impossibilidade como este pode ser muito desafiador, mas este não é muito difícil de provar através de uma análise probabilística elementar. Aqui, porém, examinaremos apenas brevemente a intuição básica por trás disso.
Estamos tentando encontrar a string oculta , mas enquanto não consultarmos a função em duas strings que têm o mesmo valor de saída, obteremos informações muito limitadas sobre . De forma intuitiva, tudo que aprenderemos é que a string oculta não é o OU exclusivo de quaisquer duas strings distintas que consultamos. E se consultarmos menos de strings, ainda haverá muitas escolhas para que não eliminamos porque não há pares de strings suficientes para isso. Esta não é uma prova formal, é apenas a ideia básica.
Portanto, em resumo, o algoritmo de Simon nos fornece uma vantagem notável do quantum sobre os algoritmos clássicos dentro do modelo de consulta. Em particular, o algoritmo de Simon resolve o problema de Simon com um número de consultas que é linear no número de bits de entrada da nossa função, enquanto qualquer algoritmo clássico, mesmo que seja probabilístico, precisa fazer um número de consultas que é exponencial em para resolver o problema de Simon com uma probabilidade razoável de sucesso.