Ist jeder Linearzeit-Algorithmus ein Streaming-Algorithmus?


14

Drüben bei dieser Frage um die Inversionszählung , ich fand ein Papier , das für alle (genau) eine untere Schranke für Speicherkomplexität beweist Streaming - Algorithmen . Ich habe behauptet, dass diese Schranke sich auf alle linearen Zeitalgorithmen erstreckt. Dies ist ein bisschen fett, da im Allgemeinen ein linearer Zeitalgorithmus nach Belieben herumspringen kann (Direktzugriff), was ein Streaming-Algorithmus nicht kann; Es muss die Elemente in der richtigen Reihenfolge untersuchen. Ich kann mehrere Durchläufe durchführen, aber nur konstant viele (für lineare Laufzeit).

Daher meine Frage:

Kann jeder Linearzeitalgorithmus als Streaming-Algorithmus mit konstant vielen Durchläufen ausgedrückt werden?

Zufälliger Zugriff scheint zu verhindern, dass eine (einfache) Konstruktion eine positive Antwort liefert, aber ich konnte auch kein Gegenbeispiel finden.

Abhängig vom Maschinenmodell ist der wahlfreie Zugriff möglicherweise nicht einmal ein Problem, was die Laufzeit betrifft. Ich würde mich für Antworten zu diesen Modellen interessieren:

  • Turingmaschine, flacher Eingang
  • RAM, Eingabe als Array
  • RAM, Eingabe als verkettete Liste

Wie Sie in den Antworten sehen, implizieren "Streaming-Algorithmen" oft winzigen (Polylog-Speicherplatz). Angesichts Ihrer Motivation sollte die Frage lauten: Kann jeder lineare Zeitalgorithmus, der Wörter des Arbeitsbereichs verwendet, in einen Streaming-Algorithmus konvertiert werden, der O ( s ) Wörter des Arbeitsbereichs verwendet ? Ein Gegenbeispiel wäre also ein Problem, das mit o ( n ) Raum mit wahlfreiem Zugriff gelöst werden kann, während jeder konstante Durchlauf-Streaming-Algorithmus Ω ( n ) Raum benötigt. Noch keine Antwort hat ein solches Beispiel gegebensO(s)o(n)Ω(n)
Sasho Nikolov

@SashoNikolov: Eigentlich ist das gesamte Raumproblem tangential. Meine Frage bezieht sich hauptsächlich auf die Laufzeit. Wenn die Antwort "Ja" wäre, dann würden die in der Arbeit nachgewiesenen Untergrenzen (für die Raumkomplexität) für alle linearen Zeitalgorithmen gelten. Dass die Untergrenze auf dem Raum liegt, ist nebensächlich, aber nicht der eigentliche Fokus der Frage.
Raphael

Ich verstehe nicht. Es ist trivial, einen linearen Zeitalgorithmus als "One-Pass-Streaming" mit unbegrenztem Speicherplatz zu definieren. Ihre Frage ist nur dann sinnvoll, wenn in der Form "ein linearer Zeit-Direktzugriffs-Algorithmus mit konstantem Pass-Streaming unter ungefährer Beibehaltung des Komplexitätsmaßes " ausgeführt werden kann. Sie sollten also ein Maß für die Komplexität auswählen, da dies keinen Sinn ergibt. μ
Sasho Nikolov

@SashoNikolov: Mir war nicht bewusst, dass "Streaming-Algorithmus" solche Definitionsprobleme hatte. Da sie einen linearen Raum unterhalb der Grenze für Streaming-Algorithmen anzeigen, nahm ich an, dass der Raum nicht der Kern einer Definition ist. Aber ich denke, Sie könnten das mit "Es gibt keinen Streaming-Algorithmus ..." übersetzen. Was ist jedoch mit dieser Definition: "Ein Streaming-Algorithmus ist ein Algorithmus, bei dem der Eingabe (Liste) jeweils ein Element zugewiesen wird. Für jedes neue Element kann eine Berechnung in . Nach ständig vielen solchen Durchläufen muss es nach einer zusätzlichen Zeit o ( n ) eine Antwort ausgeben . " Ö(n)Ö(n)
Raphael

@SashoNikolov: Das würde die Algorithmen "Kopieren Sie die Eingabe und machen Sie alles" vom Begriff ausschließen, aber auf Zeit begrenzen . Passt das zur normalerweise bezeichneten Klasse? Wenn nicht, denke ich nicht, dass "Streaming" über Zeit- oder Raumkomplexitäten hinweg sinnvoll definiert werden kann. Es ist eher eine Strategie, ähnlich wie Gierig oder Teilen und Erobern. Ö(n2)
Raphael

Antworten:


15

Damit Streaming-Algorithmen sinnvoll sind, müssen sie mit einem wesentlich geringeren Arbeitsbereich als die Eingabe selbst arbeiten. Wenn Sie beispielsweise den gleichen Arbeitsbereich wie die Eingabe zulassen, können Sie jeden Algorithmus einfach als "Single-Pass-Streaming-Algorithmus" angeben, der die Eingabe zunächst in einem Durchgang in den Arbeitsbereich kopiert und dann nur die Arbeit verwendet Raum.

Ich denke, dass es typisch ist, den Arbeitsbereich auf höchstens polylogarithmisch in der Eingabegröße zu beschränken, wenn es um Streaming-Algorithmen geht. Unter dieser Annahme hat die Medianauswahl keinen O (1) -Pass-Streaming-Algorithmus nach Munro und Paterson [MP80]: Jeder P- Pass-Streaming-Algorithmus für die Medianauswahl an N Elementen muss Ω ( N 1 / P speichern ) Elemente. Andererseits verfügt die Medianauswahl über einen bekannten deterministischen linearen Zeitalgorithmus [BFPRT73].

