WikiDer > Сравнительная сортировка
А сортировка сравнения это тип алгоритм сортировки который считывает элементы списка только с помощью одной абстрактной операции сравнения (часто с помощью оператора «меньше или равно» или трехстороннее сравнение), который определяет, какой из двух элементов должен появиться первым в окончательном отсортированном списке. Единственное требование - чтобы оператор формировал общий предварительный заказ над данными, с:
- если а ≤ б и б ≤ c тогда а ≤ c (транзитивность)
- для всех а и б, а ≤ б или же б ≤ а (связь).
Возможно, что оба а ≤ б и б ≤ а; в этом случае любой из них может быть первым в отсортированном списке. В стабильная сортировкав этом случае порядок ввода определяет порядок сортировки.
Метафора для размышлений о видах сравнения: у кого-то есть набор немаркированных весов и шкала баланса. Их цель - выровнять гири по их весу без какой-либо информации, кроме той, которая получена путем размещения двух гирь на весах и просмотра того, какой из них тяжелее (или если они весят одинаково).
Примеры
Некоторые из наиболее известных способов сравнения включают:
- Быстрая сортировка
- Heapsort
- Shellsort
- Сортировка слиянием
- Интросорт
- Вставка сортировки
- Выборочная сортировка
- Пузырьковая сортировка
- Нечетно-четная сортировка
- Сорт коктейльный шейкер
- Цикл сортировки
- Сортировка слиянием-вставкой
- Smoothsort
- Тимсорт
- Блочная сортировка
Пределы производительности и преимущества различных методов сортировки
Существуют фундаментальные ограничения на эффективность сортировок для сравнения. Сортировка сравнения должна иметь нижнюю границу среднего регистра Ω(п бревно п) операции сравнения,[1] который известен как линейный время. Это следствие ограниченной информации, доступной только посредством сравнений, или, говоря иначе, нечеткой алгебраической структуры полностью упорядоченных множеств. В этом смысле сортировка слиянием, heapsort и introsort являются асимптотически оптимальный с точки зрения количества сравнений, которые они должны выполнить, хотя этот показатель не учитывает другие операции. Сортировки без сравнения (такие как примеры, обсуждаемые ниже) могут обеспечить О(п) производительность за счет использования операций, отличных от сравнений, что позволяет им обойти эту нижнюю границу (при условии, что элементы имеют постоянный размер).
В некоторых списках сортировка сравнения может выполняться быстрее; много адаптивные сортировки Такие как вставка сортировки запустить в O (п) время в уже отсортированном или почти отсортированном списке. В Ω(п бревно п) нижняя граница применяется только в том случае, когда список ввода может быть в любом возможном порядке.
При реальных измерениях скорости сортировки может потребоваться принять во внимание способность некоторых алгоритмов оптимально использовать относительно быстрое кэширование. память компьютера, или приложение может извлечь выгоду из методов сортировки, при которых отсортированные данные начинают быстро появляться для пользователя (и тогда скорость чтения пользователя будет ограничивающим фактором), в отличие от методов сортировки, при которых выходные данные недоступны, пока не будет отсортирован весь список.
Несмотря на эти ограничения, сортировки сравнения предлагают заметное практическое преимущество, заключающееся в том, что контроль над функцией сравнения позволяет сортировать множество различных типов данных и точно контролировать порядок сортировки списка. Например, изменение результата функции сравнения на обратное позволяет отсортировать список в обратном порядке; и можно отсортировать список кортежи в лексикографический порядок просто создав функцию сравнения, которая последовательно сравнивает каждую часть:
функция tupleCompare ((lefta, leftb, leftc), (righta, rightb, rightc)) если lefta ≠ righta возвращаться сравнить (слева, справа) иначе если leftb ≠ rightb возвращаться сравнить (слеваb, справаb) еще возвращаться сравнить (leftc, rightc)
Сбалансированный тройной нотация позволяет проводить сравнения за один шаг, результат которого будет одним из следующих: «меньше», «больше» или «равно».
Сортировки сравнения обычно легче адаптируются к сложным порядкам, таким как порядок числа с плавающей запятой. Кроме того, как только функция сравнения написана, любая сортировка сравнения может использоваться без изменений; Для сортировок без сравнения обычно требуются специальные версии для каждого типа данных.
Эта гибкость, вместе с эффективностью описанных выше алгоритмов сортировки сравнения на современных компьютерах, привела к повсеместному предпочтению сортировок сравнения в большинстве практических работ.
Альтернативы
Некоторые задачи сортировки допускают строго более быстрое решение, чем Ω (п бревно п) привязано для сравнительной сортировки; пример целочисленная сортировка, где все ключи целые. Когда ключи образуют небольшой (по сравнению с п) классифицировать, счетная сортировка это пример алгоритма, который работает в линейном времени. Другие алгоритмы целочисленной сортировки, например радиальная сортировка, не асимптотически быстрее, чем сортировка сравнения, но на практике может быть быстрее.
Проблема сортировка пар чисел по их сумме не подлежит Ω (п² журнал п) связать либо (квадрат, полученный в результате спаривания); самый известный алгоритм все еще занимает O (п² журнал п) время, но только O (п²) сравнения.
Количество сравнений, необходимое для сортировки списка
Количество сравнений, которые требует алгоритм сортировки сравнения, увеличивается пропорционально , куда количество элементов для сортировки. Эта граница асимптотически плотный.
Учитывая список различных чисел (мы можем предположить это, потому что это анализ наихудшего случая), есть п факториал перестановки, ровно одна из которых является списком в отсортированном порядке. Алгоритм сортировки должен получить достаточно информации из сравнений, чтобы определить правильную перестановку. Если алгоритм всегда завершается не позднее, чем через ж(п) шагов, он не может различить более 2ж(п) случаев, потому что ключи различны, и каждое сравнение имеет только два возможных результата. Следовательно,
- , или эквивалентно
Посмотрев на первый факторы , мы получаем
Это обеспечивает нижнюю границу претензии. Лучшую оценку можно дать через Приближение Стирлинга.
Идентичная верхняя граница следует из существования алгоритмов, которые достигают этой границы в худшем случае, например heapsort и Сортировка слиянием.
Приведенный выше аргумент дает абсолютный, а не только асимптотическая нижняя оценка количества сравнений, а именно сравнения. Эта нижняя граница довольно хороша (к ней можно приблизиться с линейным допуском с помощью простой сортировки слиянием), но, как известно, она неточна. Например, , но минимальное количество сравнений с элементами сортировки 13 оказалось равным 34.
Определение точный количество сравнений, необходимых для сортировки заданного количества записей, является сложной вычислительной проблемой даже для небольших п, и нет простой формулы для решения. Для некоторых из немногих конкретных значений, которые были вычислены, см. OEIS: A036604.
Нижняя оценка среднего числа сравнений
Аналогичная оценка применима к среднему количеству сравнений. При условии, что
- все ключи различны, т.е. каждое сравнение даст либо а>б или же а<б, и
- вход представляет собой случайную перестановку, выбранную равномерно из множества всех возможных перестановок п элементы
невозможно определить, в каком порядке находится вход с меньшим, чем бревно2(п!) сравнения в среднем.
Это легче всего увидеть, используя концепции из теория информации. В Энтропия Шеннона такой случайной перестановки бревно2(п!) биты. Поскольку сравнение может дать только два результата, максимальный объем предоставляемой информации составляет 1 бит. Поэтому после k сравнений оставшаяся энтропия перестановки с учетом результатов этих сравнений не менее бревно2(п!) − k бит в среднем. Для выполнения сортировки необходима полная информация, поэтому оставшаяся энтропия должна быть равна 0. Отсюда следует, что k должен быть не менее бревно2(п!) в среднем.
Нижняя оценка, полученная с помощью теории информации, сформулирована как «теоретико-информационная нижняя оценка». Теоретико-информационная нижняя оценка верна, но не обязательно является самой сильной нижней оценкой. А в некоторых случаях теоретико-информационная нижняя оценка проблемы может даже быть далека от истинной нижней границы. Например, теоретико-информационная нижняя граница выбора равна в то время как сравнения необходимы для состязательной аргументации. Взаимодействие между теоретико-информационной нижней границей и истинной нижней границей во многом похоже на действительную функцию, ограничивающую снизу целочисленную функцию. Однако это не совсем верно, если рассматривать средний случай.
Чтобы выяснить, что происходит при анализе среднего случая, ключ в том, что означает «средний»? Усреднение по чему? Имея некоторые знания в области теории информации, теоретико-информационная нижняя граница усредняет набор всех перестановок в целом. Но любые компьютерные алгоритмы (в соответствии с тем, что считается в настоящее время) должны рассматривать каждую перестановку как отдельный экземпляр проблемы. Следовательно, средняя нижняя граница, которую мы ищем, усредняется по всем индивидуальным случаям.
Для поиска нижней границы недостижимости компьютеров мы принимаем Модель дерева решений. Давайте перефразируем нашу цель. в Модель дерева решений, нижняя граница, которая будет показана, является нижней границей средней длины путей от корня к листу -листовое двоичное дерево (в котором каждый лист соответствует перестановке). Было бы убедительно сказать, что сбалансированное полное двоичное дерево достигает минимума средней длины. После некоторых тщательных вычислений для сбалансированного полного двоичного дерева с листьев, средняя длина путей от корня к листу определяется как
Например, для п = 3, теоретико-информационная нижняя оценка для среднего случая составляет примерно 2,58, в то время как средняя нижняя оценка, полученная с помощью Модель дерева решений составляет 8/3, примерно 2,67.
В случае, если у нескольких элементов может быть один и тот же ключ, нет очевидной статистической интерпретации для термина «средний случай», поэтому аргумент, подобный приведенному выше, не может быть применен без конкретных предположений о распределении ключей.
Примечания
- ^ Кормен, Томас Х.; Лейзерсон, Чарльз Э.; Ривест, Рональд Л.; Штейн, Клиффорд (2009) [1990]. Введение в алгоритмы (3-е изд.). MIT Press и McGraw-Hill. С. 191–193. ISBN 0-262-03384-4.
- ^ Марк Уэллс, Приложения языка для вычислений в комбинаторике, Обработка информации 65 (Труды Конгресса ИФИП 1965 г.), 497–498, 1966.
- ^ Марк Уэллс, Элементы комбинаторных вычислений, Pergamon Press, Oxford, 1971.
- ^ Такуми Касаи, Сюсаку Савато, Сигеки Ивата, Тридцать четыре сравнения необходимы для сортировки 13 элементов, LNCS 792, 260-269, 1994.
- ^ Марчин Печарски, Для сортировки 13 элементов требуется 34 сравнения, LNCS 2461, 785–794, 2002.
- ^ а б c Марцин Печарски, Новые результаты в сортировке с минимальным сравнением, Алгоритмика 40 (2), 133–145, 2004.
- ^ Марцин Печарски, Компьютерное исследование поз, докторская диссертация, Варшавский университет, 2006.
- ^ Печарски, Марцин (2007). «Алгоритм Форда-Джонсона по-прежнему непревзойден для менее чем 47 элементов». Инф. Процесс. Латыш. 101 (3): 126–128. Дои:10.1016 / j.ipl.2006.09.001.
- ^ а б Ченг, Вэйи; Лю, Сяогуан; Ванга, банда; Лю, Цзин (октябрь 2007 г.). "最少 比较 排序 问题 中 S (15) 和 S (19) 的 解决" [Результаты S (15) и S (19) к задаче сортировки по минимальному сравнению]. Журнал Frontiers of Computer Science and Technology (на китайском языке). 1 (3): 305–313.
- ^ Печарски, Марцин (3 августа 2011 г.). «К оптимальной сортировке 16 элементов». Acta Universitatis Sapientiae. 4 (2): 215–224. arXiv:1108.0866. Bibcode:2011arXiv1108.0866P.
Рекомендации
- Дональд Кнут. Искусство программирования, Том 3: Сортировка и поиск, Второе издание. Аддисон-Уэсли, 1997. ISBN 0-201-89685-0. Раздел 5.3.1: Сортировка по минимальному сравнению, стр. 180–197.