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