Який захід розладу використовувати при аналізі Quicksort


9

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

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


Хороший показник безладу для подібних речей - складність Колмогорова. Це в основному говорить про те, що найбільш невпорядкованими є рядки, які є нестислимими. Це призводить до методу несприйнятливості, який використовувався для виконання таких завдань, як аналіз середнього випадку алгоритмів сортування, та пошуку зв'язку між середнім та найгіршим випадком.
Петро

Слід зазначити, що я малогранник ... Я шукав щось трохи прямо, як, можливо, один із заходів у цій роботі (я просто не знаю, який із них): citeseerx.ist.psu. edu / viewdoc / Summary? doi = 10.1.1.45.8017
Роберт С. Барнс


Ви повинні підозрювати помилку програмування, а не супротивник, який перетворюється. Просто сортуйте скрембліровану послідовність цілих чисел від 1 до N, щоб побачити, чи сортує ваш алгоритм!
Ів Дауст

@YvesDaoust Я не думаю, що це насправді має значення. Кількість "немонотонності" насправді є лише складністю Колмогорова рядка журналу довжинищо кодує впорядкування елементів у послідовності. Звичайно, це не обчислюється, і ви повинні думати про такі глибокі рядки, як псевдовипадкові, але це корисно в тому сенсі, що кожна міра розладу по суті є наближенням складності Колмогорова. І вам не потрібно обчислювати це, щоб доводити речі. Багато методів складності було показано методом несприйнятливості. logn!
Петро

Відповіді:


1


Розділ Ломуто проти Хоара Ломуто страждає при сортуванні рівних клавіш, тоді як розділ Хоара - ні.
Обидві схеми розділів однаково страждають при використанні стрижня, віддаленого від медіани.

Міра розладу
Міру розладу вибрати для цілей хитрості просто.
Відповідь: Наскільки віддаленою від медіани є фіксований шарнір порівняно зі випадковими даними?
Якщо ви наполягаєте на тому, щоб використовувати розділ Lomuto і якщо ви вважаєте, що дозволені повторювані значення, вам потрібно додати наступний тест на випадковість:
B: Скільки є повторюваних елементів у порівнянні з випадковими.

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

Обидва заходи є тривіальними для кількісного визначення статистичних даних.

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

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

*) або декількох поворотів, якщо ви вибираєте кращий з x поворотів.

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