Introsort

Introsort

Introsort или интроспективная сортировка — алгоритм сортировки, предложенный Дэвидом Мюссером в 1997 году. Он использует быструю сортировку и переключается на пирамидальную сортировку, когда глубина рекурсии превысит некоторый заранее установленный уровень (например, логарифм от числа сортируемых элементов). Этот подход сочетает в себе достоинства обоих методов с худшим случаем O(n log n) и быстродействием, сравнимым с быстрой сортировкой. Так как оба алгоритма используют сравнения, этот алгоритм также принадлежит классу сортировок на основе сравнений.

В быстрой сортировке одна из критичных операций — выбор опоры (элемент, относительно которого разбивается массив). Простейший алгоритм выбора основы — взятие первого или последнего элемента массива за опору чревато плохим поведением на отсортированных или почти отсортированных данных. Никлаус Вирт предложил использовать серединный элемент для предотвращения этого случая, деградирующего до O(n²) при неудачных входных данных. Алгоритм выбора опоры «медиана трех» выбирает опорой средний из первого, среднего и последнего элементов массива. Однако, несмотря на то, что он работает хорошо на большинстве входных данных, все же возможно найти такие входные данные, которые сильно замедлят этот алгоритм сортировки. Такие данные потенциально могут использоваться злоумышленниками. Например, злоумышленники могут посылать такой массив Веб-серверу, добиваясь отказа в обслуживании.

Мюссер выяснил, что на худшем наборе данных для алгоритма quicksort «медиана из трех» (рассматривался массив из 100 000 элементов) introsort работает в 200 раз быстрее. Он также оценил эффект от кеша в случае сортировки Роберта Седжвика, когда небольшие диапазоны сортируются в конце одиночным проходом сортировки вставками. Он выяснил, что такой подход может удвоить количество промахов кеша, но его производительность при использовании двунаправленных списков значительно лучше, и его следует оставить для библиотек шаблонов, отчасти потому, что выигрыш в других случаях не велик.

В Стандартной библиотеке шаблонов C++ от SGI в stl_algo.h реализации неустойчивой сортировки использует подход Мюссера с контролем глубины рекурсии, задаваемым параметром, выбор опоры как медианы трех, переключаясь на алгоритм Седжвика в конце. Порог переключения на простую сортировку вставками установлен в 16.

Литература

  • Никлаус Вирт. «Алгоритмы и структуры данных». Prentice-Hall, Inc., 1985. ISBN 0-13-022005-1.

Ссылки

  • «Введение в introsort» Доклад, созданный Ральфом Унденом в рамках студенческого исследования. Содержит реализацию на Java.




Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Introsort" в других словарях:

  • Introsort — ou introspective sort est un algorithme de tri par comparaisons. C est une variante du tri rapide inventée par David Musser en 1997. Par rapport au tri rapide, Introsort a l avantage d avoir une complexité O(nlogn) dans le pire cas. Principe L… …   Wikipédia en Français

  • Introsort — ist ein Sortieralgorithmus. Der Begriff ist eine Kurzform für „introspektives Sortieren“. Der Algorithmus ist eine Variation von Quicksort, welche in entarteten Fällen auf ein anderes Sortierverfahren mit Worst Case Laufzeit (zum Beispiel… …   Deutsch Wikipedia

  • Introsort — or introspective sort is a sorting algorithm designed by David Musser in 1997. It begins with quicksort and switches to heapsort when the recursion depth exceeds a level based on (the logarithm of) the number of elements being sorted. It is the… …   Wikipedia

  • Quick-Sort — Eine zufällige Permutation von Integerwerten wird mit Quicksort sortiert. Die blauen Linien zeigen das Pivotelement im jeweiligen Rekursionsschritt. Quicksort (von engl. quick – schnell, to sort – sortieren) ist ein schneller, rekursiver, nicht… …   Deutsch Wikipedia

  • Quick sort — Eine zufällige Permutation von Integerwerten wird mit Quicksort sortiert. Die blauen Linien zeigen das Pivotelement im jeweiligen Rekursionsschritt. Quicksort (von engl. quick – schnell, to sort – sortieren) ist ein schneller, rekursiver, nicht… …   Deutsch Wikipedia

  • Tri rapide — Le tri rapide (en anglais quicksort) est un algorithme de tri inventé par C.A.R. Hoare en 1961[1] et fondé sur la méthode de conception diviser pour régner. Il est généralement utilisé sur des tableaux, mais peut aussi être adapté aux listes.… …   Wikipédia en Français

  • Quicksort — Infobox Algorithm class=Sorting algorithm Quicksort in action on a list of numbers. The horizontal lines are pivot values. data=Varies time=O(nlog n) on average space=Varies by implementation optimal=Sometimes Stability= [Sorting… …   Wikipedia

  • Haldensortierung — Der Heapsort Algorithmus beim Sortieren eines Arrays aus permutierten Werten. Der Algorithmus besteht aus zwei Schritten; im vorbereitenden Schritt wird das Array zu einem binären Heap umgeordnet, dessen Baumstruktur vor dem eigentlichen… …   Deutsch Wikipedia

  • Heap-Sort — Der Heapsort Algorithmus beim Sortieren eines Arrays aus permutierten Werten. Der Algorithmus besteht aus zwei Schritten; im vorbereitenden Schritt wird das Array zu einem binären Heap umgeordnet, dessen Baumstruktur vor dem eigentlichen… …   Deutsch Wikipedia

  • Heap Sort — Der Heapsort Algorithmus beim Sortieren eines Arrays aus permutierten Werten. Der Algorithmus besteht aus zwei Schritten; im vorbereitenden Schritt wird das Array zu einem binären Heap umgeordnet, dessen Baumstruktur vor dem eigentlichen… …   Deutsch Wikipedia


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»