Алгоритм поиска k-й порядковой статистики.
В прошлом уроке вы узнали, какой алгоритм применяется в Трешландии для определения нарушителей. Этот алгоритм начали применять очень давно. Тогда жителей в стране было совсем немного. На таком объёме данных программа отрабатывала за считанные секунды.
С тех пор количество жителей постоянно росло. А после очередной волны миграции из Котостана и Песикостана на юг Трешландии, количество её жителей сильно увеличилось. На таком объёме данных алгоритм стал работать очень медленно.
Пришло время решить вторую задачу, которую поручил король ребятам, — модифицировать существующий алгоритм.
Тимофей: Помните, я рассказывал вам про стратегию «разделяй и властвуй»?
Алла: Да, забудешь про такое!
Рита: А к чему это ты?
Тимофей: Есть алгоритмы сортировки, которые работают быстрее чем сортировка выбором. Про один из них я расскажу. Но перед тем, как перейти к его изучению, вам было бы полезно послушать про алгоритм поиска k-й порядковой статистики.
Алла: А что это такое?
Тимофей: k-й порядковой статистикой называется k-й по величине элемент массива.
Рита: А, то есть медиана — частный случай такой статистики, да?
Тимофей: Да, верно. Ведь медиана — такое число, которое делит массив пополам: в одной половине элементы не большие медианы, а в другой — не меньшие.
Гоша: Так, если в массиве нечётное количество чисел, то понятно, как найти медиану. Отсортировать и взять средний элемент. А что, если чисел чётное количество?
Тимофей: В этом случае в качестве медианы обычно берут полусумму двух соседних средних значений. Но при определении статистики нужно использовать значение определённого элемента, а не полусумму двух.
Обратите внимание, что медиана — не то же самое, что среднее значение. Например, для массива
[1,1,1,1,1,10] медиана равна 1, а среднее значение — 2.5.
Медиана — не единственный частный случай k-й порядковой статистики.
В случае, если массив из
n элементов сортируется по возрастанию, минимальный элемент массива — 1-я порядковая статистика, максимальный элемент будет иметь порядковую статистику
n.
Многие удивляются, когда узнают, какая вычислительная сложность у алгоритма поиска k-й порядковой статистики.
Гоша: (перебивает) А что тут думать, отсортировал массив встроенной сортировкой и берёшь какой k-й от начала элемент!
Тимофей: Ну и какая сложность алгоритма?
Гоша: Ой, извини, что перебил! Что ты там рассказывал?