Creo que esa ahelwer
respuesta toca algunas de las formas en que pensamos sobre la complejidad de los algoritmos. Sin embargo, dado que no tenemos literalmente "oráculos" en el mundo real que deseamos consultar, es posible que se pregunte por qué deberíamos preocuparnos por la complejidad de la consulta o la idea de los oráculos. Trataré de dar un poco de perspectiva sobre esto, y en particular para describir cómo podrías tratar de pensar en formas de construir un "oráculo Deutsch-Josza" de una manera que no sientas que estás haciendo trampa.
(Como se Norbert Schuch
señala, para el problema de Deutsch, que es el caso elemental de Deutsch-Josza, no hay mucho margen para las percepciones, pero espero que su pregunta sobre los oráculos también se aplique de manera más general. Eso es de lo que hablaré aquí).
Una intuición sobre los oráculos
El concepto de un oráculo es una forma de permitirnos simplificar la forma en que hablamos de problemas computacionales.
La aplicación original del concepto de un oráculo era considerar hipotéticamente lo que podríamos hacer si pudiéramos resolver problemas difíciles, incluso problemas imposibles, sin comprometernos a cómo podríamos hacerlo, incluso en principio. Pero en la complejidad computacional en estos días, particularmente en la computación cuántica, por ejemplo , en los casos de Deutsch – Josza, Bernstein – Vazirani y otros problemas del oráculo, la situación es diferente: el oráculo describe una función que es la base del problema. El hecho de que sea 'un oráculo' es una forma de estructurar cómo describimos la función que está en el centro del problema: no es que nunca debamos contemplar cómo se calcula la función, sino que esta información simplemente no se proporciona como parte del problema, y que no nos preocupa el tiempo u otra complejidad asociada con esa función.
Cuando adoptamos este enfoque, en realidad podemos obtener respuestas relacionadas con preguntas muy difíciles en la computación. Por ejemplo, es posible saber que no sabemos cómo probar cualquiera P ≠ NP o P = NP , pero que nos puede mostrar que hay oráculos A tales que se puede demostrar que P A ≠ NP A . Lo que hace el oráculo A aquí no es ayudar a una computadora (más precisamente, una máquina de Turing determinista o una máquina de Turing no determinista) para resolver un problema: representa el problema que la computadora debe resolver. El hecho de que podemos mostrar en algunos casos que P A ≠ NP A , no significa que P sea realmente diferente de NP : solo significa que solo usar el no determinismo es realmente un recurso significativo para tener un modelo de computación: le permite resolver algunos problemas de manera eficiente, y no hay manera genéricamente para simular el no determinismo de manera eficiente en una computadora determinista. Así que si se quiere resolver el problema relacionado con lo que A computa, a pesar de todo se requeriría alguna información acerca de la estructura de cualquier función que podría eficiente de cómputo A .
Esta es una de las principales cosas de las que se tratan los oráculos: le permiten hablar sobre las formas en que los modelos de cómputo pueden o no resolver problemas, cuando se le proporciona información limitada sobre el problema.
Uso de algoritmos de oráculo para resolver problemas que no son de oráculo
El algoritmo Deutsch-Josza, o el algoritmo Bernstein-Vazirani, en principio no son algoritmos que uno realiza por sí mismo. (Bueno, en realidad no ; vea la siguiente sección). Representan formas en que puede resolver un problema . ¿Qué problemas resuelven? Le permiten descubrir ciertas características de una función que le interesa, ya sea constante / equilibrada, o qué vector está asociado en alguna función lineal con valores escalares en los vectores.
¿En qué funciones las realiza? - Los realiza en cualquier función para la que esté interesado en la respuesta.
La descripción de estos como algoritmos basados en Oracle no viene al caso. Los problemas de Oracle básicamente le permiten saber que, con una computadora cuántica ideal, puede resolver el problema incluso si sabe muy poco acerca de la función , siempre que realmente pueda evaluar la función de manera eficiente en la práctica. Para evaluar realmente dicha función, por supuesto, necesitará una descripción de cómo hacerlo y, por lo tanto, tendrá más información que en la configuración de Oracle; pero eso no le impide usar el mismo algoritmo.
Lo que sucede cuando tiene más información que en la configuración de Oracle, es que de repente hay otras formas en que puede resolver el problema. Específicamente, podría ser posible resolver el problema eficientemente de manera clásica . (Esta es la misma observación que con P A ≠ NP A : demuestra que hay problemas que están en NP , que cualquier algoritmo determinista eficiente requeriría al menos información estructural real para poder resolver, de modo que cuando proporcione una descripción de una función computable eficientemente en lugar de un 'oráculo', es posible que el problema esté enP. ) Significa que el algoritmo cuántico podría no tener la misma ventaja sobre los algoritmos clásicos para resolver el problema particular que presenta, y de hecho puede ser que el enfoque clásico sea mejor (particularmente con los dispositivos que tenemos en este momento).
Al final, solo porque tenga un algoritmo cuántico para resolver algo, no significa que sea necesariamente la mejor manera de resolver algo. Esto es cierto para el algoritmo Deutsch-Josza: incluso en la configuración de oráculo, el uso de la aleatoriedad es casi igual de bueno, ¡y es mucho mejor dado que todavía no tenemos computadoras cuánticas grandes y confiables! Pero entonces de nuevo...
"Implementando" un oráculo
El propósito de implementar el algoritmo Deutsch-Josza es el mismo que implementar " ¡Hola, mundo! ", No para resolver un problema urgente sin resolver, sino para practicar el uso de una herramienta que usted espera que sea útil para hacer otras cosas.
Para practicar la codificación, debe sentirse absolutamente relajado y cómodo con la idea de implementar un oráculo y con la idea de que la computadora evalúe el oráculo. En principio, este es el punto de lo que quieres hacer. Incluso si está utilizando un emulador clásico, en el que la computadora clásica está evaluando todas las ramas de la superposición y de manera explícita encuentra la respuesta a un problema para pretender que es una computadora cuántica que actúa de una manera ligeramente más indirecta, entonces ya sea, estás practicando cómo usar una herramienta que puede ser útil para otras cosas y que algún día no se ejecutará en una computadora clásica.
Entonces, ¿cómo debes implementar tu oráculo?
(i) Si estás realmente comprometido con la idea de que solo estás practicando, no tienes que fingir que estás haciendo algo mágico. Encuentre cualquier forma de implementar la función oráculo, incluso si es obvio para el observador casual si el resultado es constante o equilibrado. Solo está tratando de practicar la realización de un algoritmo; no se preocupe de que alguien lo acusará de ser un impostor, de que finge curar el cáncer pero que en realidad está jugando con Lego. Nunca estaba fingiendo para curar el cáncer, y que está jugando con Lego por elección deliberada. Acepta eso y solo hazlo.
f(x)=g(x,r)rg(x,r)xr, y donde no es obvio cómo resolverlo de manera clásica, no es trivial.
g(x,r)=x⋅rx,r∈{0,1}ng(x,r)f(x)f(x)r≠0
Es concebible que la construcción anterior pueda elaborarse / ofuscarse de alguna manera, para obtener una construcción que garantice la evaluación de una función constante o una función equilibrada, y donde cuál de estos dos ocurre no es obvio o incluso difícil, pero puedo ' No pienses cómo, por el momento.
Tenga en cuenta que esto en realidad puede ser muy difícil de hacer, pero si puede ver una forma de hacerlo, podría valer la pena: Bravyi, Gossett y Koening hicieron algo así por el problema de Bernstein-Vazirani, y les permitió para mostrar una separación pequeña pero incondicional entre la complejidad cuántica y la clásica, que fue una de las cosas más interesantes que ocurrieron en la complejidad cuántica en los últimos años.
TL; DR
No se preocupe por el hecho de que está "evaluando" un oráculo.
Si sudas por algo, solo preocúpate de que una descripción real de la función pueda hacer posible resolver el mismo problema fácilmente sin una computadora cuántica.
Si su motivación es solo practicar con la programación cuántica, ni siquiera se preocupe por eso. Ahorre su preocupación por problemas más valiosos, como el calentamiento global. Mientras tanto, disfruta jugando con Legos mientras desarrollas algo más.