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


9

У рамках домашнього завдання, що стосується впровадження інтросортату, мене запитують, чому для цього використовується гипсорт, а не об'єднання (або інші алгоритми ). О(нжурнал(н))

Introsort - це гібридний алгоритм сортування, який забезпечує як швидку середню продуктивність, так і (асимптотично) оптимальну найгіршу ефективність. Він починається з швидкості ретрансляції і переходить на велику кількість, коли глибина рекурсії перевищує рівень, заснований на (логарифмі) кількості сортованих елементів. ( Вікіпедія , знайдено 2014-травня-06.)

Єдиною причиною, про яку я можу подумати, є те, що нагромадження "на місці" ... Але я не розумію, чому це має значення тут.


3
Якщо інтросорт є частиною питання, вам доведеться сказати нам, що це таке, перш ніж ми зможемо щось сказати.
Луї

1
Ласкаво просимо до інформатики ! Зауважте, що ви можете використовувати LaTeX тут для набору математики більш читаним способом. Дивіться тут короткий вступ.
FrankW

Нас просто просять ввести псевдокод для введення сортування, а згодом нас запитують, чому він використовує гипсорт, а не злиття.
користувач672009

@ user672009 У цьому випадку запишіть код для будь-якого і подивіться, що ви знайдете. Причина може бути, а може і не бути пов'язаною з виконанням.
Рафаель

2
Я зробив висновок, що оскільки сортується на місці, нам потрібно використовувати ще один алгоритм сортування місця. Однак я відкритий для введення.
користувач672009

Відповіді:


9

2 недоліки швидкості скорочення полягають у тому, що йому потрібен додатковий простір (для збереження несортованих інтервалів), а неправильний вибір повороту (або надумані послідовності, призначені для того, щоб вибрати неправильний шар), може призвести до того, що він буде алгоритм додаткового простору часу та .О(журналн)О(н2)О(н)

Перехід на велику кількість, коли глибина рекурсії стає занадто великою (приблизно ) означає, що у нас є гарантоване верхнє обмеження, яке становить час та додатковий простір.журналнО(нжурналн)О(журналн)

Необхідність додаткового простору Heapsort робить його кращим вибором mergsort, де для надуманого масиву, який міг би бути великим.О(1)О(н)н

Причина, що гипсорт не використовується для повного сортування, полягає в тому, що він повільніше, ніж кваксорт (частково завдяки прихованим константам у великому виразі O, а частково і в кеш-поведінці)


Але використовується купажка ... і я підозрюю, що це так, як кікспорт.
user672009

Я підозрюю, що @ user672009 плутає ваше останнє речення. Я б запропонував уточнити, що інтрозорт не починається з великої кількості, тому що це повільніше.
Мандрівна логіка

@ user672009, O(1)простір означає «на місці», а кікспорт не зовсім на місці, оскільки цього вимагаєO(lgn)додатковий простір.
Мандрівна логіка

Крім того, у кучері є набагато більше пропусків кеш-пам'яті, ніж у введення.
noɥʇʎԀʎzɐɹƆ

Хороша реалізація Quicksort у найгіршому випадку не потребує простору O (n) до тих пір, поки вона запам'ятовує більший підінтервал на стеку та обробляє менший негайно.
gnasher729
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.