я предложу другой алгоритм (или хотя бы схему такого алгоритма)
Схема предполагает, что значения (предполагаемые « целые числа ») находятся в (узком?) Диапазоне между[min,max]
В времени сканирования двух массивов, мы можем найти и значения для обоих и их кратности, если они отличаются, массивы не являются перестановками друг другаO(n)min
max
Вычтите min
из всех значений из обоих массивов (здесь тот факт, что один массив уже находится в отсортированном порядке, не учитывается, возможно, это можно улучшить)
Предположим, что значения в массивах представляют массы, и мы применяем ускорение / скорость к каждому из величин (это может быть улучшено до величины в некоторых случаях)с > 11c>1
перемещайте массы, пока они не достигнут максимального значения max-min
, это имеет сложность . Это позволяет найти как одинаковые значения, так и их кратность, если они различаются, массивы не являются перестановками друг друга. Еще решить, что массивы являются перестановками друг друга.O((max−min)n)
Обратите внимание, что приведенная выше схема алгоритма может быть (детерминистически) довольно быстрой во многих практических ситуациях.
Приведенная выше схема алгоритма представляет собой разновидность алгоритма линейной сортировки по времени с использованием « движущихся масс ». Физическая интуиция, лежащая в основе алгоритма сортировки " движущихся масс ", такова:
Предположим, что ценность каждого элемента фактически представляет его массовую величину, и представьте, что вы располагаете все элементы в линию и применяете одну и ту же силу ускорения.
Тогда каждый предмет будет перемещаться на расстояние, связанное с его массой, более массивным, на меньшее расстояние и наоборот. Затем для извлечения отсортированных предметов просто соберите предметы в обратном порядке по пройденному расстоянию.
Этот алгоритм является линейно-временным и детерминированным , но есть оговорка в том, что величина начальной ускоряющей силы и расстояния для перемещения (или времени ожидания) связана с распределением значений (то есть « масс », фактор выше). Можно также попытаться дискретизировать пространство для перемещения элементов в сетку и получить постоянный коэффициент скорости алгоритма (и использовать процедуру быстрой сортировки для сортировки различных элементов в одной и той же ячейке ).max−min
В этом отношении вышеприведенный алгоритм аналогичен алгоритмам сортировки на основе чисел (например, радикальная сортировка , счетная сортировка )
Можно подумать, что этот алгоритм может ничего не значить, но он показывает, по крайней мере, одну вещь. То, что «на фундаментальном уровне» сортировка произвольных чисел на физическом уровне является линейной операцией с числом элементов.