Große Lücken zwischen RAM und Turing-Maschinenkomplexität


9

Wenn wir nur Probleme in P betrachten, gibt es große Lücken zwischen dem schnellsten bekannten Wort-RAM-Algorithmus und dem schnellsten bekannten Turing-Maschinenalgorithmus für bestimmte Probleme? Ich bin besonders interessiert, wenn es große Lücken für natürliche Probleme von allgemeinem Interesse gibt.


6
Eine RAM-Maschine kann von einer Turing-Maschine mit einem Overhead von O(nlogn) zur Laufzeit simuliert werden. Es wird also keine wirklich großen Lücken geben.
Shaull

@Shaull Gibt es eine Lücke dieser Größe für ein natürliches / beliebtes Problem?
Lembik

3
Palindrom benötigt Ω(n2) Zeit auf einem Einzelband TM (und ist O(n) im RAM). eecs.yorku.ca/course_archive/2008-09/W/6115/palindrome.pdf
SamM

6
Shaulls Kommentar gilt meines Wissens nur für nicht deterministische Maschinen und in der Zwei-Band-TM-Einstellung. Zitat, Shaull?
Ryan Williams

1
@ qbt937 - Wow, was für eine Explosion aus der Vergangenheit :) Ich glaube, ich habe kein Zitat geliefert, weil ich keines hatte (noch habe ich jetzt eines), und es kann gut sein, dass Ryan Williams Recht hat.
Shaull

Antworten:


6

Es ist bekannt, dass jedes Problem, das Sie auf einer RAM-Maschine in der Zeit berechnen können, in einer Turing-Maschine höchstens in der Zeit T ( n ) 2 auftreten kann . Sie müssen beachten, dass die Gesamtgröße des verwendeten Speichers nicht mehr als T ( n ) betragen kann , da dies bedeuten würde, dass Sie mehr Schreibvorgänge als T ( n ) ausgeführt haben. Jedes Mal, wenn Sie etwas aus dem RAM-Speicher abrufen, wird das Turing ausgeführt Maschine würde im schlimmsten Fall T ( n ) nehmenT(n)T(n)2T(n)T(n)T(n)Zeit, um das gewünschte Element nacheinander vom Band zu finden. Neben dem Speicherzugriff sollten die restlichen Vorgänge ungefähr dieselbe Zeit in Anspruch nehmen. Und so bekommen Sie die Grenze.


2
RAMs können die Länge der Eingabe (und damit auch die Partei dieser Länge) in logarithmischer Zeit berechnen, aber grundlegende Turing-Maschinen benötigen eine lineare Zeit, um diese Parität zu berechnen.

1

Das folgende Beispiel zeigt, dass ein Algorithmus , der O ( n log ( n ) ) benötigt , um ein Problem mit Word-Ram zu lösen, möglicherweise O ( n 2 log ( n ) 3 ) auf einer 1-Band-Turing-Maschine (TM) benötigt, die genau ausgeführt wird alle durch A angegebenen Berechnungen . Ich verstehe, dass sich die Frage auf das 1-Band-TM bezieht, und ich verwende dieses nur in meiner Antwort. Dies ist eine Bearbeitung, um die Bemerkungen von Emil Jeřábek anzusprechen.AO(nlog(n))O(n2log(n)3)A

Wir werden die folgende allgemeinere Schlussfolgerung finden . Um zu beweisen, dass das TM in ein in O ( T ( n ) ) durch einen Algorithmus A im RAM gelöstes Problem lösen kann , reicht es nicht aus, A auf dem TM auszuführen . Möglicherweise ist ein cleverer Algorithmus erforderlich. Gleiches gilt, wenn man ein O beweisen will ( n log ( n ) )O(T(n)2)O(T(n))AAO(nlog(n))Overhead. Die Existenz eines cleveren Algorithmus zu beweisen, wann immer dies erforderlich ist, scheint, gelinde gesagt, alles andere als unmittelbar zu sein. Dies steht nicht im Einklang mit anderen Antworten, die grundsätzlich nur vorschlagen, auf dem TM alle RAM-Berechnungen (von Algorithmus ) zu simulieren / auszuführen , um eine TM-Komplexität wie O ( T ( n ) 2 ) oder O ( T ( n ) n log ) anzukündigen ( n ) ) .AO(T(n)2)O(T(n)nlog(n))

