Когда подходящее время для использования Radix Sort? - PullRequest
2 голосов
/ 01 марта 2010

Каковы ограничения на ваши данные, чтобы вы могли использовать сортировку Radix?

Если я сортирую большой список целых чисел, было бы целесообразно использовать сортировку по Radix? Почему сортировка Radix больше не используется?

Ответы [ 4 ]

2 голосов
/ 01 марта 2010

Здорово, когда у вас большой набор данных с ключами, которые как-то ограничены. Например, когда вам нужно упорядочить массив из 64 миллионов битов в 1 миллион, его можно использовать для сортировки по 8 младшим значащим битам, затем по следующим 8 и т. Д. (Применяется 8 раз). Таким образом, этот массив может быть отсортирован за 8 * 1M операций вместо 1M * log (1M).

0 голосов
/ 08 мая 2012

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

В некоторых сценариях внешней сортировки, особенно когда число различных значений ключа очень мало (например, два), требуется стабильная сортировка, и устройство ввода-вывода может эффективно работать только с одним последовательным потоком данных, оно может было бы полезно сделать так, чтобы K проходило через поток исходных данных, где K - количество значений ключа. При первом проходе копируют все элементы, для которых ключ является минимальным допустимым значением, и пропускают остальные, затем копируют все элементы, для которых ключ является следующим более высоким значением, пропуская остальные и т. Д. Этот подход, очевидно, будет ужасно эффективным если есть очень много разных значений ключа, но будет неплохо, если их будет два.

0 голосов
/ 02 марта 2010

Одной из причин, по которой вы можете не видеть это так часто, как вы думаете, является то, что сортировка Radix не так универсальна, как сортировки на основе сравнения (быстрая сортировка / слияние / сортировка). Это требует, чтобы вы могли представлять элементы для сортировки как целое число или что-то вроде целого числа. При использовании стандартной библиотеки легко определить функцию сравнения, которая сравнивает произвольные объекты. Может быть сложнее определить кодировку, которая правильно отображает ваш произвольный тип данных в целое число.

0 голосов
/ 01 марта 2010

Если вам известен диапазон целочисленных значений, и он не слишком большой,
возможно подсчет сортировки будет лучшим выбором в вашем случае.

...