基于这个基数排序文章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个元素,但我从那里丢失了它。一个简单的解释将非常有用。
答案 0 :(得分:6)
假设我们使用桶排序对每个数字进行排序:对于每个数字(d)
,我们处理所有数字(n)
,将它们放入桶中,以获取数字可能具有的所有可能值{{1} }。
然后我们需要处理所有桶,重新创建原始列表。将所有项放在存储桶中需要(b)
时间,从O(n)
时间重新创建所有存储桶中的列表(我们必须迭代所有存储桶及其中的所有元素),并且我们对所有数字执行此操作,运行时间为O(n + b)
。
如果O(d * (n + b))
是常量且d
并非渐近地大于b
,则此仅线性。实际上,如果您有n
位数,则需要log n
次。