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 do quantum sobre os algoritmos clássicos (incluindo 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 tem intenção de 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 que fazem a função avaliar para essa string de saída 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 quando a aritmética é feita módulo como funciona 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.