Szukam algorytmu jednoprzebiegowego, który oblicza parzystość permutacji. Zakładam, że permutacja wejściowa jest podawana przez strumień . Wyjście powinno być parzystością permutacji. Pytanie mnie interesuje, ile pamięci powinien użyć algorytm deterministyczny. Czy istnieje jakiś losowy algorytm dotyczący problemu?
Wiem, że obliczanie liczby inwersji w jednym przebiegu wykorzystuje pamięć . Górną granicę można łatwo uzyskać za pomocą dowolnego BST. Dolna granica jest przedstawiona tutaj: http://citeseerx.ist.psu.edu/viewdoc/versions?doi=10.1.1.112.5622
Niestety dowodu dolnej granicy w dokumencie nie można rozszerzyć na przypadek parzystości (lub nie jest to dla mnie tak oczywiste).
Wiem również, że obliczanie parzystości w niewielkiej przestrzeni z losowym dostępem do permutacji można wykonać w czasie i pamięci O ( log 2 n ) za pomocą algorytmu deterministycznego lub w czasie O ( n log n ) i O ( log n ) pamięć losowa. Zobacz http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.2256
Główną ideą jest to, że parzystość permutacji można obliczyć za pomocą wzoru , gdzie c jest liczbą cykli, a n jest rozmiarem. Autorzy dokonują rozkładu cyklu permutacji. Można więc łatwo obliczyć liczbę cykli.
Czy ktoś zna skuteczny algorytm lub dolną granicę pamięci do obliczania parzystości w modelu przesyłania strumieniowego? Interesujące są również algorytmy randomizowane lepiej niż losowe monety.