Problem: Wir erhalten eine Array / Tabelle mit n = 2 k Ganzzahlen, die jeweils in log ( n ) Bits gespeichert sind . Wir erhalten ein zweites Array d mit log ( n ) -Positionen, von denen jedes eine Anzahl von log ( n ) -Bits aufzeichnet . Für jedes t [ 0 .. log ( n ) - 1 ] definieren wir X t = 1, wenn tab [ i ]tabn=2klog(n)dlog(n)log(n)t[0..log(n)1]Xt=1tab[i]MOD MOD d [ t ] i [ 0 .. n / 2 - 1 ] . Ansonsten ist X t = 0 . Ausgabe log ( n ) - 1 t = 0 X t . Ich betrachte die Eingabe als Band mit n log ( n ) +d[t]=tab[n/2+i]d[t] i[0..n/21]Xt=0t=0log(n)1Xt Binärziffern, um die Kommentare von Emil Jeřábek anzusprechen.nlog(n)+log(n)log(n)

Algorithmus im RAMA Ein RAM mit der Wortgröße benötigt O ( n log ( n ) + log ( n ) 2 ) = O ( n log ( n ) ) , um die Eingangsdaten der Binärzeichenfolge zu lesen. Nach dem Lesen der Daten kann es jedoch nur mit Wörtern der Größe log ( n ) arbeiten . Algorithmus A berechnet jedes X t in O ( nw=log(n)O(nlog(n)+log(n)2)O(nlog(n))log(n)AXt indem Sie alle i [ 0 .. n / 2 - 1 ] durchlaufenund die Bedingung testen. Die Hauptschleife von A istFOR t = 0 , 1 , 2 , log ( n ) - 1 : Berechne X t . Die Gesamtkomplexität ist O ( n log ( n ) ) (Lesen von Daten) + O ( n log ( n ) )O(n)i[0..n/21]At=0,1,2,log(n)1XtO(nlog(n))O(nlog(n))(führt die Berechnungen durch), damit alles in O ( n log ( n ) ) im RAM erledigen kann .AO(nlog(n))

Algorithmus auf dem 1-Band-TM:A Ich behaupte, das Ein-Band-TM benötigt Zeit für ein festes t . Aus Sicht des TM entspricht die Bestimmung von A t dem Testen der Gleichheit von zwei binären Zeichenfolgen der Länge O ( n log ( n ) ) . Beispielsweise kann die Registerkarte MOD-Operation [ i ] MOD d [ t ] dem Entfernen von Bit 0 der Registerkarte entsprechenO(n2log(n)2)tAtO(nlog(n))tab[i]d[t]0 . In solchen Fällen entspricht die Bestimmung von A t der Gleichheitsprüfung an Bitfolgen mit der Länge n ( log ( n ) - 1 ) / 2 . Es ist bekannt, dass zum Testen der Gleichheit von zwei Zeichenfolgen der Länge m O ( m 2 ) auf dem 1-Band TMerforderlich ist, aber ich kann momentan keine Referenz finden. Ich gebe jedoch einen Beweis in ps. Wenn das TM dieHauptschleifevon A ausführt, muss es mindestens O ( ( n log n) ausgebentab[i]Atn(log(n)1)/2mO(m2)A für jedes t = 0 , 1 , 2 , log ( n ) - 1 , was zu O ( n 2 log ( n ) 3 ) führt .O((nlogn)2)t=0,1,2,log(n)1O(n2log(n)3)


ps. Ich zeige, dass Gleichheitstests an Bitfolgen mit Bits nicht schneller sein können als Palyndromtests an Zeichenfolgen mit m Bits (Palyndrom dauert bekanntermaßen mindestens O ( m 2 ) Zeit). Wir können jeden TM-Algorithmus für Gleichheitstests modifizieren, um das Palindrom zu lösen. Angenommen, das Gleichheitstest-TM beginnt mit zwei Ganzzahlen: eine links vom Kopf und eine rechts (dies ist die einfachste Eingabeform für das TM). Jede Bewegung über die linken Positionen kann über die rechten Positionen gespiegelt (reflektiert) werden. Wir bauen ein gespiegeltes TM: Immer wenn sich das anfängliche TM an einer Position befindet - x < 0 (links), befindet sich das gespiegelte TM an Position xmmO(m2)x<0x(zur Rechten). Wenn ein TM Gleichheitstests in weniger als lösen würde, würde dieses modifizierte gespiegelte TM Palindrom in weniger als O ( m 2 ) lösen .O(m2)O(m2)

Es gibt auch einige TM-Algorithmen, die Gleichheitstests durchführen, und alle erfordern eine quadratische Zeit, da sie im Zickzack ausgeführt werden müssen. Siehe beispielsweise das Beispiel 2 der Turing-Maschine unter Kursen.cs.washington.edu/courses/cse431/14sp/scribes/ lec3.pdf


Die Untergrenze für Palindrome gilt nur für das unnatürliche Einzelbandmodell. Es ist einfach, die Gleichheit zweier Zeichenfolgen auf einem TM in linearer Zeit zu testen. Gleiches gilt für die Gleichheit zweier Folgen längerer Einträge. Damit die Frage überhaupt Sinn ergibt, müssen die Eingaben für beide Maschinenmodelle identisch sein, dh als Zeichenfolgen über einem endlichen Alphabet geschrieben sein. Daher würde Ihr RAM Zeit O (log n) benötigen, um jeden Eintrag zu lesen und in ein Wort umzuwandeln, was diese Operation sinnlos macht.
Emil Jeřábek

@Emil Jeřábek, ich werde meine Antwort bearbeiten, um anzuzeigen, dass ich nur an das 1-Band TM denke. Wenn Sie sagen, dass ein TM die Gleichheit in linearer Zeit testen kann, denken Sie wahrscheinlich an ein 2-Band-TM. Ich habe jedoch verstanden, dass es bei der gesamten Frage um 1-Band-TMs geht. In Bezug auf das Eingabeformular muss ich gestehen, dass Sie möglicherweise Recht haben, zumindest für einige Wort-RAMs. Aber soweit ich weiß, speichert ein C ++ int-Array die Ganzzahlen nacheinander ohne Trennzeichen, als ob sie zusammen eine Folge von Bits speichern würden. 10 Zoll auf 16 Bit belegen genau 160 Bit, nicht? Selbst wenn dies nicht der Fall ist, könnte man eine Maschine bauen, die auf diese Weise funktioniert.
Daniel Porumbel

3
Das Standardmodell der Turing-Maschine in der Komplexitätstheorie ist Multi-Tape. Ich sehe nicht, wie wichtig C ++ hier ist. Wir diskutieren nicht C ++, sondern das RAM-Modell. In diesem Modell können einzelne Speicherorte Nummern mit der Länge , aber wir können immer noch jeweils nur einen (oder O ( 1 ) ) Speicherplatz bearbeiten. Insbesondere können wir jeweils nur an einer Stelle auf die Eingabe zugreifen: Es gibt keine Operation, mit der Sie in konstanter Zeit „ log n Eingabestellen lesen und zu einem einzigen Wort zusammenfügen“ können. O(logn)O(1)logn
Emil Jeřábek

Es gibt zwei Möglichkeiten: (1) Die Eingabestelle [0] enthält das erste Bit der ersten Nummer, die Position [1] enthält das zweite Bit der ersten Nummer und so weiter. Dann benötigt es Zeit, um im RAM zu lesen, genau wie bei einer Turing-Maschine. Selbst mit Single-Tape-TMs erhalten Sie somit nur eine quadratische Beschleunigung. (2) Der Eingabeort [0] enthält die erste Nummer, der Ort [1] die zweite Nummer usw. Dann ist das Problem auf einem TM bedeutungslos, da es Eingaben dieses Formulars nicht verarbeiten kann. Sie erhalten also überhaupt keine Beschleunigung, sondern ein Problem, das nur bei einem der Maschinenmodelle zum Ausdruck kommt. O(nlogn)
Emil Jeřábek

@Emil Jeřábek, Nach Ihren Ausführungen habe ich die Frage bearbeitet, um ein Problem und einen RAM-Algorithmus vorzuschlagen, der explizit zum Lesen der Daten (von einem Band) verwendet. Ich habe einige meiner Bemerkungen entfernt, die nicht mehr relevant sind. Ich hoffe, dies löst das Problem, auf das Sie hingewiesen haben. O(nlog(n))
Daniel Porumbel
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.