Interested Article - Алгоритм выбора

В информатике алгоритм выбора — это алгоритм для нахождения k -го по величине элемента в массиве (такой элемент называется k-й порядковой статистикой ). Частными случаями этого алгоритма являются нахождение минимального элемента , максимального элемента и медианы . Существует алгоритм, который гарантированно решает задачу выбора k-го по величине элемента за O( n ).

Выбор с помощью сортировки

Задачу выбора можно свести к сортировке . Можно упорядочить массив, а затем взять нужный по счёту элемент. Это эффективно в том случае, когда выбор нужно делать многократно: тогда можно отсортировать массив за O( n log n ) и затем выбирать из него элементы. Однако если выбор нужно произвести однократно, этот алгоритм может оказаться неоправданно долгим.

Линейный алгоритм для нахождения минимума (максимума)

Способ за линейное время найти минимум (максимум) в массиве:

  • Изначально присвоить
  • Для каждого элемента выполнить: если , присвоить .

Линейный в среднем алгоритм для нахождения k -й порядковой статистики

Существует алгоритм для нахождения k -й порядковой статистики, основанный на алгоритме быстрой сортировки и работающий за O( n ) в среднем.

Идея алгоритма заключается в том, что массив разбивается на две части относительно случайно (равновероятно) выбранного элемента — в одну часть попадают элементы, меньшие, чем выбранный, в другую — остальные (эта операция выполняется за , по её окончании выбранный элемент находится в позиции ). Если в первой части оказалось ровно элементов ( ), то выбранный элемент является искомым, если , то алгоритм выполняется рекурсивно для первой части массива, иначе — для второй (в последнем случае для следующей итерации от отнимается ). Рекурсивные вызовы приводят к экспоненциально уменьшающемуся с каждой итерацией размеру обрабатываемого массива, и по этой причине время выполнения алгоритма составляет .

Алгоритм BFPRT (линейный детерминированный)

BFPRT-Алгоритм позволяет найти k -ю порядковую статистику гарантированно за O( n ). Назван в честь своих изобретателей: Manual B lum, Robert W. F loyd, Vaughan R. P ratt, Ronald L. R ivest и Robert Endre T arjan. Используется при достаточно длинном списке элементов, свыше 800 элементов.

Принцип действия

Ввод: число , обозначающее -й элемент.

  1. Список делится на подмножества элементов, по 5 элементов в каждом (кроме последнего подмножества). Число элементов в подмножествах может превышать 5 и должно быть в любом случае нечётным. Однако если делить список на подмножества из 3 элементов, время работы не будет линейным.
  2. Каждое подмножество сортируется с помощью подходящего алгоритма сортировки.
  3. Пусть — множество медиан, образовавшихся в подмножествах после сортировки. Рекурсивно находится медиана в — медиана медиан. Назовем её .
    • Результирующая после 3 шага структура, имеет следующую особенность:
      • Четверть всех элементов в любом случае имеет ключ . (Подмножество множества )
      • Четверть всех элементов в любом случае имеет ключ . (Подмножество множества )
  4. Теперь список разбивается относительно медианы s на 2 подмножества и . При этом нужно сравнить с s только половину всех элементов, так как две четверти элементов уже отсортированы относительно s. В результате каждое из подмножеств и содержит максимально 3/4 всех элементов (минимально — 1/4 всех элементов).
  5. Если:
    • , то искомый элемент найден — это медиана медиан
    • , то алгоритм вызывается рекурсивно на множестве
    • в любом другом случае, алгоритм вызывается рекурсивно на множестве

Гарантированное время работы

При каждом рекурсивном вызове , алгоритм позволяет отбросить минимум четверть всех элементов. Это обеспечивает верхнюю оценку на гарантированное линейное время работы для детерминированного алгоритма , так как оно выражается рекуррентным соотношением . В общем случае, если подмножества имеют размер , время работы выражается как .

Литература

  • Volker Heun. Основные Алгоритмы = Grundlegende Algorithmen. — 1-е изд. — Мюнхен: Vieweg Verlag, 2000. — С. 86. — ISBN 3-528-03140-9 .
  • (англ.)
Источник —

Same as Алгоритм выбора