Berechnen der Parität einer Permutation auf Streaming-Weise


16

Ich suche nach einem One-Pass-Algorithmus, der die Parität einer Permutation berechnet. Ich gehe davon aus, dass eine Eingabepermutation durch stream . Die Ausgabe sollte die Parität der Permutation sein. Die Frage, die mich interessiert, wie viel Speicher ein deterministischer Algorithmus verwenden sollte. Gibt es einen zufälligen Algorithmus für das Problem?π[1],π[2],,π[n]

Ich weiß, dass die Berechnung der Anzahl der Inversionen in einem Durchgang -Speicher verwendet. Die Obergrenze kann leicht mit jedem BST erhalten werden. Die Untergrenze wird hier dargestellt: http://citeseerx.ist.psu.edu/viewdoc/versions?doi=10.1.1.112.5622Θ(n)

Leider kann der Nachweis der Untergrenze im Papier nicht auf den Paritätsfall ausgedehnt werden (oder es ist für mich nicht so offensichtlich).

Ich weiß auch, dass die Berechnung der Parität auf kleinem Raum mit wahlfreiem Zugriff auf eine Permutation in Zeit und Speicher durch deterministischen Algorithmus oder in Zeit und Speicher nach dem Zufallsprinzip. Siehe http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.2256O ( log 2 n ) O ( n log n ) O ( log n )O(nlogn)O(log2n)O(nlogn)O(logn)

Die Hauptidee ist, dass die Parität einer Permutation durch die Formel berechnet werden kann , wobei die Anzahl der Zyklen und die Größe ist. Die Autoren machen die Zykluszerlegung einer Permutation. So kann man leicht die Anzahl der Zyklen berechnen. c nsgn(π)=(1)nccn

Kennt jemand einen effektiven Algorithmus oder eine niedrigere Speichergrenze für die Berechnung der Parität im Streaming-Modell? Randomisierte Algorithmen, die besser sind als zufällige Münzen, interessieren mich auch.


Es ist interessant. Können Sie einen Beweis skizzieren oder ein Problem benennen, das Sie auf Parität reduzieren?
Vsevolod Oparin

4
@ András: Funktioniert ein O (n) -Raum-Algorithmus nicht einfach, indem verfolgt wird, welche Elemente bereits gesehen wurden (z. B. in einem Bitvektor), und dann für jedes neue Element x die Parität des # der noch zu- gesehen werden Elemente kleiner als x?
László Kozma

1
@laszlo Ihre -Obergrenze scheint mir jetzt überzeugender zu sein als mein Argument für eine größere Untergrenze. O(n)
András Salamon

Ein negatives Ergebnis für die Untergrenze. Die Autoren des ersten die Permutation basierend auf zwei Mengen und . Sie berechnen damit, ob sich und überschneiden. Die Berechnung der Parität der Permutation erfordert nur 3 Bits für die Einwegkommunikation. Es kann leicht erhalten werden, indem der Rang der entsprechenden Matrix berechnet wird. π=A0¯B1A0B1¯ABAB
Vsevolod Oparin

Antworten:


2

Ich möchte alle bitten, dies nicht zu befürworten, da dies keine Antwort, sondern ein ausführlicher Kommentar ist, in dem ich darlegen möchte, warum diese Frage keine Antworten erhalten hat. Mein Hauptpunkt ist, dass eine untere Grenze der Kommunikationskomplexität nicht funktioniert. Damit meine ich, dass, egal wie wir die Eingabe in zwei Teile teilen und an zwei Spieler, A und B, weitergeben, A ein einzelnes Bit nach B übertragen kann, aus dem er die Parität der Permutation berechnen kann. (Dies folgt einfach durch Berücksichtigung von Inversionen.)

Beweise, die eine andere Grenze verwenden, sind schwer. Siehe diesen Kommentar hier von Noam Nisan (für die nicht deterministische Version): Schranke der Größe der kleinsten NFA für L_k-distinct ,

diese Frage im Zusammenhang von mir beantwortet von Hermann Gruber , die zeigt , dass die Kommunikationskomplexität geringer kann sehr weit von der Wahrheit (in der nicht-deterministischen Version wieder) gebunden seine Untere Grenze Sprache für NFA akzeptieren 3 Buchstaben .

Auch darauf bezogen, dass die Entscheidung, ob die Permutation ein einzelner Zyklus ist, schwierig zu sein scheint, siehe dieses FOCS-Papier von Ran Raz und Boris Spieker: http://www.computer.org/csdl/proceedings/focs/1993/4370/00 /0366870-abs.html .

Daher bin ich auch sehr daran interessiert, die Antwort auf diese Frage zu erfahren.


Wenn Sie sagen, dass "egal wie wir die Eingabe in zwei Teile schneiden", schließt Ihr Argument auch Verringerungen aus, wenn die Permutation in mehr als zwei Teile aufgeteilt wird? In dem verlinkten Artikel zum Zählen der Anzahl der Inversionen gibt es beispielsweise eine Reduzierung der eingestellten Disjunktheit, bei der Alice und Bob die Eingaben haben und Permutationen und . Der Index 0 oder 1 bezieht sich auf die Transformationen und , und der Balken bezieht sich auf die Ergänzung. Was ist mit anderen Worten, wenn die Kommunikation mehrere Runden dauern kann? ¯ A 0 B 1 A 0 ¯ B 1 ¯ A 1 B 0 A 1 ¯ B 0 2 x 2 x + 1A,B[n]A0¯B1A0B1¯A1¯B0A1B0¯2x2x+1
László Kozma

@laszlo: In diesem Problem ist es wirklich egal, wie Sie die Eingabe schneiden, solange Sie sie nur zwei Spielern geben, da die Parität der Permutation durch die Anzahl ihrer Zyklen bestimmt wird (aus diesem Grund unterscheidet sie sich von der Anzahl) von Inversionen).
Domotorp

Ist es leicht zu sehen, wie A aus ihrer Eingabe ein bisschen berechnen kann, mit welcher B die Parität berechnen kann? Ich sehe, wie sowohl A als auch B die Anzahl der Zyklen "in ihren Teilen" kennen. Aber wie finden sie die Parität der Anzahl der "kreuzenden" Zyklen?
László Kozma

2
@laszlo: Angenommen, die Eingabe von A ist etwa 1-> 7, 2-> 5, 3-> 8, 4-> 6. Dies hat die gleiche Anzahl von Inversionen wie 1-> 5, 2-> 6, 3-> 8, 4-> 7. Im Allgemeinen weiß B, in welche Zahlen die Zahlen von A abgebildet werden. Mit einer geraden Anzahl von Inversionen kann A diese Zahlen in aufsteigender Reihenfolge permutieren, mit Ausnahme der letzten beiden. Die Relation dieser letzten beiden Zahlen ist das eine Bit, das sie sendet.
Domotorp

@ domotor: Folgefrage - Wenn A , B , C bekommt bei einer Permutation von die Parität mit Kommunikationsbits herstellen? ein1,,einneinn+1,,ein2nein2n+1,,ein3nein[3n]Ö(n)
László Kozma
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.