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?
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
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 )
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 n
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.