EDIT: Das Argument, mit dem ich geantwortet hatte, war nicht falsch, aber es war ein bisschen irreführend, da es nur zeigte, dass die Obergrenze für einige eng sein musste (was eigentlich trivial ist, da es eng sein muss, wenn n = 2 und die Grenze ist 1).nn=2
Hier ist ein genaueres Argument. Es zeigt, dass, wenn die Obergrenze von
für ein bestimmtes n locker ist , für alle n die Anzahl der erforderlichen Orakelaufrufe O ( 1 ) ist .log2nn nO(1)
(Sicher ist es nicht , also ist die Obergrenze nie locker! Aber ich beweise das hier nicht wirklich, und angesichts der anderen Antwort auf das Problem scheint es nicht wert zu sein, es zu verfolgen.)O(1)
Betrachten Sie das Problem der Berechnung der maximalen Leistung :
Berechnen Sie bei einem Tupel ( M 1 , … , M n ) von Turing-Maschinen die maximale Leistung (der Turing-Maschinen, die anhalten, wenn sie auf ϵ ausgeführt werden ). Wenn keiner von ihnen anhält, geben Sie 0 zurück.n(M1,…,Mn)ϵ
In Abhängigkeit von die zur Berechnung dieser Funktion erforderliche Worst-Case-Anzahl von Orakelaufrufen der Anzahl, die erforderlich ist, um zu entscheiden, welche von n bestimmten Maschinen anhalten. (Wenn ich weiß, welche Maschinen anhalten, kann ich leicht die maximale Ausgabe berechnen. Wenn ich umgekehrt wissen möchte, welche Maschinen anhalten, kann ich gemäß der Konstruktion in der Problemstellung Maschinen { M ′ i } ( i = 1 , 2) erstellen , … , N )
wobei M ' i alle n gegebenen Maschinen parallel laufen lässt , dann anhält und i ausgibtnn{M′i} (i=1,2,…,n)M′iniwenn von ihnen jemals aufhöre. Die maximale Ausgabe gibt mir die Nummer an, die anhält. Daraus kann ich genau berechnen, welcher Halt.)i
Nun sei die kleinste ganze Zahl n (falls vorhanden), so dass Folgendes gilt:n0n
Mit Orakelaufrufen kann man die maximale Leistung von n gegebenen Maschinen berechnen . (Das heißt, die Obergrenze ist für n nicht eng .)C(n)=max{k∈Z:2k<n}nn
Klar , weil C ( 1 ) = - 1 . Tatsächlich ist n 0 > 2 auch, weil C ( 2 ) = 0 ist , aber es ist unentscheidbar, die maximale Ausgabe von 2 gegebenen Maschinen (ohne Orakelaufrufe) zu berechnen . Betrachten Sie nun ein größeres n :n0>1C(1)=−1n0>2C(2)=02n
Behauptung: Wenn endlich ist, kann man für jedes n die maximale Ausgabe von n gegebenen Maschinen in C ( n 0 ) Orakelaufrufen berechnen . n0nnC(n0)(Beachten Sie, dass wenn endlich ist, C ( n 0 ) = O ( 1 ) ist .)n0C(n0)=O(1)
Beweis. . Wir beweisen es durch Induktion auf . Die Basisfälle sind n ≤ n 0 , die per Definition von n 0 und C gelten .nn≤n0n0C
Q0n0C(n0)
n>n0nM1,…,Mn
M1,…,Mn0Q0n0Q0C(n0)n′=2C(n0)n′=2C(n0)<n0oiii=1,…,n′M′iQ0
M′iϵ
- Q0n0(M1,…,Mn0)oi
- oi
- hiQ0
- n0(M1,…,Mn0)hihi
nn0M1,…,Mn0n′<n0M′1,…,M′n′n−(n0−n′)<nMaschinen. (Beachten Sie, dass das Orakel vor dem Rekursieren nicht aufgerufen wird, sodass das Orakel erst aufgerufen wird, wenn der Basisfall erreicht ist.)
ioiQ0M′in0n′(M′1,…,M′n′)n0(M1,…,Mn0)M′i(M1,…,Mn0)n′(M′1,…,M′n′)n0