Сортировка слиянием-вставкой
В информатике , сортировка слиянием-вставкой или алгоритм Форда-Джонсона представляет собой алгоритм сортировки сравнения опубликованный в 1959 году Л. Р. Фордом-младшим и Селмером М. Джонсоном . [1] [2] [3] [4] он использует меньше сравнений, В худшем случае чем лучшие ранее известные алгоритмы, двоичная сортировка вставкой и сортировка слиянием . [1] и в течение 20 лет это был алгоритм сортировки с наименьшим количеством известных сравнений. [5] Хотя это и не имеет практического значения, оно сохраняет теоретический интерес в связи с задачей сортировки с минимальным числом сравнений. [3] Тот же алгоритм, возможно, был независимо открыт Станиславом Трибулой и Ченом Пингом. [4]
Алгоритм
[ редактировать ]Сортировка слиянием-вставкой выполняет следующие шаги для входных данных: из элементы: [6]
- Сгруппируйте элементы в пары элементов произвольно, оставляя один элемент непарным, если количество элементов нечетное.
- Выполнять сравнения, по одному на пару, для определения большего из двух элементов в каждой паре.
- Рекурсивно сортировать более крупные элементы из каждой пары, создавая отсортированную последовательность из входных элементов в порядке возрастания.
- Вставьте в начало элемент, который был в паре с первым и наименьшим элементом .
- Вставьте оставшиеся элементы в , по одному, со специально выбранным порядком вставки, описанным ниже. Используйте двоичный поиск в подпоследовательностях (как описано ниже), чтобы определить позицию, в которую должен быть вставлен каждый элемент.
Алгоритм разработан с учетом того факта, что двоичный поиск, используемый для вставки элементов в наиболее эффективны (с точки зрения анализа наихудшего случая), когда длина искомой подпоследовательности на единицу меньше степени двойки . Это связано с тем, что для этих длин все результаты поиска используют одинаковое количество сравнений друг с другом. [1] Чтобы выбрать порядок вставки, обеспечивающий такую длину, рассмотрим отсортированную последовательность после шага 4 схемы выше (перед вставкой остальных элементов),и пусть обозначают th элемент этой отсортированной последовательности. Таким образом,
где каждый элемент с сопряжен с элементом который еще не был вставлен. (нет элементов или потому что и были в паре друг с другом.) Если нечетно, оставшийся непарный элемент также должен быть пронумерован как с больше, чем индексы парных элементов.Затем последний шаг приведенной выше схемы можно расширить до следующих шагов: [1] [2] [3] [4]
- Разделить невставленные элементы на группы со смежными индексами. Есть два элемента и в первой группе, а суммы размеров каждых двух соседних групп образуют последовательность степеней двойки. Таким образом, размеры групп составляют: 2, 2, 6, 10, 22, 42,...
- Упорядочите невставленные элементы по группам (от меньших индексов к большим), но внутри каждой группы упорядочивайте их от больших индексов к меньшим. Таким образом, порядок становится
- Используйте этот порядок для вставки элементов в . Для каждого элемента , используйте двоичный поиск с начала до, но не включая чтобы определить, куда вставить .
Анализ
[ редактировать ]Позволять обозначают количество сравнений, которые делает сортировка слиянием-вставкой, в худшем случае, при сортировке элементы.Это количество сравнений можно разбить на сумму трёх слагаемых:
- сравнение пар предметов,
- сравнения для рекурсивного вызова и
- некоторое количество сравнений для двоичных вставок, используемых для вставки остальных элементов.
В третьем члене наихудшее количество сравнений для элементов первой группы равно двум, поскольку каждое из них вставляется в подпоследовательность элементов. длиной не более трех. Первый, вставляется в трехэлементную подпоследовательность . Затем, вставляется в некоторую перестановку трехэлементной подпоследовательности , или в некоторых случаях в двухэлементную подпоследовательность . Аналогично, элементы и второй группы каждый вставляется в подпоследовательность длиной не более семи с использованием трех сравнений. В более общем смысле, наихудшее количество сравнений элементов в эта группа , поскольку каждая из них вставляется в подпоследовательность длиной не более . [1] [2] [3] [4] Суммируя количество сравнений, использованных для всех элементов, и решая полученное рекуррентное соотношение ,этот анализ можно использовать для расчета значений , давая формулу [7]
или, в закрытом виде , [8]
Для количество сравнений [1]
Связь с другими видами сравнения
[ редактировать ]Алгоритм называется сортировкой вставкой слиянием, потому что первоначальные сравнения, которые он выполняет перед рекурсивным вызовом (объединение произвольных элементов в пары и сравнение каждой пары), такие же, как и начальные сравнения сортировки слиянием .в то время как сравнения, которые он выполняет после рекурсивного вызова (используя двоичный поиск для вставки элементов один за другим в отсортированный список), следуют тому же принципу, что и сортировка вставкой . В этом смысле это гибридный алгоритм , сочетающий в себе сортировку слиянием и сортировку вставкой. [9]
Для небольших входов (до ) его количество сравнений равно нижней границе сортировки сравнения . Однако для больших входных данных количество сравнений, выполняемых алгоритмом вставки слиянием, превышает эту нижнюю границу.Сортировка вставкой слиянием также выполняет меньше сравнений, чем сортировка чисел , которая подсчитывает сравнения, выполненные при двоичной сортировке вставкой или в худшем случае сортировке слиянием. Числа сортировки колеблются между и , с тем же ведущим членом, но с худшим постоянным множителем в линейном члене более низкого порядка. [1]
Сортировка слиянием-вставкой — это алгоритм сортировки с минимально возможным сравнением для предметы всякий раз, когда , и у него наименьшее количество сравнений, известных для . [10] [11] В течение 20 лет сортировка слиянием-вставкой была алгоритмом сортировки с наименьшим количеством сравнений, известных для всех входных длин.Однако в 1979 году Гленн Манахер опубликовал другой алгоритм сортировки, который использовал еще меньше сравнений для достаточно больших входных данных. [3] [5] Остается неизвестным, сколько именно сравнений необходимо для сортировки, для всех , но алгоритм Манахераи более поздние рекордные алгоритмы сортировки использовали модификации идей сортировки вставкой слиянием. [3]
Ссылки
[ редактировать ]- ^ Jump up to: Перейти обратно: а б с д и ж г Форд, Лестер Р. младший ; Джонсон, Селмер М. (1959), «Турнирная задача», American Mathematical Monthly , 66 : 387–389, doi : 10.2307/2308750 , MR 0103159
- ^ Jump up to: Перейти обратно: а б с Уильямсон, Стэнли Гилл (2002), «2.31 Вставка слиянием (Форд – Джонсон)» , Комбинаторика для информатики , Дуврские книги по математике, Courier Corporation, стр. 66–68, ISBN 9780486420769
- ^ Jump up to: Перейти обратно: а б с д и ж Махмуд, Хосам М. (2011), «12.3.1 Алгоритм Форда – Джонсона» , Сортировка: теория распределения , Ряды Уайли в дискретной математике и оптимизации, том. 54, John Wiley & Sons, стр. 286–288, ISBN. 9781118031131
- ^ Jump up to: Перейти обратно: а б с д Кнут, Дональд Э. (1998), «Вставка слиянием», Искусство компьютерного программирования , Vol. 3: Сортировка и поиск (2-е изд.), стр. 184–186.
- ^ Jump up to: Перейти обратно: а б Маначер, Гленн К. (июль 1979 г.), «Алгоритм сортировки Форда-Джонсона не оптимален», Журнал ACM , 26 (3): 441–456, doi : 10.1145/322139.322145
- ^ В оригинальном описании Ford & Johnson (1959) элементы отсортированы в порядке убывания. Перечисленные здесь шаги меняют вывод в соответствии с описанием Кнута (1998) . Результирующий алгоритм выполняет те же сравнения, но вместо этого выводит данные в порядке возрастания.
- ^ Кнут (1998) приписывает формулу суммирования докторской философии 1960 года. диссертация А. Хадиана. Формула аппроксимации уже была дана Фордом и Джонсоном (1959) .
- ^ Гай, Ричард К .; Новаковски, Ричард Дж. (декабрь 1995 г.), « Ежемесячные нерешенные проблемы, 1969–1995», American Mathematical Monthly , 102 (10): 921–926, doi : 10.2307/2975272
- ^ Кнут (1998) , с. 184: «Поскольку это включает в себя некоторые аспекты слияния и некоторые аспекты вставки, мы называем это вставкой слиянием ».
- ^ Печарски, Марцин (2004), «Новые результаты в сортировке по минимальному сравнению», Algorithmica , 40 (2): 133–145, doi : 10.1007/s00453-004-1100-7 , MR 2072769
- ^ Печарски, Марцин (2007), «Алгоритм Форда-Джонсона до сих пор непобедим для менее чем 47 элементов», Information Processing Letters , 101 (3): 126–128, doi : 10.1016/j.ipl.2006.09.001 , MR 2287331