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

Time complexity 为什么计数排序的时间和空间复杂度是O(n&x2B;k)而不是O(max(n,k))?,time-complexity,space-complexity,radix-sort,counting-sort,Time Complexity,Space Complexity,Radix Sort,Counting Sort,这里,‘n’和‘k’分别是输入数组的大小和数组的最大元素 由于大小为“n”的数组中有一次运行用于元素频率的计数,大小为“k”的数组中有一次单独运行,并且对于数组中的每个过程(或迭代),因此存在计数[i]迭代,其中“count”是大小为“k”的数组 空间复杂性也是如此 我正在寻找一个很好的解释来解释这个概念的每一点,因为你可以猜到我非常困惑。实际上,在数组k k表示数组的大小。O表示法中的“k”实际上表示最大元素 如果我们写O(max(n,k)),它将隐藏算法的细节,这在很大程度上取决于最大元素实

这里,‘n’和‘k’分别是输入数组的大小和数组的最大元素

由于大小为“n”的数组中有一次运行用于元素频率的计数,大小为“k”的数组中有一次单独运行,并且对于数组中的每个过程(或迭代),因此存在计数[i]迭代,其中“count”是大小为“k”的数组

空间复杂性也是如此


我正在寻找一个很好的解释来解释这个概念的每一点,因为你可以猜到我非常困惑。

实际上,在数组
k

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


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

实际上,在数组
k

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


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

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

假设:

  • 大小为
    N
    的实际数组是
    A[]
  • 数组
    A[]
    中的最大元素为
    K
  • 用于计数大小为
    K
    的元素的频率的数组是
    count[]
  • 用于存储大小为
    N
    的排序元素的辅助数组是
    sorted[]
我是这样看的,在
A[]
中运行一次以获得最大元素,再运行一次以存储每个元素的频率。 这需要
O(N)

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


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

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

假设:

  • 大小为
    N
    的实际数组是
    A[]
  • 数组
    A[]
    中的最大元素为
    K
  • 用于计数大小为
    K
    的元素的频率的数组是
    count[]
  • 用于存储大小为
    N
    的排序元素的辅助数组是
    sorted[]
我是这样看的,在
A[]
中运行一次以获得最大元素,再运行一次以存储每个元素的频率。 这需要
O(N)

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

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

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

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

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

max(n,k)Big O表示最坏的情况。循环在(n+k)倍附近运行,大于最大值(n,k)。大O表示最坏的情况。循环在(n+k)倍附近运行,大于最大值(n,k)。