Problema de Simon
Na teoria da complexidade computacional e na computação quântica, o problema de Simon é um problema computacional que provou ser resolvido exponencialmente mais rápido em um computador quântico do que em um computador clássico (isto é, tradicional). O algoritmo quântico que resolve o problema de Simon, geralmente chamado de algoritmo de Simon, serviu de inspiração para o algoritmo de Shor.[1] Ambos os problemas são casos especiais do problema do subgrupo oculto abeliano, que hoje se sabe possuir algoritmos quânticos eficientes.
O problema está inserido no modelo de complexidade de árvore de decisão ou complexidade de consulta e foi concebido por Daniel R. Simon em 1994.[2] Simon exibiu um algoritmo quântico que resolve o problema de Simon exponencialmente mais rápido, com exponencialmente menos consultas, do que o melhor algoritmo clássico probabilístico (ou determinístico). Em particular, o algoritmo de Simon utiliza um número linear de consultas, enquanto qualquer algoritmo probabilístico clássico deve utilizar um número exponencial de consultas.
Este problema produz uma separação por oráculo entre as classes de complexidade BPP (complexidade de consulta clássica com erro limitado) e BQP (complexidade de consulta quântica com erro limitado).[3] Esta é a mesma separação que o algoritmo de Bernstein–Vazirani alcança, e diferente da separação fornecida pelo algoritmo de Deutsch–Jozsa, que separa P e EQP. Ao contrário do algoritmo de Bernstein–Vazirani, a separação do algoritmo de Simon é exponencial.
Como este problema assume a existência de um oráculo de "caixa preta" altamente estruturado para alcançar sua aceleração, ele possui pouco valor prático.[4] No entanto, sem tal oráculo, acelerações exponenciais não podem ser facilmente provadas, pois isso provaria que P é diferente de PSPACE.
Descrição do problema
[editar | editar código]O problema de Simon considera o acesso a uma função implementada por uma caixa preta ou um oráculo. É prometido que esta função seja ou uma função injetora (um-para-um), ou uma função dois-para-um; se for dois-para-um, é prometido, além disso, que duas entradas e avaliam para o mesmo valor se, e somente se, e diferirem em um conjunto fixo de bits. Ou seja:
- Se não for um-para-um, promete-se que existe um não nulo tal que, para todos os , se e somente se
onde denota o OU exclusivo bit a bit. O problema de Simon pergunta, em sua versão de decisão, se é um-para-um ou dois-para-um. Em sua versão de não-decisão, o problema de Simon pergunta se é um-para-um ou qual é o valor de (conforme definido acima). O objetivo é resolver esta tarefa com o menor número de consultas (avaliações) de .
Note que se , então e com . Por outro lado (porque para todos e ), . Assim, o problema de Simon pode ser reformulado da seguinte forma:
- Dado o acesso de caixa preta ou oráculo a , com a promessa de satisfazer, para algum e todos , se e somente se , determine se (versão de decisão) ou forneça (versão de não-decisão).
Note também que a promessa sobre implica que, se for dois-para-um, ela será uma função periódica:
Exemplo
[editar | editar código]A função a seguir é um exemplo de uma função que satisfaz a propriedade exigida para :
| 000 | 101 |
| 001 | 010 |
| 010 | 000 |
| 011 | 110 |
| 100 | 000 |
| 101 | 110 |
| 110 | 101 |
| 111 | 010 |
Neste caso, (ou seja, a solução). Cada saída de ocorre duas vezes, e as duas strings de entrada correspondentes a qualquer saída dada têm o XOR bit a bit igual a .
Por exemplo, as strings de entrada e são ambas mapeadas (por ) para a mesma string de saída . Isto é, e . Aplicando XOR a 010 e 100 obtém-se 110, ou seja,
também pode ser verificado usando as strings de entrada 001 e 111, que são ambas mapeadas (por f) para a mesma string de saída 010. Aplicando XOR a 001 e 111 obtém-se 110, ou seja, . Isso fornece a mesma solução de antes.
Neste exemplo, a função f é de fato uma função dois-para-um, onde .
Dificuldade do problema
[editar | editar código]Intuitivamente, este é um problema difícil de resolver de forma "clássica", mesmo se utilizarmos aleatoriedade e aceitarmos uma pequena probabilidade de erro. A intuição por trás da dificuldade é razoavelmente simples: se você quiser resolver o problema de forma clássica, precisa encontrar duas entradas diferentes e para as quais . Não há necessariamente nenhuma estrutura na função que nos ajude a encontrar tais entradas: especificamente, só podemos descobrir algo sobre (ou o que ela faz) quando, para duas entradas diferentes, obtemos a mesma saída. Em qualquer caso, precisaríamos adivinhar entradas diferentes antes de ter a probabilidade de encontrar um par no qual produza a mesma saída, conforme o problema do aniversário. Como, classicamente, para encontrar s com 100% de certeza seria necessário verificar entradas, o problema de Simon busca encontrar s usando menos consultas do que este método clássico.
O algoritmo de Simon
[editar | editar código]
O algoritmo como um todo utiliza uma sub-rotina para executar os seguintes dois passos:
- Executar a sub-rotina quântica um número esperado de vezes para obter uma lista de bitstrings linearmente independentes .
- Cada satisfaz , de modo que podemos resolver o sistema de equações que isso produz para obter .
Sub-rotina quântica
[editar | editar código]O circuito quântico (veja a imagem) é a implementação da parte quântica do algoritmo de Simon. A sub-rotina quântica do algoritmo faz uso da transformada de Hadamard onde , onde denota o XOR.
Primeiro, o algoritmo começa com dois registradores, inicializados como . Então, aplicamos a transformada de Hadamard ao primeiro registrador, o que resulta no estado
Consultamos o oráculo para obter o estado
- .
Aplicamos outra transformada de Hadamard ao primeiro registrador. Isso produzirá o estado
Finalmente, medimos o primeiro registrador (o algoritmo também funciona se o segundo registrador for medido antes do primeiro, mas isso é desnecessário). A probabilidade de medir um estado é Isso se deve ao fato de que obter a magnitude desse vetor e elevá-la ao quadrado soma todas as probabilidades de todas as possíveis medições do segundo registrador que necessariamente teriam o primeiro registrador como . Existem dois casos para nossa medição:
- e é injetora (um-para-um).
- e é dois-para-um.
Para o primeiro caso, já que neste caso, é um-para-um, implicando que a imagem de é , o que significa que o somatório abrange todos os vetores da base. Para o segundo caso, note que existem duas strings, e , tais que , onde . Assim, Além disso, como , , temos: Esta expressão agora é fácil de avaliar. Lembre-se de que estamos medindo . Quando , essa expressão será avaliada como , e quando , a expressão será .
Portanto, tanto quando quanto quando , o nosso medido satisfaz .
Pós-processamento clássico
[editar | editar código]Executamos a parte quântica do algoritmo até termos uma lista linearmente independente de bitstrings , onde cada satisfaz . Assim, podemos resolver eficientemente este sistema de equações de forma clássica para encontrar .
A probabilidade de que sejam linearmente independentes é de pelo menos Uma vez que resolvemos o sistema de equações e produzimos uma solução , podemos testar se . Se isso for verdade, então sabemos que , pois . Se for o caso de , então isso significa que , e porque é injetora (um-para-um).
Podemos repetir o algoritmo de Simon um número constante de vezes para aumentar arbitrariamente a probabilidade de sucesso, mantendo a mesma complexidade de tempo.
Exemplos explícitos do algoritmo de Simon para poucos qubits
[editar | editar código]Um qubit
[editar | editar código]Considere a instância mais simples do algoritmo, com . Neste caso, a evolução do estado de entrada através de uma porta Hadamard e o oráculo resulta no estado (salvo renormalização):
Se , ou seja, , então a medição do segundo registrador sempre dá o resultado , e sempre faz com que o primeiro registrador colapse no estado (salvo renormalização):
Assim, a aplicação de uma Hadamard e a medição do primeiro registrador sempre dão o resultado . Por outro lado, se for injetora, isto é, , então medir o primeiro registrador após a segunda Hadamard pode resultar tanto em quanto em , com igual probabilidade.
Recuperamos a partir dos resultados da medição observando se medimos sempre , caso em que , ou se medimos tanto quanto com igual probabilidade, caso em que inferimos que . Esse esquema falhará se mas, não obstante, sempre encontrarmos o resultado , contudo a probabilidade deste evento é sendo o número de medições realizadas, podendo, assim, tornar-se exponencialmente pequena aumentando-se a estatística.
Dois qubits
[editar | editar código]Considere agora o caso com . A parte inicial do algoritmo resulta no estado (salvo renormalização): Se , significando que é injetora, então encontrar no segundo registrador sempre colapsa o primeiro registrador para , para todo . Em outras palavras, aplicando as portas Hadamard e medindo o primeiro registrador, os quatro resultados são encontrados com igual probabilidade.
Suponha, por outro lado, que , por exemplo, . Então, medir no segundo registrador colapsa o primeiro registrador para o estado . E de forma mais geral, medir fornece no primeiro registrador. Aplicar portas Hadamard e medir no primeiro registrador pode assim resultar nos resultados e com probabilidades iguais.
Um raciocínio semelhante aplica-se aos outros casos: se , então os resultados possíveis são e , enquanto se , os resultados possíveis são e , compativelmente com a regra discutida no caso geral.
Para recuperar , só precisamos diferenciar entre estes quatro casos, recolhendo estatística suficiente para assegurar que a probabilidade de confundir a distribuição de probabilidade de um resultado com a de outro seja suficientemente pequena.
Complexidade
[editar | editar código]O algoritmo de Simon requer consultas à caixa preta, ao passo que um algoritmo clássico precisaria de pelo menos consultas. Também se sabe que o algoritmo de Simon é ótimo no sentido de que qualquer algoritmo quântico para resolver este problema requer consultas.[5][6]
Implementação do algoritmo de Simon no Qiskit
[editar | editar código]O circuito quântico mostrado aqui é de um exemplo simples de como o algoritmo de Simon pode ser implementado em Python usando Qiskit, uma estrutura de desenvolvimento de software de computação quântica de código aberto da IBM.

