Untergrenze für die Anzahl der Orakelaufrufe zur Lösung von


9

Ich bin auf die folgende Frage gestoßen, die eine einfache Übung ist (Spoiler unten).

Wir erhalten Instanzen des Stoppproblems (dh TMs ), und wir müssen genau entscheiden, welche von ihnen auf anhalten . Das heißt, wir müssen ausgeben . Wir bekommen ein Orakel für das Problem des Anhaltens, aber wir müssen es nur minimal verwenden.nM1,...,Mnϵ{i:Mi halts on ϵ}

Es ist nicht schwer zu zeigen, dass dies mit -Aufrufen möglich ist.log(n+1)

Meine Frage ist: Können wir eine Untergrenze beweisen? Gibt es Grund zu der Annahme, dass eine solche Bindung sehr schwer zu finden sein wird?

Die Antwort auf die Frage selbst (Spoiler, Schwebemaus):

Betrachten Sie den Fall von 3 TMs. Wir können ein TM konstruieren H2, das M1,M2,M3 parallel läuft und anhält, wenn mindestens zwei von ihnen anhalten (andernfalls bleibt es stecken). In ähnlicher Weise können wir ein TM konstruieren H1, das anhält, wenn mindestens einer von ihnen anhält. Wir können dann das Orakel auf H2 . Wenn es anhält, können wir die Maschinen parallel laufen lassen und warten, bis eine anhält. Wir können dann das Orakel beim letzten nennen. Wenn das Orakel "Nein" sagt, führen wir das Orakel auf H1. Wenn es anhält, lassen wir die Maschinen laufen, bis eine anhält, und es ist die einzige, die anhält. Wenn H1 nicht anhält, hält keiner von ihnen an. Die Erweiterung auf n Maschinen ist einfach.

Die erste Beobachtung zu dieser Frage ist, dass es unmöglich erscheint, sie mit informationstheoretischen Werkzeugen zu lösen, da wir uns entscheidend auf unsere Fähigkeit verlassen, Informationen zu erhalten, indem wir die Maschinen ohne Orakel betreiben.


@Kaveh - wie Neal Young schrieb, müssen wir den genauen Satz von Haltemaschinen berechnen.
Shaull

Antworten:


11

Das Ergebnis finden Sie in

Ihr Beweis zeigt tatsächlich, dass Ihr Problem nicht mit weniger als Abfragen an eine beliebige Menge X gelöst werden kann , geschweige denn mit dem Stoppproblem selbst. Bei einigen Notationen wird Ihr Problem manchmal als C K n oder C H A L T n bezeichnet (abhängig von Ihrer bevorzugten Notation für das Stoppproblem).log2nXCnKCnHALT

Zu diesem und vielen verwandten Ergebnissen siehe auch:


10

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{Mi} (i=1,2,,n)Miniwenn 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{kZ: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 .nnn0n0C

Q0n0C(n0)

n>n0nM1,,Mn

M1,,Mn0Q0n0Q0C(n0)n=2C(n0)n=2C(n0)<n0oiii=1,,nMiQ0

Miϵ

  1. Q0n0(M1,,Mn0)oi
  2. oi
  3. hiQ0
  4. n0(M1,,Mn0)hihi

nn0M1,,Mn0n<n0M1,,Mnn(n0n)<nMaschinen. (Beachten Sie, dass das Orakel vor dem Rekursieren nicht aufgerufen wird, sodass das Orakel erst aufgerufen wird, wenn der Basisfall erreicht ist.)

ioiQ0Min0n(M1,,Mn)n0(M1,,Mn0)Mi(M1,,Mn0)n(M1,,Mn)n0

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.