Чи немає алгоритму сортування з усіма конкретними бажаними властивостями?


22

На веб-сайті сортування алгоритмів подано таке твердження:

Ідеальний алгоритм сортування матиме такі властивості:

  • Стабільний: рівні ключі не впорядковані.
  • Діє на місці, вимагаючи O(1) додаткового місця.
  • Найгірші порівняння ключів O(nlg(n)) .
  • Найгірші ( O(n) свопи.
  • Адаптивний: збільшує швидкість до O(n) коли дані майже відсортовані або коли мало унікальних клавіш.

Не існує алгоритму, який би мав усі ці властивості, і тому вибір алгоритму сортування залежить від програми.

Моє запитання, чи це правда?

не існує [сортування] алгоритму, який би мав усі ці властивості

і якщо так, то чому? Що з цих властивостей робить їх одночасно неможливим виконання?


4
Вони, ймовірно, просто означають, що жоден відомий алгоритм сортування не має всіх цих властивостей.
Yuval Filmus

3
Чи є навіть одна сортування на основі порівняння 3 і 4?
сіра борода

4
@JohnFeminella Вона повинна по крайней мере , порівнянь , але як це говорить нам нічого про кількість свопи? Ω(nlog(n))
Том ван дер Занден

2
@JohnFeminella Nitpick: "краще, ніж " - це порожнє твердження. Ви повинні використовувати Ω або Θ, якщо ви хочете поговорити про нижчі межі. O(_)ΩΘ
Рафаель

1
Будь-який алгоритм сортування може бути стабільним, додавши в якості вторинного ключа вихідне положення елемента. Однак це робить його не на місці, оскільки це займе O (n) додаткової пам'яті.
Джованні Ботта

Відповіді:


6

WikiSort та GrailSort - це два досить недавні алгоритми, які роблять на місці стабільне, найгірше порівняння ключів . На жаль, я не розумію їх досить добре, щоб знати, чи підходять вони до O ( n ) свопів чи адаптивні, тому не знаю, чи порушують вони умови четвертого та п’ятого.O(n lg(n))O(n)

Дивлячись на папері «Ratio основі стабільної в місці злиття», по Пок-Сон Кім і Арне Kutzner пов'язані сторінкою WikiSort GitHub, Кім і Kutzner вимога мати «злиття» операцію , яка є (WikiSort - це варіант Mergesort), але я не впевнений, що це означає WikiSort, що маєO(n)свопів. Стверджується, що GrailSort є швидшим (на сторінці WikiSort GitHub), тому я міг би уявити, що, ймовірно, вони мають найгірший випадокO(n)і є адаптивними.O(m(nm+1))O(n)O(n)

Якщо комусь вдасться зрозуміти WikiSort та / або GrailSort, я би вдячний їм і відповів на моє відкрите запитання про це



3

Жоден відомий алгоритм не задовольняє всім цим властивостям. Ці властивості стали затребувані, коли ми розробили більше алгоритмів сортування. Наприклад, сортування бульбашок (імовірно, найпримітивніший алгоритм сортування), швидше за все, був нестабільним у першій реалізації, але був розроблений таким чином, щоб бути стабільним, оскільки комп'ютерні вчені прагнули зробити його більш ефективним у наступних впровадженнях. Отже, вчені-комп’ютери, швидше за все, відібрали найкращі риси з найкращих алгоритмів, і, як результат, ви склали список усіх цих бажаних рис. Насправді важко мати найкращі з усіх світів у будь-чому. Не неможливо, але можливо неможливо з нашими сучасними архітектурами.

PS Використовуйте Big-O ( ) як асимптотичну верхню межу, а Big-Omega ( Ω ) як нижню межу асимптотики. Тета ( Θ ) для проміжків .OΩΘ


1
Ласкаво просимо! Це добре, але я не бачу, яка стабільність стосується ефективності: це просто перевага, щоб розділи списку з однаковими клавішами не були «випадковими» умовами алгоритму.
Девід Річербі

Так, але це доказово можливо або неможливо?
Джеймс Фолкон

1

(Хоча це старе питання, я натрапив на нього, і так могли б інші.)

Дійсно, існує алгоритм, який задовольняє (1) - (4) та другу половину (5), тому наближається до вищезазначеної вимоги. Він описаний у [1] та поєднує в собі кілька хитрощів, винайдених за останні десятиліття.

[1]: Franceschini, G. Theory Comput Syst (2007) 40: 327. https://doi.org/10.1007/s00224-006-1311-1

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.