Наименьшее количество сравнений, необходимых для сортировки (заказа) 5 элементов


22

Найдите наименьшее количество сравнений, необходимое для сортировки (упорядочения) пяти элементов, и разработайте алгоритм, который сортирует эти элементы, используя это количество сравнений.

Решение : их 5! = 120 возможных результатов. Поэтому двоичное дерево для процедуры сортировки будет иметь по крайней мере 7 уровней. Действительно, ≥ 120 означает≥ 7. Но 7 сравнений недостаточно. Наименьшее количество сравнений, необходимых для сортировки (упорядочивания) пяти элементов, составляет 8. ч2hh

Вот мой актуальный вопрос: я найти алгоритм , который делает это в 8 сравнения , но как я могу доказать , что это не может быть сделано в 7 сравнений?


Ответы:


27

Решение неверное. Демут [1; через 2, сек 5.3.1] показывает, что пять значений могут быть отсортированы с использованием только семи сравнений, т. Е. Нижняя граница «теоретической информации» в этом случае является жесткой.

Ответ - метод, разработанный для n=5 , а не общий алгоритм. Это тоже не очень приятно. Это схема:

  1. Сортировка первых двух пар.

  2. Закажите пары по их соответствующему большему элементу.

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

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

  4. Вставьте c в результат шага 3.

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

Поскольку я не вижу, как написать «хороший» псевдокод этого, посмотрите здесь для протестированной (и, надеюсь, читаемой) реализации.


  1. Кандидат наук. Дипломная работа (Стэнфордский университет) Х.Б. Демута (1956)

    См. Также Электронная сортировка данных по HB Demuth (1985)

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

5
Тест дает пять баллов, чтобы показать, что это невозможно. Интересно, сколько очков вы получите за ответ :-) (вероятно, ноль, поскольку тест не может быть ошибочным).
gnasher729

0

Теоретическая нижняя граница сортировки на основе сравнения равна . То есть, чтобы отсортировать элементов, используя только сравнения или требуется по крайней мере логарифм по основанию 2 дляследовательно, операций.log(n!)n<>n ! log ( 5 ! ) 6,91n!log(5!)6.91

Поскольку и , используя двоичное дерево решений, вы можете отсортировать 5 элементов за 7 сравнений. Дерево точно определяет, какая из 120 перестановок у вас есть, а затем выполняет перестановки, необходимые для его сортировки.5!=12027=128

Это не красивый или короткий код, и вам, вероятно, следует использовать методы генерации кода для создания дерева решений и перестановок, а не кодировать его вручную, но это работает; и доказуемо работает для любой возможной перестановки из 5 элементов, доказывая тем самым, что вы можете сортировать 5 элементов не более чем в 7 сравнениях.


Насколько я помню, теоретическая нижняя граница дает асимптотическую нижнюю оценку (т. ). Вы абсолютно уверены, что постоянный фактор равен 1? Ω(nlogn)
dkaeae

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

-1

я думал о быстрой сортировке. Вы выбираете в качестве точки поворота элемент, который просто является средним элементом. сравните ось с оставшимися 4 пунктами, в результате чего будут отсортированы две стопки. каждая из этих куч может быть отсортирована за 1 сравнение. если я не совершил ужасную ошибку, 5 пунктов были полностью отсортированы всего за 6 сравнений, и я думаю, что это абсолютное наименьшее количество сравнений, необходимых для выполнения работы. Первоначальный вопрос был найти наименьшее количество сравнений для сортировки 5 элементов.


1
Как можно отсортировать кучу из 3 элементов в одном сравнении?
xskxzr

о какой куче 3 элемента ты говоришь? то, что я описал выше, производит 2 кучи по 2 элемента после первого прохода.
Скоттик

Я думал, что вы используете случайный элемент в качестве оси. Как вы можете выбрать средний элемент в качестве основного в 4 сравнениях?
xskxzr

это не то, что я говорю. сверху "Так как 5! = 120 .... используя двоичное дерево решений, вы можете отсортировать 5 элементов за 7 сравнений." число перестановок элементов равно 120, но должна быть ветвь, которая имеет только 6 сравнений, потому что для выполнения случайной выборки быстрой сортировки потребовалось всего 6. одна из 120 перестановок предназначена для отсортированного списка. эта ветвь может содержать всего 4 сравнения.
Скоттик

-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/Comparison_sort#Number_of_comparisons_required_to_sort_a_list
Если вы знаете все до сравнений, вы можете пойти вниз с сравнениями. Мой средний показатель по 4 числам составляет 3,96 / 1024 всех комбинаций.


2
Это не отвечает на вопрос. Вопрос состоит в том, как доказать, что нет способа сортировки, используя только 7 сравнений. Чтобы использовать ваш подход, мы должны были бы перечислить все алгоритмы, которые используют не более 7 сравнений. Я думаю, что таких алгоритмов слишком много, чтобы перечислять их в разумные сроки. В любом случае, я не вижу, что это добавляет к существующему ответу, который уже дал полный ответ на вопрос. Мы бы предпочли, чтобы вы сосредоточились на ответах на вопросы, где вы могли бы добавить что-то новое.
DW

Добавить графический и совет для ALG. для прогнозирования значения CMP до, чем CMP. И его минимум 7, другие источники 8, правда мин. это 4 !!! 4 - работа только для порядка asc / desc. Пример 1: 00000 01234 43210 10000 ... Пример 2: Вставить в середину: 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. мин-макс 3-6. Можно поменять на 5 и проверить его влаг.
Питер Млих
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.