Veja também
[editar | editar código]Referências
[editar | editar código]- ↑ Shor, Peter W. (1 de janeiro de 1999). «Polynomial-Time Algorithms for Prime Factorization and Discrete Logarithms on a Quantum Computer». SIAM Review. 41 (2): 303–332. ISSN 0036-1445. arXiv:quant-ph/9508027
. doi:10.1137/S0036144598347011 - ↑ Simon, Daniel R. (1 de outubro de 1997). «On the Power of Quantum Computation». SIAM Journal on Computing. 26 (5): 1474–1483. ISSN 0097-5397. doi:10.1137/S0097539796298637
- ↑ Preskill, John (1998). Lecture Notes for Physics 229: Quantum Information and Computation. [S.l.: s.n.] pp. 273–275
- ↑ Aaronson, Scott (2018). Introduction to Quantum Information Science Lecture Notes (PDF). [S.l.: s.n.] pp. 144–151
- ↑ Koiran, P.; Nesme, V.; Portier, N. (2007), «The quantum query complexity of the Abelian hidden subgroup problem», Theoretical Computer Science, 380 (1-2): 115–126, doi:10.1016/j.tcs.2007.02.057, consultado em 6 de junho de 2011
- ↑ Koiran, P.; Nesme, V.; Portier, N. (2005), «A quantum lower bound for the query complexity of Simon's Problem», Proc. ICALP, 3580: 1287–1298, Bibcode:2005quant.ph..1060K, arXiv:quant-ph/0501060
, consultado em 6 de junho de 2011