Найменша кількість порівнянь, необхідних для сортування (упорядкування) 5 елементів


22

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

Рішення : Є 5! = 120 можливих результатів. Тому двійкове дерево для процедури сортування матиме щонайменше 7 рівнів. Дійсно,2h ≥ 120 означаєh ≥ 7. Але 7 порівнянь недостатньо. Найменша кількість порівнянь, необхідних для сортування (упорядкування) п’яти елементів, становить 8.

Ось мій власне питання: я знайшов алгоритм, який робить це в 8 порівняння, але як я можу довести, що це не можна зробити за 7 порівнянь?


Відповіді:


27

Рішення неправильне. Демут [1; через 2, сек. 5.3.1] показано, що п'ять значень можна сортувати, використовуючи лише сім порівнянь, тобто нижня межа "теоретичної інформації" в цьому випадку є тісною.

Відповідь - це метод, пристосований до , а не загальний алгоритм. Це теж не дуже приємно. Це контур:n=5

  1. Сортуйте перші дві пари.

  2. Замовте пари wrt їх відповідний більший елемент.

    Назвіть результат ; ми знаємо a < b < d і c < d .[a,b,c,d,e]a<b<dc<d

  3. Вставте в [ a , b , d ] .e[a,b,d]

  4. Вставте в результат кроку 3.c

Перший крок чітко займає два порівняння, другий лише один. Останні два кроки проводять два порівняння; ми вставляємо в триелементний список в обох випадках (на кроці 4. зауважимо, що з ми знаємо, що c менший, ніж останній елемент списку, що знаходиться в руці) і порівнюємо спочатку із середнім елементом. Це в цілому сім порівнянь.c<dc

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


  1. Кандидат наук дисертація (Стенфордський університет) Б. Б. Демут (1956)

    Дивіться також Електронне сортування даних за HB Demuth (1985)

  2. Сортування та пошук Дональд Е. Кнут; Мистецтво комп’ютерного програмування Vol. 3 (2-е видання, 1998 р.)

5
Тест дає п’ять балів, тому що показати це неможливо. Цікаво, скільки балів ви отримаєте за свою відповідь :-) (Можливо, нуль, оскільки тест не може помилитися).
gnasher729

0

log(n!)n<>n!log(5!)6.91

5!=12027=128

Це не гарний або короткий код, і, ймовірно, ви повинні використовувати методи генерації коду для створення дерева рішень та свопів, а не кодування його вручну, але він працює; і, очевидно, працює для будь-якої можливої ​​перестановки 5 предметів, тим самим підтверджуючи, що ви можете сортувати 5 елементів у не більше ніж 7 порівняннях.


Ω(nlogn)

Теоретична нижня межа для найгіршого випадку - це ceil (log2 (n!)), Тому що існує саме n! перестановки, і якщо є k порівнянь, вам потрібно 2 ^ k ≥ n !. Це не просто постійний фактор 1, це точно.
gnasher729

-1

я думав швидко. ви вибираєте в якості стрижневого елемент, який щойно є середнім. порівняйте шарнір з рештою 4-х елементів, у результаті чого дві палі будуть відсортовані. кожну з цих груп можна сортувати за 1 порівняння. якщо я не допустив жахливої ​​помилки, 5 предметів були повністю відсортовані всього за 6 порівнянь, і я думаю, що це абсолютна найменша кількість порівнянь, необхідних для виконання роботи. оригінальним питанням було знайти найменшу кількість порівнянь для сортування 5 елементів.


1
Як можна сортувати купу з 3 елементів за 1 порівняння?
xskxzr

про яку купу 3 елементів ви говорите? те, що я описав вище, створює 2 палі з 2 елементів після першого проходу.
scottyc

Я подумав, що ви використовуєте випадковий елемент як опорний. Як можна вибрати середній елемент як опорний за 4 порівняння?
xskxzr

це не те, що я говорю. зверху "З 5! = 120 .... за допомогою двійкового дерева рішень ви можете сортувати 5 елементів у 7 порівняннях." кількість перестановок елементів становить 120, але повинна бути гілка, яка має лише 6 порівнянь, тому що для виконання завдання у випадковому зразку, що працює в кваксорті, було потрібно лише 6. одна з 120 перестановок призначена для відсортованого списку. ця гілка може містити всього 4 порівняння.
scottyc

-2

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

Мінімальний
a <b <c = 2
a <b <c <d = 3
a <b <c <d <e = 4

Максимум
3 ^ 3
4 ^ 4
5 ^ 5

Вставте в середнє вживання 3-6 на 4 числа.
Об’єднання використовуйте 4-5 на 4 числа.
Мінімальне порівняння за вікі - 5 для 4 чисел :) Для 5 - це 7. Ви використовуєте 8, ще стільки.
https://en.wikipedia.org/wiki/Comppare_sort#Number_of_comparisons_required_to_sort_a_list
Якщо ви знаєте все до порівнянь, ви можете перейти до порівнянь. Мій середній показник для 4 чисел - 3,96 / 1024 у всіх комбінаціях.


2
Це не відповідає на запитання. Питання задає питання, як довести, що немає можливості сортувати, використовуючи лише 7 порівнянь. Для використання вашого підходу нам доведеться перерахувати всі алгоритми, які використовують не більше 7 порівнянь. Я думаю, що занадто багато таких алгоритмів для перерахування за розумну кількість часу. У будь-якому випадку я не бачу, що це додає до існуючої відповіді, яка вже дала повну відповідь на питання. Ми вважаємо за краще зосередитись на відповіді на запитання, де можна додати щось нове.
DW

Додати графічний та підказки для alg. для прогнозування значення cmp від раніше cmp. І його хв 7, інші джерела 8, справжній хв. це 4 !!! 4 - робота лише для порядку підйому / desc. Ex1: 00000 01234 43210 10000 ... Ex2: Вставити до середини: 43210, почати 4, отримати 3, cp 4> 3, отримати 2, cp 4> 2, cp 3> 3, отримати 1, cp (середина) 3> 1, cp 2> 1, отримати 0, cp (середина) 3> 0, cp 2> 0, cp 1> 0 ... 8 cmp. 7 може бути можливим для конкретного порядку або alg. Ви можете подивитися на моїй сторінці 4 числа mlich.zam.slu.cz/js-sort/x-sort-x2.htm , середній 3,96. min-max 3-6 Може змінити на 5 і протестувати його alg.
Пітер Мліч
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.