基数排序说明

时间:2015-04-29 06:09:34

标签: algorithm sorting asymptotic-complexity radix

基于这个基数排序文章http://www.geeksforgeeks.org/radix-sort/我正在努力理解在某种方法的时间复杂性方面正在解释什么。

从链接:

输入整数中有d位数。基数排序采用O(d *(n + b))时间,其中b是表示数字的基数,例如,对于十进制系统,b为10. d的值是多少?如果k是最大可能值,则d将是O(log_b(k))。因此总体时间复杂度为O((n + b)* logb(k))。对于大k来说,这看起来不仅仅是基于比较的排序算法的时间复杂度。让我们先来限制k。设k≤nc,其中c是常数。在这种情况下,复杂性变为O(nlogb(n))。

所以我明白排序需要O(d * n),因为有d个数字,所以d通过,你必须处理所有n个元素,但我从那里丢失了它。一个简单的解释将非常有用。

1 个答案:

答案 0 :(得分:6)

假设我们使用桶排序对每个数字进行排序:对于每个数字(d),我们处理所有数字(n),将它们放入桶中,以获取数字可能具有的所有可能值{{1} }。

然后我们需要处理所有桶,重新创建原始列表。将所有项放在存储桶中需要(b)时间,从O(n)时间重新创建所有存储桶中的列表(我们必须迭代所有存储桶及其中的所有元素),并且我们对所有数字执行此操作,运行时间为O(n + b)

如果O(d * (n + b))是常量且d并非渐近地大于b,则此线性。实际上,如果您有n位数,则需要log n次。