Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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

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_Time Complexity_Radix Sort_Counting Sort - Fatal编程技术网

Algorithm 基数排序最佳和最坏情况时间成本分析

Algorithm 基数排序最佳和最坏情况时间成本分析,algorithm,sorting,time-complexity,radix-sort,counting-sort,Algorithm,Sorting,Time Complexity,Radix Sort,Counting Sort,当基数排序与稳定排序(特别是计数排序)一起使用时,基数排序的最佳和最坏情况时间开销通常由θ(d(n+k))给出,其中d是每个要排序的数字的位数,k是每个数字可以取的值的数量(通常为10(因为0到9)) 尽管我进行了研究,但我仍然无法找到一个很好的解释来解释基数排序的“最佳”和“最差”情况之间的区别。有人能解释一下在使用基数排序时,什么是“最佳”情况和“最差”情况吗?如果是这样的话,你能证明它们都在θ(d(n+k))?基数排序从最后一个数字开始排序到前面(排序一个数字,然后是十个数字,然后是100

当基数排序与稳定排序(特别是计数排序)一起使用时,基数排序的最佳和最坏情况时间开销通常由θ(d(n+k))给出,其中d是每个要排序的数字的位数,k是每个数字可以取的值的数量(通常为10(因为0到9))


尽管我进行了研究,但我仍然无法找到一个很好的解释来解释基数排序的“最佳”和“最差”情况之间的区别。有人能解释一下在使用基数排序时,什么是“最佳”情况和“最差”情况吗?如果是这样的话,你能证明它们都在θ(d(n+k))?

基数排序从最后一个数字开始排序到前面(排序一个数字,然后是十个数字,然后是100个数字,等等),因此,它会进行d排序(位数)。现在看看它是如何对每一组数字进行排序的,这是通过一个桶排序算法来实现的,在这个算法中,范围内的每个整数(通常为0-9)都有自己的“桶”,然后根据当前数字的值(5与5、8与8等)将每个数字放入相应的桶中。虽然这通常被称为θ(n),但实际上是θ(n+k),其中n是元素的数量,k是存储桶的数量,这基本上是数据的范围(0-9是10个存储桶)

关于bucket排序,最困难的部分是从列表到bucket的映射需要是θ(1),这使得映射n个元素θ(n)。从这里开始,最耗时的部分来自于必须按顺序走下每个桶(k个桶)并拉出其中的元素(n个元素)。因此,桶排序算法变为θ(n+k)


总的来说,每次都使用n+k的工作完成d个桶排序,使得总体复杂度θ(d(n+k))

对于“最佳”情况和“最差”情况,读写操作的数量通常相同。由于数据模式的不同,定时可能会有所不同。随机数据将导致随机写入,这对缓存不友好,而对已排序数据的基数排序将执行顺序写入,这对缓存友好。@rcgldr这就是我的想法;所以我不确定最好的和最坏的情况有什么区别。虽然您提到了缓存,但我认为我应该从更理论的层面分析算法,特别是原始输入列表如何影响计数排序的运行时间。但我不确定。这似乎与问题陈述有冲突。如果最佳和最坏情况下的时间具有相同的θ,并且缓存之类的问题被忽略,那么看起来它们并不是真正的最佳和最坏情况。问题陈述没有阐明最佳情况和最坏情况是如何定义的。我认为我们在这里看到了同样的问题;我也不明白。但这就是问题所在。所有的案例都是最好的案例和最坏的案例。就像
min(5,5,5,5)==max(5,5,5,5)==5