Я ищу однопроходный алгоритм, который вычисляет четность перестановки. Я предполагаю, что входная перестановка задается потоком . Выходными данными должно быть соотношение перестановок. Вопрос, который меня интересует, сколько памяти должен использовать детерминированный алгоритм. Есть ли какой-либо рандомизированный алгоритм для задачи?
Я знаю, что для вычисления числа инверсий за один проход используется память . Верхняя граница может быть легко получена с помощью любого 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.2256.
Основная идея состоит в том, что четность перестановки может быть вычислена по формуле , где - число циклов, а - размер. Авторы делают цикл разложения перестановки. Таким образом, можно легко вычислить количество циклов.
Кто-нибудь знает эффективный алгоритм или нижнюю границу памяти для вычисления четности в потоковой модели? Рандомизированные алгоритмы лучше случайной монеты мне тоже интересны.