На сайте Алгоритмы сортировки делается следующее заявление:
Идеальный алгоритм сортировки будет иметь следующие свойства:
- Стабильный: равные ключи не переупорядочены.
- Работает на месте, требуя дополнительного пространства.
- Сравнение ключей в худшем случае .
- В худшем случае свопы.
- Адаптивный: Ускоряется до когда данные почти отсортированы или когда уникальных ключей мало.
Не существует алгоритма, который обладает всеми этими свойствами, и поэтому выбор алгоритма сортировки зависит от приложения.
У меня вопрос, правда ли, что
нет алгоритма [сортировки], который имеет все эти свойства
и если да, то почему? Что в этих свойствах делает невозможным их одновременное выполнение?
algorithms
sorting
Джеймс Фолкон
источник
источник
Ответы:
WikiSort и GrailSort - два сравнительно недавних алгоритма, которые позволяют проводить стабильные сравнения ключей худшем случае . К сожалению, я не понимаю их достаточно хорошо, чтобы знать, приближаются ли они к O ( n ) перестановкам или являются адаптивными, поэтому я не знаю, нарушают ли они четвертое и пятое условия, которые у вас есть.O ( n l g ( н ) ) O ( n )
Посмотрев на статью «Стабильное слияние на основе коэффициентов», выполненную Пок-Соном Кимом и Арне Куцнером, на которую ссылается страница WikiSort GitHub, Ким и Куцнер утверждают, что у них есть операция «слияния», которая есть (WikiSort - это вариант Mergesort), но я не уверен, переводит ли это на WikiSort сO(n)перестановками. Считается, что GrailSort работает быстрее (на странице WikiSort GitHub), поэтому я могу предположить, что, скорее всего, оба они имеютO(n) вхудшем случаеи являются адаптивными.O ( м ( нм+ 1 ) ) O ( n ) O ( n )
Если кому-то удастся понять WikiSort и / или GrailSort, я был бы признателен, чтобы они также ответили на мой открытый вопрос об этом.
источник
Сглаживание Дейкстры близко, но не стабильно.
источник
Ни один из известных алгоритмов не удовлетворяет всем этим свойствам. Эти свойства стали востребованы, когда мы разработали больше алгоритмов сортировки. Например, пузырьковая сортировка (возможно, самый примитивный алгоритм сортировки), скорее всего, была нестабильной в первой реализации, но была разработана, чтобы быть стабильной, так как компьютерные ученые стремились сделать ее более эффективной в более поздних реализациях. Итак, компьютерные ученые, скорее всего, выбрали лучшие черты из лучших алгоритмов, и в результате вы составили список всех этих желательных черт. В действительности трудно иметь лучшее из всех миров во всем. Не возможно, но возможно невозможно с нашими нынешними архитектурами.
источник
(Хотя это старый вопрос, я наткнулся на него, как и другие.)
Действительно, существует алгоритм, который удовлетворяет (1) - (4) и второй половине (5), поэтому он очень близок к вышеуказанному требованию. Он описан в [1] и объединяет несколько приемов, изобретенных за последние десятилетия.
[1]: Франческини, Г. Теория компьютерных систем (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1
источник