Изменения

Перейти к: навигация, поиск

Таблица инверсий

1527 байт добавлено, 10:15, 7 января 2017
Алгоритм построения за O(N)
Answer += Bank[i].size
'''return''' Answer
'''Краткое описание алгоритма выше''':
Известно что карманная сортировка имеет линейную сложность, но только в том случае если a) Все элементы равномерно распределеныраскидываются по карманам. b) Каждый карман сортируется сортировкой вставками. Т  В Кормене описываются мат.квыкладки, доказывающие линейность карманной сортировки. мы ищем кол-во Что касается инверсий , то по сути дела в перестановке то мы знаем что наши элементы встречаются на отрезке от <tex>[1;n]</tex> единожды , а следовательно равномерно распределеныприведенной реализации происходит карманная сортировка в online режиме и вся мат.часть из Кормена подходит и под этот случай.
Сложность представленного алгоритма есть <tex>O(n)</tex>.
 
Хотя подсчет с помощью карманной сортировки выполняется за линейное время, но имеет очень большую константу т.ч. подсчет с помощью дерева Фенвика(которая выполняется за <tex>O(n*log(n))</tex>) часто работает быстрее рассматриваемого в данном случае.
 
Также следует учитывать с помощью какой сортировки вставлять элемент каждый раз. Если размер кармана не велик, то возможно лучше подойдет эффективная реализация квадратичной сортировки, иначе лучше использовать одну из быстрых сортировок. Известно, что маленькие массивы лучше сортировать квадратичной сортировкой. Но как узнать границу, после которой массив перестает быть маленьким? В общем случае эта верхняя граница находится между 32 и 40. У Тима Петерсона в Tim Sort'e это 64(правда это на Python'e).
== Алгоритм восстановления ==
Анонимный участник

Навигация