Je pense que cette ahelwer
réponse touche à certaines façons dont nous pensons à la complexité des algorithmes. Cependant - étant donné que nous n'avons pas littéralement d '"oracles" dans le monde réel que nous souhaitons interroger, vous vous demandez peut-être pourquoi nous nous soucions de la complexité des requêtes ou de l'idée d'oracles. J'essaierai de donner une certaine perspective à ce sujet, et en particulier de décrire comment vous pourriez essayer de penser à des façons de construire un "oracle Deutsch-Josza" d'une manière que vous n'avez pas l'impression de tricher.
(Comme le fait Norbert Schuch
remarquer, pour le problème Deutsch qui est le cas élémentaire de Deutsch – Josza, il n'y a pas beaucoup de place pour des idées, mais je m'attends à ce que votre question sur les oracles s'applique également de manière plus générale. C'est de cela que je parlerai ici.)
Une intuition sur les oracles
Le concept d'oracle est un moyen de nous permettre de simplifier la façon dont nous parlons des problèmes de calcul.
L'application originale du concept d'oracle était de considérer hypothétiquement ce que nous pourrions faire si nous pouvions résoudre des problèmes difficiles, voire des problèmes impossibles, sans nous engager sur la façon de le faire, même en principe. Mais dans la complexité informatique de nos jours - en particulier dans le calcul quantique, par exemple dans les cas de Deutsch – Josza, Bernstein – Vazirani et d'autres problèmes d'oracle - la situation est différente: l'oracle décrit une fonction qui est la base du problème. Le fait qu'il s'agisse d'un «oracle» est un moyen de structurer la façon dont nous décrivons la fonction qui est au centre du problème: non pas que nous ne devons jamais envisager comment la fonction est calculée, mais que cette information n'est tout simplement pas fournie dans le cadre du problème, et que nous ne sommes pas concernés par le temps ou toute autre complexité associée à cette fonction.
Lorsque nous adoptons cette approche, nous pouvons réellement obtenir des réponses liées à des questions très difficiles en calcul. Par exemple, vous savez peut - être que nous ne savons pas comment prouver soit P ≠ NP ou P = NP , mais que nous peut montrer qu'il ya Oracles A ce que nous pouvons montrer que P A ≠ NP A . L'oracle A n'aide pas ici un ordinateur (plus précisément une machine de Turing déterministe ou une machine de Turing non déterministe) à résoudre un problème - il représente le problème que l'ordinateur doit résoudre. Le fait que nous pouvons montrer dans certains cas que P A ≠ NP A , ne signifie pas que P est vraiment différent de NP : cela signifie simplement que l'utilisation du non-déterminisme est vraiment une ressource importante pour un modèle de calcul - il vous permet de résoudre certains problèmes efficacement, et il n'y a aucun moyen génériquement pour simuler efficacement le non-déterminisme sur un ordinateur déterministe. Donc, si vous voulez résoudre le problème lié à ce que A calcule, vous aurez absolument besoin d'informations sur la structure de toute fonction qui pourrait calculer A efficacement .
C'est l'un des principaux objectifs des oracles: ils vous permettent de parler des façons dont les modèles de calcul peuvent ou ne peuvent pas résoudre les problèmes, lorsque vous disposez d'informations limitées sur le problème.
Utilisation d'algorithmes Oracle pour résoudre des problèmes non oracle
L'algorithme de Deutsch – Josza, ou l'algorithme de Bernstein – Vazirani, ne sont en principe pas des algorithmes que l'on exécute pour eux-mêmes. (Eh bien, pas vraiment - voir la section suivante.) Ils représentent des moyens de résoudre un problème . Quels problèmes résolvent-ils? Ils vous permettent de découvrir certaines caractéristiques d'une fonction qui vous intéresse - si elle est constante / équilibrée, ou quel vecteur est associé dans une fonction linéaire à valeur scalaire sur des vecteurs.
Sur quelles fonctions les exécutez-vous? - Vous les exécutez sur n'importe quelle fonction pour laquelle vous êtes intéressé par la réponse.
La description de ces algorithmes basés sur Oracle n'est pas pertinente. Les problèmes oracle vous permettent essentiellement de savoir qu'avec un ordinateur quantique idéal, vous pouvez résoudre le problème même si vous en savez très peu sur la fonction , à condition que vous puissiez réellement évaluer la fonction efficacement dans la pratique. Pour évaluer réellement une telle fonction, bien sûr, vous aurez besoin d'une description de la façon de le faire, et donc vous avez plus d' informations que dans le paramètre oracle; mais cela ne vous empêche pas d'utiliser le même algorithme.
Ce qui se passe lorsque vous avez plus d' informations que dans le cadre d'Oracle, c'est que soudainement, il existe d' autres moyens de résoudre le problème. Plus précisément, il pourrait devenir possible de résoudre le problème de manière efficace de manière classique . (C'est la même observation qu'avec P A ≠ NP A : cela prouve qu'il y a des problèmes qui sont dans NP , que tout algorithme déterministe efficace nécessiterait au moins des informations structurelles réelles pour être en mesure de résoudre - de sorte que lorsque vous fournissez une description d'une fonction efficacement calculable plutôt que d'un «oracle», il est possible que le problème soitP. ) Cela signifie que l'algorithme quantique pourrait ne pas avoir le même avantage que les algorithmes classiques pour résoudre le problème particulier que vous présentez - et en fait il se peut que l'approche classique soit meilleure (en particulier avec les appareils que nous avons en ce moment).
En fin de compte, ce n'est pas parce que vous avez un algorithme quantique pour résoudre quelque chose que c'est nécessairement la meilleure façon de résoudre quelque chose. Cela est certainement vrai de l'algorithme Deutsch – Josza: même dans le contexte oracle, l'utilisation de l'aléatoire est presque aussi bonne, et c'est beaucoup mieux étant donné que nous n'avons pas encore de gros ordinateurs quantiques fiables! Mais encore une fois...
"Implémenter" un oracle
Le but de l'implémentation de l'algorithme Deutsch – Josza est le même que l'implémentation de « Hello, World! » - non pas pour résoudre un problème pressant non résolu, mais pour s'exercer à utiliser un outil qui, selon vous, sera utile pour faire d'autres choses.
Pour pratiquer le codage, vous devez vous sentir absolument détendu et à l'aise avec l' idée de mettre en œuvre un oracle, et avec l'idée que l'ordinateur évalue l'oracle. En principe, c'est le but de ce que vous voulez faire. Même si vous utilisez un émulateur classique, dans lequel l'ordinateur classique évalue réellement toutes les branches de la superposition et trouve ainsi explicitement la réponse à un problème afin de prétendre qu'il s'agit d'un ordinateur quantique agissant de manière légèrement plus détournée, donc que ce soit - vous vous entraînez à utiliser un outil qui peut être utile pour d'autres choses, et qui un jour ne sera pas exécuté sur un ordinateur classique.
Alors, comment devez-vous procéder pour implémenter votre oracle?
(i) Si vous êtes vraiment attaché à l'idée que vous venez de vous entraîner, vous n'avez pas à prétendre que vous faites quelque chose de magique. Trouvez n'importe quel moyen pour implémenter la fonction oracle, même s'il est évident pour l'observateur occasionnel que le résultat soit constant ou équilibré. Vous essayez juste de pratiquer la réalisation d'un algorithme - ne vous inquiétez pas que quelqu'un vous accusera d'être un imposteur, que vous prétendez guérir le cancer mais que vous jouez avec Lego. Vous n'étiez feignant de guérir le cancer, et vous êtes jouer avec Lego par choix délibéré. Embrassez cela et faites-le.
F( x ) = g( x , r )rg( x , r )Xr, et où il n'est pas évident de savoir comment le résoudre de manière classique, n'est pas trivial.
g( x , r ) = x ⋅ rx , r ∈ { 0 , 1 }ng( x , r )F( x )F( x )r ≠ 0
Il est concevable que la construction ci-dessus puisse être élaborée / obscurcie quelque peu, pour obtenir une construction qui est garantie d'évaluer soit une fonction constante soit une fonction équilibrée, et où lequel de ces deux se produit n'est pas évident ni même difficile - mais je peux '' t pense à comment, en ce moment.
Gardez à l'esprit que cela est en fait très difficile à faire - mais si vous pouvez voir un moyen de le faire, cela pourrait être très utile: Bravyi, Gossett et Koening ont fait quelque chose comme ça pour le problème Bernstein – Vazirani, et cela leur a permis pour montrer une séparation petite mais inconditionnelle entre la complexité quantique et classique, qui était l'une des choses les plus intéressantes à se produire dans la complexité quantique au cours des dernières années.
TL; DR
Ne vous inquiétez pas du fait que vous «évaluez» un oracle.
Si vous transpirez, craignez seulement qu'une description réelle de la fonction permette de résoudre facilement le même problème sans ordinateur quantique.
Si votre motivation est uniquement de vous entraîner avec la programmation quantique, ne vous inquiétez même pas. Enregistrez votre inquiétude pour des problèmes plus importants, comme le réchauffement climatique. En attendant, profitez de jouer avec Legos pendant que vous construisez quelque chose de plus.