Карманная сортировка — различия между версиями
Daniel (обсуждение | вклад) |
Daniel (обсуждение | вклад) |
||
| Строка 22: | Строка 22: | ||
for i = 0 to Base - 1 | for i = 0 to Base - 1 | ||
buckets[i] = Bucketsort(buckets[i],j+1) | buckets[i] = Bucketsort(buckets[i],j+1) | ||
| − | answer <- инициализируем пустой массив(в который записывается отсортированный набор данных) | + | answer <- инициализируем пустой массив (в который записывается отсортированный набор данных) |
for i = 0 to Base - 1 | for i = 0 to Base - 1 | ||
for k = 0 to buckets[i].length() - 1 | for k = 0 to buckets[i].length() - 1 | ||
Версия 18:43, 10 июня 2012
Карманная сортировка(Bucket sort) — алгоритм сортировки , основанный на предположении о равномерном распределении входных данных.
Содержание
Алгоритм сортировки
Принцип работы
- элементы массива входных данных разбиваются на блоков ("карманов","корзин").
- каждый из блоков сортируется либо другой сортировкой, либо рекурсивно тем же методом разбиения.
- из каждого отсортированного блока данные записываются в массив в порядке разбиения на блоки.
Важно отметить ,что разбиение на блоки производится таким образом, чтобы элементы каждого следующего блока были бы больше предыдущего.
Реализация
Рассмотрим код работы алгоритма, где — длина каждой строки. <wikitex>
Bucketsort(A, j){ // A - массив данных, j - текущий разряд
if (A.length() < 2 || j == p + 1)
return A;
buckets <- инициализируем массив длины Base, где каждая ячейка — список входных объектов (в нашем случае
строк).
for i = 0 to A.length() - 1
добавляем A[i] в конец массива buckets[partition(A[i],j)]
// partition — функция которая по данному объекту и индексу возвращает число от 0 до Base - 1
// в случае со строками функция partition возвращает код j-ого символа строки A[i].
for i = 0 to Base - 1
buckets[i] = Bucketsort(buckets[i],j+1)
answer <- инициализируем пустой массив (в который записывается отсортированный набор данных)
for i = 0 to Base - 1
for k = 0 to buckets[i].length() - 1
добавляем buckets[i][k] в конец массива answer
return answer
}
</wikitex> Base - основание системы счисления в случае со строками Base = 256.
Приведенный код, работает не только для строк , а в принципе для любых объектов для которых можно определить порядок, систему счисления и функцию partition.
Асимптотика
Пусть количество элементов в массиве, основание системы исчисления и количество разрядов в объекте. Тогда алгоритм "Bucket sort" в процессе работы, сделает не более чем итераций. Заметим ,что в случае случайного распределения мат. ожидания количество элементов в каждом блоке . Следовательно в средним алгоритм "карманной сортировки" совершает действий.При этом на некотором множестве наборов, где , алгоритм отработает за линейное время. В худшем случаи , сортировка работает за .
Примечания
Сортировка быстро работает для равновероятного распределения значений разрядов объектов в заданной для них системы счисления. быстрая сортировка является частным случаем "карманной" сортировкой, в случаи разбиения всех элементов на "кармана".Также стоит отметить, что по принципу своей работы Bucket sort схожа с Цифровой сортировкой.