在说“之前已经提出此问题”或“找到算法书”之前,请继续阅读并告诉我,我的推理出现了哪些部分?
假设您有n个实体,并且将它们分成k个分区,这将花费O(n)时间。但是,需要对每个k bin进行排序,如果对每个bin使用快速排序这是一个O((n / k) log(n / k))操作,那么这一步将需要O(n < / em>的日志(N / K)+ K)。最后需要组装这个数组,这需要O(n + k),(见this post),所以总操作将是O(n + n log(n / k)+ k)。现在,这个n 日志(n / k)是如何消失的,我完全无法想象。我的猜测是有一些数学可以消除这个n * log(n / k)。有人可以帮忙吗?
答案 0 :(得分:1)
你的假设:
错了。
铲斗排序有两种变体,因此非常混乱。
<强> A 强>
桶的数量等于输入中的项目数
参见分析here
<强>乙强>
桶的数量等于 R - 输入整数的可能值的数量
答案 1 :(得分:0)
您的缺陷是假设快速排序用于对铲斗进行分类。通常情况并非如此,这就是您避免使用(n / k) log(n / k)
条款的方式。
答案 2 :(得分:0)
您的分析看起来不错。术语Bucketsort用于许多不同的算法,因此根据您查看的算法,其平均运行时间可能为O(n + k)。
如果我不得不猜测,你可能已经看过一个典型的变体,其中一个选择k非常大,因此n / k将是一个常数。在另一种流行的变体中甚至是k>&gt; n,所以一个分为k / n桶。
如果你详细提供算法,并声称这个算法的平均值为O(n + k),我可以重温我的答案。