Warum ist diese Funktion in

10

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 . "f:NNf(1)=2f(i+1)=2f(i)1.2nO(n1.5)inf(i)f(i+1)

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.iO(n1.5)ff(1),f(2),f(3)f(j)f(j)ninx2x1.2

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 .fO(n1.5)


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.iO(n1.5)

user1494080
quelle
1
Dies sieht aus wie der Beweis des nichtdeterministischen Zeithierarchiesatzes in Arora & Barak, oder? Wenn ja, gehe ich davon aus, dass hier der Nichtdeterminismus eine Rolle spielt.
G. Bach
Du hast recht. Entschuldigung, ich hätte den nichtdeterministischen Kontext erwähnen sollen. Können Sie bitte genauer erklären, wie uns der Nichtdeterminismus dort hilft, die O (n ^ 1.5) -Bindung zu zeigen?
user1494080

Antworten:

4

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|xlog2x+1x>02xO(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)nf(i)<nO(|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 '2xO(xlogx)O(n1.2logn)=O(n1.5)2x[x]1[[x]][x]x[[x]]0,1[[x]]0[[x1]]O(|x|)=O(logx)

Yuval Filmus
quelle
Perfekt danke! Noch eine Frage: Müssen wir nicht argumentieren, dass | f (i) | wächst schneller als geometrisch anstatt dass f (i) schneller wächst als geometrisch?
user1494080
|f(i+1)|=f(i)1.2ji|f(j)|=O(|f(i)|)