Я шукаю однопрохідний алгоритм, який обчислює паритет перестановки. Я припускаю, що перехідна перестановка задається потоком . Вихід повинен бути паритетом перестановки. Мене цікавить питання, скільки пам'яті повинен використовувати детермінований алгоритм. Чи існує якийсь рандомізований алгоритм проблеми?
Я знаю, що для обчислення кількості інверсій за один прохід використовується пам'ять. Верхню межу можна легко отримати за допомогою будь-якої BST. Нижня межа представлена тут: http://citeseerx.ist.psu.edu/viewdoc/versions?doi=10.1.1.112.5622
На жаль, доказ нижньої межі в роботі не може бути поширений на паритетну справу (або це не так очевидно для мене).
Також я знаю, що обчислення парності в невеликому просторі з випадковим доступом до перестановки може бути виконано за часу та пам'яттю за допомогою детермінованого алгоритму або в пам'ять часу та шляхом рандомізованої. Дивіться http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.29.2256O ( log 2 n ) O ( n log n ) O ( log n )
Основна ідея полягає в тому, що парність перестановки можна обчислити за формулою , де - кількість циклів, а - розмір. Автори роблять цикл розкладання перестановки. Таким чином, можна легко обчислити кількість циклів. c n
Хтось знає ефективний алгоритм або нижню межу пам'яті для обчислення паритету в потоковій моделі? Рандомізовані алгоритми, кращі за випадкові монети, цікаві і для мене.