【问题标题】:Best running time to order n numbers订购 n 个数字的最佳运行时间
【发布时间】:2015-08-31 17:06:16
【问题描述】:

我有 n 个介于 0 和 (n^4 - 1) 之间的数字,我对它们进行排序的最快方法是什么。

当然,nlogn 是微不足道的,但我考虑了基数为 n 的基数排序选项,而不是线性时间,但我不确定,因为 -1。

感谢您的帮助!

【问题讨论】:

    标签: sorting asymptotic-complexity radix-sort


    【解决方案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。整体线性时间复杂度。

    无论如何感谢您的帮助!如果我做错了什么,请通知我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 2010-11-29
      • 2023-01-11
      • 2016-12-06
      • 2013-03-25
      • 1970-01-01
      相关资源
      最近更新 更多