Algorithm 基数排序解释
基于这篇基数排序的文章,我正在努力理解排序中某些方法的时间复杂性是如何解释的 从链接: 让输入整数中有d个数字。基数排序需要O(d*(n+b))时间,其中b是表示数字的基数,例如,对于十进制系统,b是10。d的值是多少?如果k是最大可能值,那么d将是O(log_b(k))。所以总的时间复杂度是O((n+b)*logb(k))。这看起来比基于比较的排序算法的时间复杂度更大。让我们先限制k。让k≤其中c是一个常数。在这种情况下,复杂性变为O(nlogb(n))Algorithm 基数排序解释,algorithm,sorting,asymptotic-complexity,radix,Algorithm,Sorting,Asymptotic Complexity,Radix,基于这篇基数排序的文章,我正在努力理解排序中某些方法的时间复杂性是如何解释的 从链接: 让输入整数中有d个数字。基数排序需要O(d*(n+b))时间,其中b是表示数字的基数,例如,对于十进制系统,b是10。d的值是多少?如果k是最大可能值,那么d将是O(log_b(k))。所以总的时间复杂度是O((n+b)*logb(k))。这看起来比基于比较的排序算法的时间复杂度更大。让我们先限制k。让k≤其中c是一个常数。在这种情况下,复杂性变为O(nlogb(n)) 所以我知道排序需要O(d*n),因为有
所以我知道排序需要O(d*n),因为有d个数字,所以d个过程,你必须处理所有n个元素,但我从那里丢失了它。一个简单的解释会非常有用。假设我们使用桶排序对每个数字进行排序:对于每个数字
(d)
,我们处理所有数字(n)
,将它们放在桶中,用于一个数字可能具有的所有可能值(b)
然后我们需要处理所有桶,重新创建原始列表。将所有项目放入bucket需要O(n)
time,从所有bucket重新创建列表需要O(n+b)
time(我们必须迭代所有bucket和其中的所有元素),我们对所有数字都这样做,给出运行时间O(d*(n+b))
只有当
d
为常数且b
不渐近大于n
时,这才是线性的。因此,实际上,如果你有logn
位的数字,它将需要O(nlogn)
时间。在这个Quora答案中有一个很好的解释:你的表达式没有考虑被排序的数字的基数,或者最大数字的宽度,这两者都决定了最终的运行时间。@TimBiegeleisen是的,是的,b
是一个数字可以具有的值的数目(也称为基数),d
是每个数字中的位数(也称为宽度)。