В радикальной сортировке мы сначала сортируем по наименьшей значащей цифре, затем сортируем по второй наименьшей значащей цифре и так далее и получаем отсортированный список.
Теперь, если у нас есть список из чисел, нам нужно бит, чтобы различать эти числа. Таким образом, количество проходов сортировки по основанию будет . Каждый проход занимает времени и, следовательно, время выполнения радикальной сортировки равно
Но хорошо известно, что это линейный алгоритм времени. Почему?
algorithms
sorting
Пратик Деогхаре
источник
источник
Ответы:
Нет: если у нас есть список чисел от до 2 k - 1 , нам нужно k бит. Между k и log n вообще нет никакой связи .0 2k−1 k k logn
Если все числа различны, то , и радикальная сортировка по разным числам, следовательно, имеет временную сложность Ω ( n log n ) . В общем, сложность радикальной сортировки равна Θ ( nlogn≥k Ω(nlogn) где n - количество элементов для сортировки, а k - количество битов в каждом элементе.Θ(nk) n k
Сказать, что сложность радикальной сортировки равна означает брать фиксированный размер битов для чисел. Это подразумевает, что для достаточно большого n будет много повторяющихся значений.O(n) n
Существует общая теорема о том, что метод сортировки массива или списка, который работает путем сравнения двух элементов за один раз, не может работать быстрее, чем в худшем случае. Radix sort не работает при сравнении элементов, но работает тот же метод доказательства. Radix sort - это процесс принятия решения, чтобы определить, какую перестановку применить к массиву; есть n ! перестановки массива и радикальная сортировка принимает двоичные решения, т. е. решает, нужно ли поменять местами два элемента или нет на каждом этапе. После m двоичных решений радикальная сортировка может выбирать между 2 m перестановками. Чтобы достичь п ! возможные перестановки, необходимо, чтобыΘ ( п журналн ) н ! м 2м н ! .m ≥ log(n!)=Θ(nlogn)
В доказательстве, которое я не выписал выше, предполагается, что алгоритм должен работать в случае, когда элементы различны. Если априори известно, что элементы не все различны, то число потенциальных перестановок меньше полного , При сортировке k- битных чисел возможно иметь n различных элементов только при n ≤ 2 k ; в этом случае сложность радикальной сортировки действительно равна Ω ( n log n ) . Для больших значений n должны быть коллизии, что объясняет, как радикальная сортировка может иметь сложность, меньшую чем Θ (n! k n n≤2k Ω(nlogn) n когда n > 2 k .Θ(nlogn) n>2k
источник
Будьте осторожны с анализом: что вы предполагаете, чтобы сортировка выполнялась за раз? Это потому, что каждая из ваших цифр находится в диапазоне от 0 до k - 1 , что означает, что ваши цифры могут принимать k возможных значений. Вам нужен стабильный алгоритм сортировки, так что вы можете, например, выбрать сортировку отсчета. Подсчет сортировки выполняется за Θ ( n + k ) времени. Если k = O ( n ) , подсчет сортировки выполняется за линейное время.O(n) 0 k−1 k Θ(n+k) k=O(n)
Каждая из ваших строк или чисел имеет цифры. Как вы говорите, вы делаете D проходов над ними. Следовательно, радикальная сортировка явно выполняется за время Θ ( d ( n + k ) ) . Но если мы считаем d постоянным и k = O ( n ) , мы видим, что радикальная сортировка выполняется за линейное время.d d Θ(d(n+k)) d k=O(n)
источник
Я думаю, что предположение неверно. Вы можете выполнить основную сортировку с числами, например, в шестнадцатеричном. Таким образом, на каждом шаге вы разбиваете массив чисел на 16 сегментов.k=log2(n) 16
источник