订购 n 个数字的最佳运行时间
Posted
技术标签:
【中文标题】订购 n 个数字的最佳运行时间【英文标题】:Best running time to order n numbers 【发布时间】:2015-08-31 17:06:16 【问题描述】:我有 n 个介于 0 和 (n^4 - 1) 之间的数字,我对它们进行排序的最快方法是什么。
当然,nlogn 是微不足道的,但我考虑了基数为 n 的基数排序选项,而不是线性时间,但我不确定,因为 -1。
感谢您的帮助!
【问题讨论】:
【参考方案1】:我认为你误解了 Radix Sort 的效率。来自Wikipedia:
对于 n 个字长为 w 的整数的键,基数排序复杂度为 O(wn)。有时 w 表示为一个常数,这将使基数排序(对于足够大的 n)比最好的基于比较的排序算法更好,这些算法都执行 O(n log n) 比较来对 n 个键进行排序。然而,通常 w 不能被认为是一个常数:如果所有 n 个键都是不同的,那么 w 必须至少为 log n 以便随机访问机器能够将它们存储在内存中,这最多给出时间复杂度 O (n log n)。
我个人会选择intelligent pivot 来实现快速排序。使用这种方法可以达到大约1.188 n log n
的效率。
【讨论】:
如果是 n^4,我们可以表示以 n 为底的数字并达到 O(4n) 因此 O(n) 时间,但 -1 是我的问题... 我现在看到了您的问题。明天课后我会问我的算法教授,看看他怎么说。【参考方案2】:如果我们在基数 n 中使用基数排序,我们会得到所需的线性时间复杂度,-1 无关紧要。
我们将以 n 为底表示数字:
然后我们得到:
n 代表 n 个数字,另一个 n 只是数字跨度(高估),并且 n^4 - 1 的对数小于 log n^4,即以 n 为底的 4。整体线性时间复杂度。
无论如何感谢您的帮助!如果我做错了什么,请通知我!
【讨论】:
以上是关于订购 n 个数字的最佳运行时间的主要内容,如果未能解决你的问题,请参考以下文章