为什么计数排序的时间和空间复杂度是O(n + k)而不是O(max(n,k))?

时间:2018-10-11 18:15:21

标签: time-complexity space-complexity radix-sort counting-sort

这里,“ n”和“ k”分别是输入数组的大小和数组的最大元素。

由于大小为'n'的数组中有一个运行用于元素频率的计数,因此大小为'k'的数组中有单独的运行以及该数组中的每个遍历(或迭代),因此是count [i]个迭代,其中“ count”是大小为“ k”的数组。

与空间复杂度相同。

我正在寻找一个很好的解释来解释概念的每一个细节,因为您可能会猜到我感到非常困惑。

3 个答案:

答案 0 :(得分:0)

实际上,在数组k上有两次运行

k表示数组的大小。 O表示法中的“ k”实际上代表最大元素。

如果我们写O(max(n,k)),它将隐藏算法的细节,这在很大程度上取决于最大元素

答案 1 :(得分:0)

感谢所有回应的人。但是,我想我明白了。

假设:

  • 大小为N的实际数组为A[]
  • 数组A[]中的最大元素为K
  • 用于计数大小为K的元素频率的数组为count[]
  • 用于存储大小为N的已排序元素的辅助数组为sorted[]

我以这种方式看待它,A[]中有一个运行用于获取最大元素,另一个运行以存储每个元素的频率。 这需要O(N)

现在,在count[]中有一个运行,对于每次迭代,都有一个count[i]次循环,用于以sorted[]的排序顺序插入数组元素。 count[]中所有元素的总和不能大于N。因此,这些操作的总时间为O(N + K)

因此,最坏情况下的时间复杂度为O(N + K)。如果我在某个地方错了,请纠正我。

答案 2 :(得分:0)

请注意O(n+k) = O(max(n, k)),因为

       max(n,k) <= n+k <= 2max(n,k)

并且big-O看不到常量2