【问题标题】:Changing base in radix sort在基数排序中更改基数
【发布时间】:2016-09-10 02:58:55
【问题描述】:

我了解了基数排序,但仍然无法弄清楚。

假设我的最大数字是 nc(c 是常数)。我是否可以始终将数字的基数更改为 n,因此最坏情况的复杂度将为 O(n)?

如果是这样,对数组进行排序的最佳方法不是找到最大值 O(n),然后使用基数排序吗?

【问题讨论】:

  • 基数排序的复杂度为 O(数组大小)。常数 c 因子决定了所需的传递次数,但由于它是一个常数乘数,因此出于复杂性的目的而将其忽略,保持为 O(数组大小)。

标签: sorting time-complexity radix-sort


【解决方案1】:

这里有两个独立的问题:

  1. 如果数组中的最大值是 nc 对于固定常数 c,那么以 n 为底的基数排序总是需要时间 O(n) 吗?

    李>
  2. 在数组中找到最大值然后使用以 n 为底的基数排序有什么复杂性?

对于问题 (1),运行时间为 O(n) 是正确的。进行基数排序的成本是 O(n logb U),其中 b 是基数排序的基数,U 是数组中的最大值(这是因为该数字具有 Θ( logb U) 中的 base-b 数字)。在这种情况下,运行时间因此为 O(n logn nc) = O(nc) = O(n),假设 c 是一个固定常数。

请注意,前面的分析假设 c 是一个预先知道的固定常数。如果给定一个任意整数值的数组并使用以 n 为底的基数排序,则运行时间将为 O(n log U / log n),如果保证 in,则仅为 O(n)提前,对于固定常数c,最大值最多为nc。由于这通常不是一个真实的陈述,因此您不能说基数排序总是在 O(n) 时间内运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2015-10-19
    相关资源
    最近更新 更多