Eu acho que essa ahelwer
resposta toca em algumas das maneiras que pensamos sobre a complexidade dos algoritmos. No entanto - como não temos literalmente "oráculos" no mundo real que desejamos consultar, você pode se perguntar por que nos preocuparíamos com a complexidade das consultas ou com a idéia de oráculos. Vou tentar dar uma perspectiva sobre isso e, em particular, descrever como você pode tentar pensar em maneiras de construir um "oráculo Deutsch-Josza" de uma maneira que você não sinta que está trapaceando.
(Como Norbert Schuch
aponta, para o problema da Deutsch, que é o caso elementar da Deutsch-Josza, não há muito espaço para insights, mas espero que sua pergunta sobre oráculos se aplique de maneira mais geral também. É com isso que vou falar aqui.)
Uma intuição sobre oráculos
O conceito de um oráculo é uma maneira de nos permitir simplificar a maneira como falamos sobre problemas computacionais.
A aplicação original do conceito de um oráculo era considerar hipoteticamente o que poderíamos fazer se pudéssemos resolver problemas difíceis, mesmo impossíveis, sem nos comprometermos com o modo de fazê-lo, mesmo em princípio. Mas na complexidade computacional atualmente - particularmente na computação quântica, por exemplo , nos casos de Deutsch – Josza, Bernstein – Vazirani e outros problemas do oráculo - a situação é diferente: o oráculo descreve uma função que é a base do problema. O fato de ser 'um oráculo' é uma maneira de estruturar como descrevemos a função que está no centro do problema: não que nunca devamos contemplar como a função é computada, mas que essas informações simplesmente não são fornecidas como parte do problema e que não estamos preocupados com o tempo ou outra complexidade associada a essa função.
Quando adotamos essa abordagem, podemos realmente obter respostas relacionadas a perguntas muito difíceis na computação. Por exemplo, você pode saber que não sabemos como provar quer P ≠ NP ou P = NP , mas que pode mostrar que existem oráculos A tais que podemos mostrar que P A ≠ NP A . O que o oráculo A faz aqui não ajuda um computador (mais precisamente, uma máquina de Turing determinística ou uma máquina de Turing não determinística) a resolver um problema - ele representa o problema que o computador deve resolver. O fato de podermos mostrar em alguns casos que P A ≠ NP A , não significa que P é realmente diferente de NP : Significa apenas que apenas usando não-determinismo é realmente um recurso significativo para um modelo de computação para ter - ele permite que você para resolver alguns problemas de forma eficiente, e não há nenhuma maneira genericamente para simular o não-determinismo de forma eficiente em um computador determinístico. Então, se você quiser resolver o problema relacionado com o que A calcula, é absolutamente exigiria algumas informações sobre a estrutura de qualquer função que poderia eficientemente computação A .
Essa é uma das principais coisas que os oráculos tratam: eles permitem que você fale sobre maneiras pelas quais os modelos de computação podem ou não resolver problemas, quando você recebe informações limitadas sobre o problema.
Usando algoritmos oracle para resolver problemas não oracle
O algoritmo Deutsch-Josza, ou o algoritmo Bernstein-Vazirani, não são, em princípio, algoritmos executados por eles mesmos. (Bem, na verdade não - consulte a próxima seção.) Eles representam maneiras pelas quais você pode resolver um problema . Que problemas eles resolvem? Eles permitem descobrir certos recursos de uma função na qual você está interessado - seja constante / equilibrada ou qual vetor está associado a alguma função linear com valor escalar em vetores.
Em quais funções você as executa? - Você as executa em qualquer função pela qual esteja interessado na resposta.
A descrição deles como algoritmos baseados em oráculo não vem ao caso. Os problemas do oracle basicamente permitem que você saiba que, com um computador quântico ideal, você pode resolver o problema mesmo que saiba muito pouco sobre a função , desde que possa realmente avaliar a função com eficiência na prática. Para realmente avaliar essa função, é claro que você precisará de uma descrição de como fazê-lo, e assim terá mais informações do que na configuração do oracle; mas isso não impede que você use o mesmo algoritmo.
O que acontece quando você tem mais informações do que na configuração do oráculo, é que, de repente, existem outras maneiras de solucionar o problema. Especificamente, pode ser possível resolver o problema de maneira eficiente e classicamente . (Esta é a mesma observação de P A ≠ NP A : prova que existem problemas em NP , que qualquer algoritmo determinístico eficiente exigiria pelo menos informações estruturais reais para poder resolver - de modo que, quando você fornece uma descrição de uma função eficientemente computável em vez de um 'oráculo', é possível que o problema estejaP. ) Isso significa que o algoritmo quântico pode não ter a mesma vantagem sobre os algoritmos clássicos na solução do problema específico que você apresenta - e, de fato, pode ser que a abordagem clássica seja melhor (principalmente com os dispositivos que temos no momento).
No final, apenas porque você tem um algoritmo quântico para resolver algo, não significa que seja necessariamente a melhor maneira de resolver algo. Isso certamente se aplica ao algoritmo Deutsch – Josza: mesmo no cenário do oráculo, o uso da aleatoriedade é quase tão bom quanto é melhor, já que ainda não temos grandes computadores quânticos confiáveis! Mas, novamente ...
"Implementando" um oráculo
O objetivo de implementar o algoritmo Deutsch – Josza é o mesmo que implementar " Olá, Mundo! " - não para resolver um problema premente não resolvido, mas para praticar o uso de uma ferramenta que você espera que seja útil para fazer outras coisas.
Para praticar a codificação, você deve se sentir absolutamente relaxado e confortável com a idéia de implementar um oráculo e com a idéia do computador que está avaliando o oráculo. Em princípio, este é o ponto do que você deseja fazer. Mesmo se você estiver usando um emulador clássico, no qual o computador clássico está realmente avaliando todos os ramos da superposição e encontrando explicitamente a resposta para um problema, a fim de fingir que é um computador quântico agindo de maneira um pouco mais indireta, então esteja praticando como usar uma ferramenta que pode ser útil para outras coisas e que um dia não será executada em um computador clássico.
Então, como você deve implementar seu oráculo?
(i) Se você está realmente comprometido com a ideia de que está apenas praticando, não precisa fingir que está fazendo algo mágico. Crie qualquer maneira de implementar a função oracle, mesmo que seja óbvio para o observador casual se o resultado é constante ou equilibrado. Você está apenas tentando praticar a realização de um algoritmo - não se preocupe que alguém o acuse de ser um impostor, que você esteja fingindo curar o câncer, mas que esteja brincando com o Lego. Você nunca foram fingindo para curar o câncer, e você está jogando com Lego por escolha deliberada. Aceite isso e apenas faça-o.
f( x ) = g( x , r )rg( x , r )xr, e onde não é óbvio como resolvê-lo classicamente, não é trivial.
g( x , r ) = x ⋅ rx , r ∈ { 0 , 1 }ng( x , r )f( X )f( X )r ≠ 0
É concebível que a construção acima possa ser elaborada / ofuscada de algum modo, para obter uma construção que garanta a avaliação de uma função constante ou uma função equilibrada, e onde qual dessas duas ocorre não é óbvia ou até difícil - mas eu posso ' Não pense em como, no momento.
Lembre-se de que isso é realmente muito difícil de fazer - mas se você puder ver uma maneira de fazer isso, pode valer a pena: Bravyi, Gossett e Koening fizeram algo assim para o problema de Bernstein – Vazirani e permitiu que eles mostrar uma separação pequena, mas incondicional, entre a complexidade quântica e a clássica, que foi uma das coisas mais interessantes que ocorreram na complexidade quântica nos últimos anos.
TL; DR
Não se preocupe com o fato de que você está 'avaliando' um oráculo.
Se você se preocupa com alguma coisa, preocupe-se apenas com o fato de que uma descrição real da função permita resolver o mesmo problema facilmente sem um computador quântico.
Se sua motivação é apenas praticar a programação quântica, nem se preocupe. Salve sua preocupação com problemas mais importantes, como o aquecimento global. Enquanto isso, divirta-se brincando com Legos enquanto você constrói algo mais.