[BFPRT73] Manuel Blum, Robert W. Floyd, Vaughan Pratt, Ronald L. Rivest und Robert E. Tarjan. Fristen für die Auswahl. Journal of Computer and System Sciences , 7 (4): 448–461, Aug. 1973. DOI: 10.1016 / S0022-0000 (73) 80033-9

[MP80] J. Ian Munro und Mike S. Paterson. Auswahl und Sortierung mit begrenztem Speicherplatz. Theoretical Computer Science , 12 (3): 315–323, November 1980. DOI: 10.1016 / 0304–3975 (80) 90061–4


6

Im Streaming-Modell dürfen Sie nur konstante oder polylogarithmische Zusatzdaten speichern, während Sie die Eingabe durchsuchen. Wenn Sie einen linearen Zeitalgorithmus in Betracht ziehen
, der dem Paradigma der Division und Überwindung folgt , müssen Sie mehr Informationen speichern und / oder Ihre Daten so oft durchsuchen, wie die Tiefe der Rekursion beträgt.

Ein Beispiel ist der DC3-Algorithmus zum Aufbau des Suffix-Arrays eines Textes (im RAM-Modell als Array angegeben). Um ein Suffix-Array zu erstellen, gruppieren Sie die Zeichen in Triplets, sodass Sie einen Text mit neuen Superzeichen erhalten . Sie können dies mit einem Versatz von 0 , 1 , 2 tun , was zu drei neuen Texten T 1 , T 2 , T 3 führt . Interessanterweise können Sie das Suffix-Array berechnen, wenn Sie das Suffix-Array von T 1T 2 in linearer Zeit haben. Daher braucht der AlgorithmusT0,1,2T1,T2,T3T1T2

t(n)=t(2/3n)+O(n)

Zeit. Diese Rekursion löst sich eindeutig zu . Ich verstehe nicht, wie dies in einen Streaming-Algorithmus umgewandelt werden kann.t(n)=O(n)

Ein weiteres bekanntes Beispiel ist der klassische Auswahlalgorithmus für die lineare Zeit .


Hier ist ein weiteres mögliches Beispiel. Das Erstellen eines Heaps benötigt O (n) und verwendet intern die auf Teilen und Erobern basierende Subroutine heapify ().
Massimo Cafaro

Aber das ist kein Beweis, oder? Sie sagen nur, dass eine naive Simulation nicht funktioniert. aber es gibt manchmal überraschende Algorithmen
Sasho Nikolov

@SashoNikolov: Ich sage, dass ich den DC3-Algorithmus nicht als Streaming-Algorithmus betrachte, da er zu viel Arbeitsspeicher benötigt. Vielleicht können Sie den Algorithmus in einen Streaming-Algorithmus umwandeln, aber das Ergebnis wäre nicht der DC3. Ich habe nicht diskutiert, ob es einen -Streaming-Algorithmus für die Suffix-Array-Konstruktion gibt. Das wäre eine ganz andere Frage. O(n)
A.Schulz

"Ich sehe nicht, wie dies in einen Streaming-Algorithmus umgewandelt werden kann", ließ mich glauben, dass Sie etwas anderes sagen als "dieser Algorithmus streamt nicht ohne Modifikation"
Sasho Nikolov

4

P

  • R(P)P
  • S(P)P

R(P)S(P)

n[1,n1]O(logn)O(1)ω(logn)

O(1/log2n)ps=Ω(n)psO(log2n)


1

Selbst in der einfachsten Definition von "Streaming-Algorithmus" (ein Algorithmus, der nach jeder inkrementellen Iteration in der Quelle die sofortige Kenntnis des nächsten inkrementellen Teils des Ergebnisses ergibt), kann ich mir ein paar lineare Algorithmen vorstellen, die dies nicht tun benimm dich so. Hashing-Algorithmen sind sehr umfangreich. FNV-1a ist linear zur Anzahl der Bytes in der Quelle, aber wir kennen keinen Teil des endgültigen Hashs, bis die vollständige Quelle verarbeitet wurde.

RadixSort alias BucketSort ist O (N) (technisch O (NlogM), wobei M der Maximalwert in den N Elementen ist, der als klein angesehen wird) und muss vollständig ausgeführt werden, um zu gewährleisten, dass sich jedes einzelne Element an seinem endgültigen Platz befindet.

Um ein "Streaming" -Algorithmus zu sein, muss ein Algorithmus im einfachsten Fall die folgenden zwei Eigenschaften aufweisen, von denen keine ausdrücklich zeitgebunden ist:

  • Besser als O (N) Raumkomplexität (äquivalent ausgedrückt, muss die gesamte Quelle nicht bekannt sein und das gesamte Ergebnis muss nicht gespeichert werden)
  • O (N) I / O-Beziehung (der Algorithmus erzeugt eine Reihe von Ausgaben, die linear proportional zu seinen Eingaben sind)

Daher ist die Hauptklasse von Algorithmen, die Daten streamen, die von Algorithmen, die "Projektionen" ausführen (inkrementelle Transformationen von einem Eingang zu X> 0 Ausgängen).


Warum sollte Ö(Logn)Platznutzung nicht in Ordnung sein? Die in der anderen Frage verlinkten Artikel spielen mit vielen Streaming-Algorithmen, die verwendet werdenω(1)Raum.
Raphael

logN ist auch in Ordnung; Der Punkt war, dass der Algorithmus keine Kenntnis der gesamten Eingabe oder Ausgabe auf einmal benötigen sollte.
KeithS

Ein Ω(n)Platzbedarf bedeutet nicht, dass die gesamte Eingabe zur Hand ist (dh es handelt sich nicht um einen Streaming-Algorithmus). Aber ich verstehe, worum es geht.
Raphael
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.