Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 基数排序解释_Algorithm_Sorting_Asymptotic Complexity_Radix - Fatal编程技术网

Algorithm 基数排序解释

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),因为有

基于这篇基数排序的文章,我正在努力理解排序中某些方法的时间复杂性是如何解释的

从链接:

让输入整数中有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),因为有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
是每个数字中的位数(也称为宽度)。