Карманная сортировка — различия между версиями
Daniel (обсуждение | вклад) |
Daniel (обсуждение | вклад) |
||
| Строка 31: | Строка 31: | ||
</wikitex> | </wikitex> | ||
Base - основание системы счисления в случаи со строками Base = 256. | Base - основание системы счисления в случаи со строками Base = 256. | ||
| − | |||
| − | |||
| + | Приведенный код, работает не только для строк , а в принципе для любых объектов для которых можно определить порядок, систему счисления и функцию partion. | ||
| + | ==Асимптотика== | ||
| + | Пусть <tex>n</tex> количество элементов в массиве, <tex>k</tex> основание системы исчисления и | ||
| + | <tex>p</tex> количество разрядов в объекте. | ||
| + | Тогда алгоритм "Bucket sort" в процессе работы, сделает не более чем <Tex>O(p * (n + k))</Tex> итераций. | ||
| + | Заметим ,что в случаи случайного распределения мат. ожидания количество элементов в каждом блоке <tex> n/k</tex>. Следовательно в средним алгоритм "карманной сортировки" совершает <Tex>O(n * log_k n)</Tex> действий.При этом на некотором множестве наборов, где <tex> k = O(n)</tex> , алгоритм отработает за линейное время. | ||
| + | В худшем случаи , сортировка работает за <tex>O(n^2)</tex>. | ||
| + | ==Примечания== | ||
| + | Сортировка быстро работает для равновероятного распределения значений разрядов объектов в заданной для них системы счисления. | ||
| + | В случаи разбиения всех элементов на <tex>2 </tex> "кармана", [[Быстрая сортировка|быстрая сортировка]] является частным случаем "карманной" сортировкой.Также стоит отметить, что по принципу своей работы Bucket sort схожа с [[Цифровая сортировка|Цифровой сортировкой]]. | ||
| + | ==Ссылки== | ||
| + | * http://en.wikipedia.org/wiki/Bucket_sort | ||
| + | |||
| + | * [http://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&ved=0CI0BEBYwCQ&url=http%3A%2F%2Fcs.iupui.edu%2F~xkzou%2Fteaching%2FCS580%2FSortinginlineartime.ppt&ei=d7fUT8WWIs3S4QSkkPT-Ag&usg=AFQjCNEUbmlVNhSgrJKV9-QjPBwU6U0obQ&sig2=3yaysrpuwVjmyhjBCpyBeQ Презентация о линейных сортировках]. | ||
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Сортировки]] | [[Категория: Сортировки]] | ||
Версия 18:08, 10 июня 2012
Карманная сортировка(Bucket sort) — алгоритм сортировки , основанный на предположение о равномерном распределении входных данных.
Содержание
Алгоритм сортировки
Принцип работы алгоритма вообщем
- элементы массива входных данных разбивается на блоков("карманов","корзин").
- каждый из блоков сортируется либо отдельной какой либо другой сортировкой, либо рекурсивно тем же методом разбиения.
- Из каждого отсортированного блока записываются в массив , в порядке разбиения на блоки.
Важно отметить , что разбиение на блоки производится таким образом, чтобы элементы каждого следующего блока были бы больше предыдущего.
Реализация Алгоритма
Рассмотрим код работы алгоритма.
<wikitex>
Bucketsort(A,j){
if (A.length() < 2 || i == p + 1)
return A;
buckets <- инициализируем массив длины Base , где каждая ячейка список входных объектов (в нашем случаи
строк.
for i = 0 to A.length() - 1
добавляем A[i] в конец массива buckets[partion(A[i],j)]
// partion функция которая по данному объекту и индексу возвращает число от 0 до Base - 1
// в случаи со строками функция partion возвращает код 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.
Приведенный код, работает не только для строк , а в принципе для любых объектов для которых можно определить порядок, систему счисления и функцию partion.
Асимптотика
Пусть количество элементов в массиве, основание системы исчисления и количество разрядов в объекте. Тогда алгоритм "Bucket sort" в процессе работы, сделает не более чем итераций. Заметим ,что в случаи случайного распределения мат. ожидания количество элементов в каждом блоке . Следовательно в средним алгоритм "карманной сортировки" совершает действий.При этом на некотором множестве наборов, где , алгоритм отработает за линейное время. В худшем случаи , сортировка работает за .
Примечания
Сортировка быстро работает для равновероятного распределения значений разрядов объектов в заданной для них системы счисления. В случаи разбиения всех элементов на "кармана", быстрая сортировка является частным случаем "карманной" сортировкой.Также стоит отметить, что по принципу своей работы Bucket sort схожа с Цифровой сортировкой.