|
В каких случаях Radix(поразрядная) сортировка будет лучшим выбором?Какая у неё сложность?
|
|||
---|---|---|---|
#18+
Прочитал в нескольких местах про Radix сортировку и не понял как всё же считается её сложность. замечательный сайт: https://www.geeksforgeeks.org/radix-sort/ What is the running time of Radix Sort? Let there be d digits in input integers. Radix Sort takes O(d*(n+b)) time where b is the base for representing numbers, for example, for decimal system, b is 10. What is the value of d? If k is the maximum possible value, then d would be O(logb(k)). So overall time complexity is O((n+b) * logb(k)). Which looks more than the time complexity of comparison based sorting algorithms for a large k. Let us first limit k. Let k <= nc where c is a constant. In that case, the complexity becomes O(nLogb(n)). But it still doesn’t beat comparison based sorting algorithms. What if we make value of b larger?. What should be the value of b to make the time complexity linear? If we set b as n, we get the time complexity as O(n). In other words, we can sort an array of integers with range from 1 to nc if the numbers are represented in base n (or every digit takes log2(n) bits). Для обычных десятичных чисел b это 10. Что такое k и d я не понял. Видимо надо сначала понять, что значат эти буквы для того, чтобы сравнивать с другими алгоритмами. http://algolab.valemak.com/radix тут пишут, что временная сложность от O(n) до O(n+k). Что такое k не уточняется https://neerc.ifmo.ru/wiki/index.php?title=Цифровая_сортировка Сложность LSD-сортировки Пусть m — количество разрядов, n — количество объектов, которые нужно отсортировать, T(n) — время работы устойчивой сортировки. Цифровая сортировка выполняет k итераций, на каждой из которой выполняется устойчивая сортировка и не более O(1) других операций. Следовательно время работы цифровой сортировки — O(kT(n)). Рассмотрим отдельно случай сортировки чисел. Пусть в качестве аргумента сортировке передается массив, в котором содержатся n m-значных чисел, и каждая цифра может принимать значения от 0 до k−1. Тогда цифровая сортировка позволяет отсортировать данный массив за время O(m(n+k)), если устойчивая сортировка имеет время работы O(n+k). Если k небольшое, то оптимально выбирать в качестве устойчивой сортировки сортировку подсчетом. Если количество разрядов — константа, а k=O(n), то сложность цифровой сортировки составляет O(n), то есть она линейно зависит от количества сортируемых чисел. Тут я не понял зачем берётся время устойчивой сортировки. ещё непонятна фраза: авторЕсли количество разрядов — константа, а k=O(n), авторкаждая цифра может принимать значения от 0 до k−1 К-это вроде как количество цифр. Как оно может быть равно O(n) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2018, 13:00 |
|
|
start [/forum/topic.php?fid=59&fpage=37&tid=2121683]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
32ms |
get tp. blocked users: |
2ms |
others: | 35ms |
total: | 155ms |
0 / 0 |