Чому рандомізований Quicksort має O (n log n) найгірший час виконання


18

Рандомізоване швидке сортування - це розширення Швидкого сортування, в якому елемент зведення вибирається випадковим чином. Яка може бути найгірша часова складність цього алгоритму. На мою думку, це має бути , як найгірший випадок, коли випадково обраний шарнір вибирається у відсортованому або зворотному сортованому порядку. Але в деяких текстах [1] [2] його найгірший час складності в часі записується якO(n2)O(nlogn)

Що правильно?


3
Ви повинні це "якийсь текст", про який ви говорите. Там є щось приховане. Ви знайдете його, якщо прочитаєте ще раз цей «текст»
AJed

Примітка: Посилання [1] мертве. Посилання [2] чітко вказує, що алгоритм є рандомізованим, тому для будь-якого входу у вас не "час виконання", а "очікуваний час виконання". І очікуваний час виконання для найгіршого можливого вводу - O (n log n).
gnasher729

Відповіді:


18

Обидва джерела посилаються на "найгірший очікуваний час роботи" Я здогадуюсь, це стосується очікуваної потреби в часі, яка відрізняється від абсолютно гіршого випадку.О(нжурналн).

У Quicksort зазвичай є абсолютна найгірша вимога часу . Найгірший випадок виникає, коли на кожному кроці процедура розбиття розбиває масив n- довжини на масиви розміром 1 і n - 1 . Цей "невдалий" вибір елементів зведення має вимагати O ( n ) рекурсивних викликів, що призводить до гіршого випадку O ( n 2 ) .О(н2)н1н-1О(н)О(н2)

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

Редагувати:

Відповідно до коментаря Банді, ви можете усунути найгірший варіант вибору послідовності, завжди вибираючи серединний елемент як опорний. Оскільки пошук медіани займає час , це дає worst ( n log n ) найгірший показник. Однак, оскільки рандомізований кваксорт навряд чи натрапить на найгірший випадок, детермінований середній спосіб пошуку кваксорту рідко використовується.О(н)Θ(нжурналн)


Тож загалом ми можемо сказати, що він поводиться як квадратичний у гіршому випадку
Атінеш

@Atinesh Ні, принаймні, якщо ти маєш на увазі під цим. Θ
Рафаель

Я вважаю, що правильно сказати, що найгірший показник рандомізованого квакспорту - О(н2).
Джеймс Еванс

4
У найгіршому випадку Quicksort може зайняти лише часу, якщо використовується алгоритм лінійного часу, щоб знайти медіану як опорну. Звичайно, як правило, рандомізований кікспорт має кращі практичні показники. Θ(нжурналн)
Бангі

6

Ви пропускали, що ці тексти говорять про "найгірший очікуваний час роботи", а не про "найгірший час виконання".

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

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

Таким чином, ми обчислюємо "очікуваний час виконання" для кожного можливого введення, і щоб отримати "найгірший очікуваний час виконання", ми знаходимо один можливий вклад, де очікуваний час виконання найгірший. І, мабуть, вони показали, що найгірший випадок для "очікуваного часу виконання" - це просто O (n log n). Я не був би здивований, якби вибір випадковим першим стрижнем змінив найгірший очікуваний час виконання на o (n ^ 2) (маленький o замість Big O), тому що лише декілька з п півотрів призведуть до гіршого випадку поведінка.


2

Зауважте, що очікування / середнє значення має перевищувати дві речі: вхідна перестановка та повороти (по одному на розділення).

нΘ(нжурналн)

Θ(нжурналн)

Підсумок, перевірте джерела (джерела), яку реалізацію вони використовують та яку кількість вони вважають випадковою відповідністю. закріплені в їх аналізі.


Розглянемо це питання postimg.org/image/fiurc4z87, яке я задав на іспиті. Яку відповідність ви б запропонували, я думаю (c)
Атінеш

1
@Atinesh Я думаю, що моя відповідь дає вам достатньо інформації щодо цього.
Рафаель

-1

О(н2)

Найгірший випадок для рандомізованого квакспорту - це ті ж елементи, що і введення. Вихід: 2,2,2,2,2,2

Т(н)=Т(н-1)+нО(н2)


Ось якщо у вас надзвичайно спритна реалізація швидкості. Будь-яка гідна реалізація відбудеться в першому розділі обміну №1 та №6, №2 та №5, №3 та №4, а потім сортуватиме два підрядні довжини 3.
gnasher729

Я здогадуюсь, що у вас є <=, а також> = обидва вказівники, які сканують на LHS та RHS. Ось чому ви так говорите. '=' асоціюється з будь-яким з покажчиків, а не з обома. У цьому випадку дерево рекурсії виростає до n.
пратья

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