Ich denke, diese ahelwer
Antwort berührt einige der Arten, wie wir über die Komplexität von Algorithmen denken. Angesichts der Tatsache, dass wir in der realen Welt buchstäblich keine "Orakel" haben, die wir abfragen möchten, fragen Sie sich vielleicht, warum wir uns über die Komplexität der Abfragen oder die Idee von Orakeln überhaupt Gedanken machen würden. Ich werde versuchen, eine Perspektive zu geben und insbesondere zu beschreiben, wie Sie versuchen könnten, Wege zu finden, um ein "Deutsch-Josza-Orakel" so zu konstruieren, dass Sie nicht das Gefühl haben, zu betrügen.
(Wie bereits erwähnt Norbert Schuch
, gibt es für das Deutsch-Problem, das der elementare Fall von Deutsch-Josza ist, nicht viel Raum für Einsichten, aber ich gehe davon aus, dass Ihre Frage zu Orakeln auch allgemeiner gilt. Darauf werde ich hier eingehen.)
Eine Intuition über Orakel
Das Konzept eines Orakels ist eine Möglichkeit, die Art und Weise, wie wir über Rechenprobleme sprechen, zu vereinfachen.
Die ursprüngliche Anwendung des Orakelkonzepts bestand darin, hypothetisch zu überlegen, was wir tun könnten, wenn wir schwierige oder sogar unmögliche Probleme lösen könnten, ohne uns dazu zu verpflichten, wie wir es auch im Prinzip tun könnten. In Bezug auf die Komplexität der Berechnungen heutzutage - insbesondere bei der Quantenberechnung, z. B. bei Deutsch-Josza, Bernstein-Vazirani und anderen Orakelproblemen - ist die Situation anders: Das Orakel beschreibt eine Funktion, die die Grundlage des Problems bildet. Die Tatsache, dass es sich um ein Orakel handelt, ist eine Möglichkeit zu strukturieren, wie wir die Funktion beschreiben, die im Zentrum des Problems steht: Nicht, dass wir niemals darüber nachdenken dürfen, wie die Funktion berechnet wird, sondern dass diese Informationen einfach nicht als Teil bereitgestellt werden des Problems, und dass wir uns nicht mit der Zeit oder anderen Komplexität befassen, die mit dieser Funktion verbunden sind.
Wenn wir diesen Ansatz wählen, können wir tatsächlich Antworten erhalten, die sich auf sehr schwierige Fragen bei der Berechnung beziehen. Zum Beispiel wissen Sie vielleicht, dass wir weder P ≠ NP noch P = NP beweisen können , aber dass wir zeigen können , dass es Orakel A gibt, so dass wir zeigen können, dass P A ≠ NP A ist . Was das Orakel A hier tut, ist nicht, einem Computer (genauer gesagt einer deterministischen Turing-Maschine oder einer nichtdeterministischen Turing-Maschine) zu helfen, ein Problem zu lösen - es stellt das Problem dar, das der Computer lösen muss. Die Tatsache , dass wir in einigen Fällen nachweisen können , dass P A ≠ NP A bedeutet nicht, dass P sich wirklich von NP unterscheidet : Es bedeutet nur, dass die Verwendung von Nichtdeterminismus eine wichtige Ressource für ein Rechenmodell ist - es ermöglicht Ihnen, einige Probleme effizient zu lösen, und es gibt keine Möglichkeit generisch, um Nichtdeterminismus auf einem deterministischen Computer effizient zu simulieren. Wenn Sie also das Problem im Zusammenhang mit der Berechnung von A lösen möchten, benötigen Sie unbedingt einige Informationen über die Struktur einer Funktion, die A effizient berechnen kann .
Dies ist eines der wichtigsten Dinge, um die es bei Orakeln geht: Sie ermöglichen es Ihnen, darüber zu sprechen, wie Rechenmodelle Probleme lösen können oder nicht , wenn Sie nur begrenzte Informationen über das Problem erhalten.
Verwenden von Orakelalgorithmen zur Lösung von Nicht-Orakel-Problemen
Der Deutsch-Josza-Algorithmus oder der Bernstein-Vazirani-Algorithmus sind im Prinzip keine Algorithmen, die man für sich selbst ausführt. (Nun, nicht wirklich - siehe nächster Abschnitt.) Sie stehen für Möglichkeiten, wie Sie ein Problem lösen können . Welche Probleme lösen sie? Mit ihnen können Sie bestimmte Merkmale einer Funktion entdecken, an der Sie interessiert sind - ob sie konstant / ausgeglichen ist oder welcher Vektor in einer linearen Funktion mit Skalarwert für Vektoren zugeordnet ist.
Auf welchen Funktionen führen Sie sie aus? - Sie führen sie für jede Funktion aus, für die Sie an der Antwort interessiert sind.
Die Beschreibung dieser als orakelbasierte Algorithmen ist nebensächlich. Die Orakelprobleme ermöglichen es Ihnen grundsätzlich zu wissen, dass Sie mit einem idealen Quantencomputer das Problem lösen können, selbst wenn Sie nur sehr wenig über die Funktion wissen , vorausgesetzt, Sie können die Funktion in der Praxis tatsächlich effizient bewerten. Um eine solche Funktion tatsächlich bewerten zu können, benötigen Sie natürlich eine Beschreibung, wie dies zu tun ist, und Sie haben mehr Informationen als in der Orakeleinstellung. Das hindert Sie jedoch nicht daran, denselben Algorithmus zu verwenden.
Was passiert, wenn Sie mehr Informationen als in der Orakeleinstellung haben, ist, dass es plötzlich andere Möglichkeiten gibt , das Problem zu lösen. Insbesondere könnte es möglich werden, das Problem klassisch effizient zu lösen . (Dies ist die gleiche Beobachtung wie bei P A ≠ NP A : Es beweist, dass es Probleme in NP gibt , für deren Lösung jeder effiziente deterministische Algorithmus zumindest tatsächliche Strukturinformationen erfordern würde - also, wenn Sie eine Beschreibung bereitstellen Es ist möglich, dass das Problem bei einer effizient berechenbaren Funktion und nicht bei einem „Orakel“ liegtP. ) Dies bedeutet, dass der Quantenalgorithmus möglicherweise nicht den gleichen Vorteil gegenüber klassischen Algorithmen bei der Lösung des von Ihnen gestellten Problems hat - und tatsächlich kann es sein, dass der klassische Ansatz besser ist (insbesondere bei den Geräten, die wir derzeit haben).
Nur weil Sie einen Quantenalgorithmus haben, um etwas zu lösen, heißt das nicht, dass dies unbedingt der beste Weg ist, etwas zu lösen. Dies gilt sicherlich für den Deutsch-Josza-Algorithmus: Selbst in der Orakeleinstellung ist die Verwendung von Zufälligkeit fast genauso gut, und es ist viel besser, da wir noch keine großen zuverlässigen Quantencomputer haben! Aber dann wieder...
Ein Orakel "implementieren"
Der Zweck der Implementierung des Deutsch-Josza-Algorithmus ist der gleiche wie die Implementierung von " Hallo Welt! " - nicht um ein dringendes ungelöstes Problem zu lösen, sondern um die Verwendung eines Tools zu üben, von dem Sie erwarten, dass es für andere Dinge nützlich ist.
Um das Codieren zu üben, sollten Sie sich absolut entspannt und wohl fühlen mit der Idee , ein Orakel zu implementieren, und mit der Idee, dass der Computer das Orakel bewertet . Im Prinzip ist dies der Punkt, an dem Sie arbeiten möchten. Selbst wenn Sie einen klassischen Emulator verwenden, bei dem der klassische Computer tatsächlich alle Zweige der Überlagerung auswertet und so explizit die Antwort auf ein Problem findet, um so zu tun, als wäre es ein Quantencomputer, der etwas umständlicher agiert sei es - Sie üben, wie man ein Werkzeug verwendet, das für andere Dinge nützlich sein kann und das eines Tages nicht auf einem klassischen Computer ausgeführt wird.
Wie sollten Sie Ihr Orakel implementieren?
(i) Wenn Sie sich wirklich der Idee verschrieben haben, dass Sie gerade erst üben, müssen Sie nicht so tun, als würden Sie etwas Magisches tun. Überlegen Sie sich einfach eine Möglichkeit, die Orakelfunktion zu implementieren, auch wenn es für den zufälligen Beobachter offensichtlich ist, ob das Ergebnis konstant oder ausgeglichen ist. Sie versuchen nur, die Realisierung eines Algorithmus zu üben - machen Sie sich keine Sorgen, dass jemand Sie beschuldigt, ein Betrüger zu sein, dass Sie so tun, als würden Sie Krebs heilen, aber tatsächlich mit Lego spielen. Man kann nie wurde so zu tun , Krebs zu heilen, und Sie werden mit Lego durch bewusste Wahl zu spielen. Umfassen Sie das und tun Sie es einfach.
f(x)=g(x,r)rg(x,r)xrund wo es nicht offensichtlich ist, wie man es klassisch löst, ist nicht trivial.
g(x,r)=x⋅rx,r∈{0,1}ng(x,r)f(x)f(x)r≠0
Es ist denkbar, dass die obige Konstruktion etwas ausgearbeitet / verschleiert werden könnte, um eine Konstruktion zu erhalten, die garantiert entweder eine konstante Funktion oder eine ausgeglichene Funktion bewertet, und wo welche dieser beiden auftritt, ist nicht offensichtlich oder sogar schwierig - aber ich kann ' Ich denke im Moment nicht daran, wie.
Denken Sie daran, dass dies tatsächlich sehr schwierig ist - aber wenn Sie einen Weg finden, dies zu tun, könnte es sich sehr lohnen: Bravyi, Gossett und Koening haben so etwas für das Bernstein-Vazirani-Problem getan, und es hat ihnen erlaubt eine kleine, aber bedingungslose Trennung zwischen Quanten- und klassischer Komplexität zu zeigen, was eines der interessantesten Ereignisse in der Quantenkomplexität in den letzten Jahren war.
TL; DR
Schwitzen Sie nicht über die Tatsache, dass Sie ein Orakel "bewerten".
Wenn Sie über irgendetwas schwitzen, machen Sie sich nur Sorgen, dass eine tatsächliche Beschreibung der Funktion es möglich machen könnte, dasselbe Problem ohne einen Quantencomputer leicht zu lösen.
Wenn Ihre Motivation nur darin besteht, sich mit Quantenprogrammierung zu üben, machen Sie sich darüber keine Sorgen. Speichern Sie Ihre Sorgen für würdigere Probleme wie die globale Erwärmung. In der Zwischenzeit genießen Sie es, mit Legos zu spielen, während Sie an etwas mehr bauen.