Jump to content

Интроселект

Интроселект (Мюссер)
Сорт Алгоритм выбора
Структура данных Множество
Худшая производительность На )
Лучшая производительность На )
Интроселект (Быстрый выбор – Куча)
Сорт Алгоритм выбора
Структура данных Множество
Худшая производительность О нлогн ( )
Лучшая производительность На )

В информатике , интроселект (сокращение от «интроспективный выбор») — это алгоритм выбора , который представляет собой гибрид и быстрого выбора медианы медиан который имеет быструю среднюю производительность и оптимальную производительность в худшем случае. Introselect связан с introsort алгоритмом сортировки : это аналогичные усовершенствования базовых алгоритмов быстрого выбора и быстрой сортировки , поскольку они оба начинаются с быстрого алгоритма, который имеет хорошую среднюю производительность и низкие накладные расходы, но возвращаются к оптимальному алгоритму для наихудшего случая. (с более высокими накладными расходами), если быстрый алгоритм не выполняется достаточно быстро. Оба алгоритма были представлены Дэвидом Массером в ( Musser 1997 ) с целью предоставить общие алгоритмы для стандартной библиотеки C++ , которые имеют как высокую среднюю производительность, так и оптимальную производительность в худшем случае, что позволяет ужесточить требования к производительности. [1]

Однако в большинстве реализаций стандартной библиотеки C++ используется другой алгоритм «introselect», который сочетает в себе быстрый выбор и heapselect и имеет время выполнения в наихудшем случае O ( n log n ). [2] Проект стандарта C++ по состоянию на 2022 год не содержит требований к производительности в наихудшем случае, поэтому допускает такой выбор. [3]

Алгоритмы

[ редактировать ]

Introsort достигает практической производительности, сравнимой с быстрой сортировкой, сохраняя при этом O ( n log n ) поведение в наихудшем случае за счет создания гибрида быстрой сортировки и пирамидальной сортировки . Introsort начинается с быстрой сортировки, поэтому она достигает производительности, аналогичной быстрой сортировке, если быстрая сортировка работает, и возвращается к пирамидальной сортировке (которая имеет оптимальную производительность в худшем случае), если быстрая сортировка не выполняется достаточно быстро. Аналогичным образом, introselect сочетает в себе быстрый выбор с медианой медиан для достижения линейного выбора в худшем случае с производительностью, аналогичной быстрому выбору.

Introselect работает, оптимистично начиная с быстрого выбора и переключаясь только на алгоритм выбора с линейным временем для наихудшего случая ( алгоритм медианы Блюма-Флойда-Пратта-Ривеста-Тарьяна ), если он повторяется слишком много раз без достаточного прогресса. Стратегия переключения является основным техническим содержанием алгоритма. Просто ограничить рекурсию постоянной глубиной недостаточно, так как это заставит алгоритм включать все достаточно большие списки. Массер обсуждает несколько простых подходов:

  • Следите за списком размеров обработанных на данный момент подразделов. Если в какой-то момент k было выполнено рекурсивных вызовов без уменьшения размера списка вдвое, для некоторого небольшого положительного k переключитесь на линейный алгоритм наихудшего случая.
  • Суммируйте размер всех созданных на данный момент разделов. Если это превышает размер списка, умноженный на некоторую небольшую положительную константу k , переключитесь на линейный алгоритм наихудшего случая. Эту сумму легко отследить в одной скалярной переменной.

Оба подхода ограничивают глубину рекурсии до k ⌈log n ⌉ = O (log n ), а общее время выполнения до O ( n) .

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

См. также

[ редактировать ]
  1. ^ « Общие алгоритмы », Дэвид Массер
  2. ^ «35968 – nth_element не соответствует требованиям сложности» .
  3. ^ «27.8.3 N-й элемент [alg.nth.element]» . Рабочий проект стандарта языка программирования C++, eel.is.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3e82ed7c7109734292a1e19905c1ebb7__1669175520
URL1:https://arc.ask3.ru/arc/aa/3e/b7/3e82ed7c7109734292a1e19905c1ebb7.html
Заголовок, (Title) документа по адресу, URL1:
Introselect - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)