Чому сортування селекції швидше, ніж сортування бульбашок?


28

У Вікіпедії написано, що "... сортування вибору майже завжди перевершує сортування бульбашок та сортування гномів". Чи можете мені хто-небудь пояснити, чому сортування селекції вважається швидшим, ніж сортування бульбашок, хоча вони мають:

  1. Найгірша складність часу :O(n2)

  2. Кількість порівнянь : O(n2)

  3. Найкраща складність часу :

    • Сорт бульбашки:O(n)
    • Сортування вибору:O(n2)
  4. Середня складність часу :

    • Сорт бульбашки: O(n2)
    • Сортування вибору: O(n2)

Відповіді:


32

Усі складнощі, які ви надали, є правдивими, однак вони наведені в нотації Big O , тому всі додаткові значення та константи опущені.

Щоб відповісти на ваше запитання, ми повинні зосередитися на детальному аналізі цих двох алгоритмів. Цей аналіз можна зробити вручну або знайти у багатьох книгах. Я буду використовувати результати мистецтва Кнута в програмі "Комп'ютерне програмування" .

Середня кількість порівнянь:

  • Сорт бульбашки : 12(N2NlnN(γ+ln21)N)+O(N)
  • Сортування вставки :14(N2N)+NHN
  • Сортування вибору :(N+1)HN2N

Тепер, якщо побудувати ці функції, ви отримаєте щось подібне: сюжет сюжет2

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

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

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


У мене є проблема з тим, що "ми можемо випадково переставити послідовність введення для отримання аварійного випадку". Чому це можна зробити швидше, ніж час, необхідний для сортування?
Сашо Ніколов

1
Ви можете переставити будь-яку послідовність чисел, це займе часу, де - довжина послідовності. Очевидно, що будь-який алгоритм сортування на основі порівняння повинен мати складність принаймні тому навіть якщо ви додасте до його складності, це не зміниться настільки сильно. У будь-якому випадку ми говоримо про порівняння, а не про час, складність часу залежить від впровадження та роботи машини, як я згадував у відповіді. NNO(NlogN)N
Bartosz Przybylski

Я думаю, що я був сонним, ти маєш рацію, послідовність може перетворюватися в лінійний час.
Сашо Ніколов

Оскільки , чи порівняння пов'язане правильним для вибору сортування? Схоже, ви маєте на увазі, що він робить середнє порівняння O (n log n). HN=Θ(logN)
templatetypedef

Гамма = 0,577216 - константа Ейлера-Машероні. Відповідна глава - "Мистецтво програмування", том 3, розділ 5.2.2 стор. 109 і 129. Як ви точно побудували випадок сортування міхура, особливо термін O (sqrt (N))? Ви просто нехтували нею?
mxmlnkn

11

Асимптотична вартість, або примітка, описує обмежуючу поведінку функції, оскільки її аргумент має тенденцію до нескінченності, тобто швидкості її зростання.O

Сама функція, наприклад, кількість порівнянь та / або свопів, може бути різною для двох алгоритмів з однаковою асимптотичною вартістю, за умови, що вони зростають з однаковою швидкістю.

Більш конкретно, для сортування бульбашок потрібно, в середньому, підміни за кожну запис (кожен запис переміщується по елементу від початкової позиції до його кінцевої позиції, і кожен своп включає дві записи), тоді як для сортування вибору потрібно лише (один раз знайдено мінімум / максимум, він поміняється один раз до кінця масиву).n/41

Щодо кількості порівнянь, сортування бульбашок вимагає порівняння порівнянь, де - максимальна відстань між початковою позицією запису та її кінцевою позицією, яка зазвичай більша за для рівномірно розподілених початкових значень. Однак вибір сортування завжди потребує порівняння .k×nkn/2(n1)×(n2)/2

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


1
це навіть дуже хороша відповідь
Grijesh Chauhan

яку книгу ви віддаєте перевагу?
Гріеш Чаухан

@GrijeshChauhan: Книги - справа смаку, тому прийміть будь-які рекомендації із зерном солі. Мені особисто подобається "Вступ до алгоритмів" Кормена, Лейзерсона та Рівеста, який дає хороший огляд по ряду тем, і серія "Мистецтво комп'ютерного програмування" Кнута, якщо вам потрібно більше / всі подробиці з будь-якої конкретної теми. Можливо, ви хочете перевірити, чи запитували про книги раніше тут, або опублікувати це питання, якщо це не так.
Педро

Для мене третій пункт у вашій відповіді - це фактична відповідь. Не графіки для великих входів, наведені в іншій відповіді.
переоцінка

3

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

При використанні вибору сортування він міняється nмаксимум разів. але при використанні сортування бульбашок він майже змінюється n*(n-1). І очевидно, що час читання менше, ніж часу на запис навіть у пам'яті. Час порівняння та інший час роботи можна ігнорувати. Тому час підкачки є критичним вузьким місцем проблеми.


Я думаю, що інша відповідь Bartek є більш розумною, але я не можу проголосувати чи коментувати ... До речі, час написання все-таки впливає більше, і я сподіваюся, що він може це врахувати, якщо побачить це і погодиться.
simonmysun

Ви не можете просто ігнорувати кількість порівнянь, оскільки є випадки використання, коли час, витрачений на порівняння двох елементів, може значно перевищити час, витрачений на обмін двома елементами. Розглянемо пов'язаний список надзвичайно довгих рядків (скажімо, по 100 тис. Символів у кожному). Читання в кожному рядку займе набагато більше часу, ніж переназначення вказівника.
Ірвін Лім

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