![](/img/trans.png)
[英]How is the time complexity of Bucket Sort O(n+k) if it uses insertion sort to sort each bucket?
[英]How could the complexity of bucket sort is O(n+k)?
在说“之前已经被问过”或“找到算法书”之前,请继续阅读并告诉我,我的推理部分出了什么问题?
假设你有n个整数,并且你将它们分成k个分区,这将花费O(n)时间。 但是,需要对每个k bin进行排序,如果对每个bin使用快速排序这是一个O((n / k) log(n / k))操作,那么这一步将需要O(n log(n / n) K)+ K)。 最后需要组装这个数组,这需要O(n + k),(参见这篇文章 ),所以总操作将是O(n + n log(n / k)+ k)。 现在,这个n log(n / k)是如何消失的,我完全无法想象。 我的猜测是有一些数学可以消除这个n * log(n / k)。 有人可以帮忙吗?
您的缺陷是假设快速排序用于对铲斗进行分类。 通常情况并非如此,这就是你如何避免(n / k) log(n / k)
条款。
你的分析看起来不错。 术语Bucketsort用于许多不同的算法,因此根据您查看的算法,其平均运行时间可能是O(n + k)。
如果我不得不猜测,你可能已经看过一个典型的变体,其中一个选择k非常大,因此n / k将是一个常数。 在另一个流行的变体中甚至是k >> n,所以一个分为k / n桶。
如果你提供详细的算法和声称这是平均O(n + k)的来源我可以重新审视我的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.