Что делает сортировку ведром хорошей?

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

У меня есть мысль, но мне нужен кто-то, чтобы подтвердить это.

Предположим, я хочу отсортировать массив из 1000 элементов. Если бы он был равномерно распределен и разделен на 10 сегментов, где в каждом сегменте было 100 элементов.

сортировка 100 элементов 10 раз с использованием алгоритма n log(n) = 10 * 100 log(100) = 1000 log(100) = 2000

при сортировке 1000 элементов с использованием алгоритма n log (n) = 1000 log (1000) = 3000

Таким образом, алгоритм использует, что если n = m + l, то (m + l) ^ 2 > m ^ 2 + l ^ 2, и то же самое относится к алгоритмам n log (n).

таким образом, чем более равномерно сегментированы данные, тем выше производительность сортировки сегментов.

Это правильно ?

и какое будет оптимальное количество ведер? (Я чувствую, что это компромисс между пространством и временем, но также зависит от однородности сортируемых данных)


person Abdelrhman Hosny    schedule 11.05.2020    source источник


Ответы (1)


Но вы должны принять во внимание, что шаг группирования имеет сложность 1000. Это дает вам:

  • сортировка ведра: 1000 + 10 * 100 log(100) = 3000
  • сортировка сравнением: 1000 * log(1000) = 3000

Но вы можете снова применить стратегию группирования для сортировки меньших массивов. Это https://en.wikipedia.org/wiki/Radix_sort .

Объявленная сложность равна O(n.w), где w — количество битов для представления элемента. Линейный? Лучше, чем сортировка слиянием? Подожди, а сколько обычно w? Да, верно, для обычных наборов вещей вы должны использовать log(n) бит для представления элементов, так что вернемся к n log(n).

Как вы сказали, это обмен временем/памятью, а сортировка Radix - это когда у вас фиксированный бюджет памяти (а у кого нет?). Если вы можете увеличить объем памяти линейно с размером входных данных, возьмите n сегментов, и вы получите сортировку O(n).

Пример ссылки (их много!): https://www.radford.edu/nokie/classes/360/Linear.Sorts.html .

person One Lyner    schedule 11.05.2020