Подсчет пар инверсии


14

Классическое приложение «разделяй и властвуй» заключается в решении следующей проблемы:

Учитывая массив различных сопоставимых элементов, подсчитайте количество пар инверсии в массиве: пар ( i , j ), таких что a [ i ] > a [ j ] и i < j .a[1n](i,j)a[i]>a[j]i<j

Один из подходов к этому - выполнить сортировку слиянием, а также подсчитать количество пар инверсии в подзадачах. На этапе объединения мы подсчитываем количество пар инверсии, которые охватывают (две) подзадачи, и добавляем к подсчетам подзадач.

Хотя это хорошо и дает алгоритм времени , это портит массив.O(nlogn)

Если у нас есть дополнительное ограничение, что массив доступен только для чтения, то мы можем сделать копию и обработать копию, или использовать дополнительную структуру данных, такую ​​как сбалансированное двоичное дерево статистики порядка, для подсчета, оба из которых используют пространство.Θ(n)

Текущий вопрос состоит в том, чтобы попытаться улучшить пространство, не влияя на время выполнения. т.е.

Существует ли алгоритм времени для подсчета количества пар инверсии, который работает в массиве только для чтения и использует сублинейное (т. Е. O ( n ) ) пространство?O(nlogn)o(n)

Предположим, что модель ОЗУ с одинаковой стоимостью и что элементы занимают пространство и сравнение между ними равно O ( 1 ) .O(1)O(1)

Ссылка подойдет, но объяснение будет лучше :-)

Я пытался найти в Интернете, но не смог найти положительного / отрицательного ответа на этот вопрос. Я полагаю, это просто любопытство.


3
Чан и Патрашку дают алгоритм времени , но, насколько я могу судить по просмотру статьи, им нужно пространство Ω ( n ) . o(nlogn)Ω(n)
Рафаэль

2
Кроме того, Ajtai et al. докажите, что для любого (точного) алгоритма потокового времени требуется пространство Ω ( n ) . Хотя, похоже, есть приближения, соответствующие вашим критериям. O(n)Ω(n)
Рафаэль

1
@ Рафаэль: Спасибо! Если ответа не ожидается, ваш комментарий будет лучшим ответом на данный момент.
Арьябхата

Кстати, я немного озадачен тем, что нижняя граница Ajtai et al. Теорема 8 говорит «любой алгоритм», но нижняя граница, по-моему, противоречит точным потоковым алгоритмам за один проход, очень ограниченной модели
Сашо Николов

@SashoNikolov: Я думаю, что они глобально устанавливают свою модель для потоковых алгоритмов, поэтому «любой» будет ограничен ими. Я надеюсь, что мое следствие - любой точный алгоритм времени - правильно, то есть любой алгоритм с линейным временем может быть выражен как алгоритм потоковой передачи с постоянно большим количеством проходов. Посмотрим . O(n)
Рафаэль

Ответы:


3

Вот ответ Рафаэля:

o(nlogn)Ω(n)O(n)Ω(n)


Спасибо за ответ. Я дам это еще немного времени, хотя. Трафик, кажется, набирает обороты.
Арьябхата
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.