In meinem Lehrbuch heißt es: "Wir definieren die Funktion wie folgt: und . Beachten Sie, dass wir bei gegebener leicht in Zeit die Zahl so dass zwischen und . "
Wie kann ich mich davon überzeugen, dass wir tatsächlich in Zeit leicht finden können? Da rekursiv definiert ist, müssen wir meiner Meinung nach bis berechnen . Um herauszufinden, wie lange diese Berechnungen dauern, müssen wir meiner Meinung nach eine geeignete Obergrenze für von abhängt, und wir müssen eine Obergrenze für die Ausführungszeit der Funktion . Am Ende können wir hoffentlich den zitierten Satz zeigen. Leider sehe ich weder das eine noch das andere.
Ich habe vergessen zu erwähnen: Bitte beachten Sie, dass wir uns in einem nicht deterministischen Kontext befinden. Es wird also behauptet, dass in von einer nichtdeterministischen Turing-Maschine berechenbar ist .
Da einige Leute diese Frage bereits gelesen haben und einige sie auch nützlich und interessant finden, aber bisher niemand geantwortet hat, möchte ich weitere Informationen zum Kontext geben: Die zitierte Behauptung ist ein wesentlicher Bestandteil des Beweises von das nichtdeterministische Theorem der Zeithierarchie. Der Beweis (mit der Behauptung) kann zB in dem Buch von Arora und Barak gefunden werden , aber ich habe auch einige andere Ressourcen im Web gefunden, die den gleichen Beweis präsentieren. Jeder von ihnen nennt die Behauptung einfach oder trivial und geht nicht näher darauf ein, wie man in Zeit findet. Entweder sind all diese Ressourcen nur von Arora und Barak kopiert, oder die Behauptung ist in der Tat nicht so schwierig.
quelle
Antworten:
Mitdie Länge einer Zahl , dh (für ). Das Berechnen von erfordert die Zeit im RAM-Modell, und daher benötigt das Berechnen von aus die Zeit . Da wächst schneller als geometrisch, die Gesamtzeit zu berechnen ist . Wie Sie hervorheben, müssen Sie dies tun, bis , was bedeutet, dass . Daher beträgt die Gesamtlaufzeitx ≤ log 2 x ≤ + 1 x > 0 2 x O ( x ) f ( i + 1 ) f ( i ) O ( f ( i ) 1,2 ) = O ( | f ( i + 1 ) | ) f ( i ) f ( i + 1 ) O.|x| x ⌊log2x⌋+1 x>0 2x O(x) f(i+1) f(i) O(f(i)1.2)=O(|f(i+1)|) f(i) f(i+1) f ( i + 1 ) ≥ n f ( i ) < n O ( | f ( i + 1 ) | ) = O ( f ( i ) 1,2 ) = O ( n 1,2 )O(|f(i+1)|) f(i+1)≥n f(i)<n O(|f(i+1)|)=O(f(i)1.2)=O(n1.2) .
Im Turing-Maschinenmodell mit einem einzelnen Band benötigt die Berechnung von die Zeit , und daher beträgt die Gesamtlaufzeit . Der Algorithmus zur Berechnung von ersetzt durch (hier ist die binäre Darstellung von und die binäre Darstellung unter Verwendung verschiedener Ziffern O ( x log x ) O ( n 1,2 log n ) = O ( n 1,5 ) 2 x [ x ] 1 [ [ x ] ] [ x ] x [ [ x ] ] 0 ' , 1 '2x O(xlogx) O(n1.2logn)=O(n1.5) 2x [x] 1[[x]] [x] x [[x]] 0′,1′ [[x]]⟶0[[x−1]] O(|x|)=O(logx)
quelle