订购 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 个数字的最佳运行时间的主要内容,如果未能解决你的问题,请参考以下文章

为啥我无法计算我订购的列的运行总和?

找到大多数不可订购的物品

数据结构:算法的最佳和最差运行时间

7.5 深搜-最佳调度问题(枚举排列+回溯+剪枝)

数字货币试运行中,你的钞票将成绝版收藏品!

在许多线程上执行具有不同参数的无序方法的最佳方法[关闭]