我了解了基数排序,但仍然无法解决问题。
假设我的最大数是n c (c是常数)。我是否可以随时将数字的基数更改为n,因此最坏情况复杂度为O(n)?
如果是这样,排序数组的最佳方法可能是找到最大值O(n)然后使用基数排序吗?
答案 0 :(得分:0)
这里有两个独立的问题:
如果对于固定常数c,数组中的最大值是n c ,那么基数n中的基数排序总是花费时间O(n)?
在数组中找到最大值然后使用base-n基数排序的复杂性是什么?
对于问题(1),运行时将为O(n)是正确的。进行基数排序的成本是O(n log b U),其中b是基数排序的基数,U是数组中的最大值(这是因为该数字具有Θ( log b U)其中的base-b数字)。在这种情况下,运行时因此是O(n log n n c )= O(nc)= O(n),假设c是固定常数。 / p>
请注意,前面的分析假定c是预先知道的固定常量。如果给出一个任意整数值的数组并使用base-n基数排序,那么运行时将为O(n log U / log n),如果保证 in,则只有O(n)提前对于固定常数c ,最大值最多为n c 。由于这通常不是一个真实的陈述,你不能说基数排序总是在时间O(n)中运行。