Підрахунок пар інверсії


14

Класичним застосуванням ділення та перемоги є вирішення наступної проблеми:

З огляду на масив [ 1 ... п ] з окремих елементів, які можна порівняти, підрахувати число пар інверсії в масиві: пари таким чином, що , і .a[1n](i,j)a[i]>a[j]i<j

Один із підходів до цього - зробити сортування об'єднань, але також підрахунок кількості пар інверсії в підзадачі. Під час кроку злиття ми підраховуємо кількість пар інверсії, які охоплюють (дві) підпроблеми, і додаємо до числа підзадач.

Хоча це добре і дає алгоритм часу , це заплутує масив.O(nlogn)

Якщо у нас є додаткове обмеження, що масив є лише для читання, то ми можемо зробити копію та обробити копію, або використати додаткову структуру даних, на зразок статистики замовлень, збалансованого двійкового дерева, щоб зробити підрахунок, обидва з яких використовують простір.Θ(n)

Поточне питання - спробувати покращити простір, не впливаючи на час виконання. тобто

Чи існує алгоритм часу для підрахунку кількості пар інверсії, який працює на масиві, доступному лише для читання, і використовує підлінійний (тобто ) простір?O(nlogn)o(n)

Припустимо модель RAM з рівномірною вартістю, і що елементи займають простір а порівняння між ними - .O ( 1 )O(1)O(1)

Довідка буде робити, але пояснення буде краще :-)

Я спробував шукати в Інтернеті, але не зміг знайти на це жодної позитивної / негативної відповіді. Я думаю, це просто цікавість.


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

2
Крім того, Ajtai та ін. доведіть, що будь-який (точний) алгоритм потокової передачі часу потребує простору Ω ( n ) . Здається, є наближення, що відповідають вашим критеріям. O(n)Ω(n)
Рафаель

1
@Raphael: Дякую! Якщо відповіді не буде, то ваш коментар буде найкращою відповіддю поки що.
Ар'ябхата

До речі, я трохи розгублений щодо нижньої межі Ajtai та ін. Теорема 8 говорить "будь-який алгоритм", але нижня межа, як мені здається, суперечить однопрохідним точним алгоритмам потокової передачі, дуже обмежена модель
Сашо Ніколов

@SashoNikolov: Я думаю, що вони глобально налаштували свою модель на потокові алгоритми, тому "будь-яка" буде обмежена лише тими. Я сподіваюся, що мій наслідок - будь-який точний алгоритм часу - є правильним, тобто будь-який алгоритм лінійного часу може бути виражений як алгоритм потокового потоку з постійно численними пропусками. Ми побачимо . O(n)
Рафаель

Відповіді:


3

Ось відповідь Рафаеля:

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


Дякуємо, що зробили це відповіддю. Я дам йому ще трохи часу. Здається, трафік збирається.
Ар'ябхата
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.