P = [a1, a2, ... , aN]
Перестановка из первых N
натуральных чисел могут быть представлены в виде списка inversionsI = [i1, i2, ... , iN]
, где iK
говорит нам, сколько чисел, которые больше, чем K
можно найти до K
в перестановке P
.Преобразования перестановки инверсия представления
Пример: если P = [3, 1, 4, 2]
, то I = [1, 2, 0, 0]
(3 помещается 1, 3 и 4 помещается до 2, тогда как 3 и 4 не предшествует большему числу).
Существует очевидный алгоритм, который преобразует перестановку из стандартной в форму инверсии и запускается в O(N^2)
(мы просто следуем определению и подсчету). То же самое справедливо и для обратного преобразования (что несколько менее прямолинейно).
Есть ли алгоритм, который имеет более низкую временную сложность?
Я думаю, что это возможно с использованием дерева Фенвика или подобных структур данных. – kfx