繁体   English   中英

计数排序O(n+K)时间复杂度如何证明K是输入范围?

[英]How to prove that K is the range of inputs for O(n+K) time complexity for counting sort?

如何证明 K 是输入的范围? 怎么会和最大元素一样呢? 使用 geeksforgeeks 作为参考,其中 K 是输入范围: https://www.geeksforgeeks.org/counting-sort/ 如果我有一个 5、7、6 的列表,K 是什么?

我的逻辑是如果我有一个 5、7、6 的列表。然后我创建一个 0 到 2 的数组:[0][1][2]。 因为范围是 5 到 7,所以所有的位置都将存储在一个位置 + 与最小数字的差值。 如果找到或找不到数字,我将在哪里存储 0 和 1。 然后,当我检索值时,我总是添加最小的数字,在这种情况下为 5。 在这种情况下,索引 1 处有一个 0,索引 2 处有一个 1。将 2 和 5 相加得到 K:7。

感觉就像我错过了什么。

如何证明 K 是输入的范围? 怎么会和最大元素一样呢?

这不必与最大元素相同。 它可以更小或更大。

...它说 K 是输入的范围

这是真实的。

如果我有一个 5、7、6 的列表,K 是什么?

需要至少为 max(input) − min(input) + 1。在您的示例中,=3

我制作了一个 0 到 2 的数组:[0][1][2]。

这是正确的方法,它表明您需要 3 个插槽,这正是问题所在。 您总是希望将 map 的输入范围缩小到范围 [0,...,−1]。

将 2 和 5 相加得到 K:7。

不,这没有关系。 这是关于您需要执行的从 [0,...,−1] 范围到实际输入范围的反向映射。

时间复杂度为 O(+),因为算法需要迭代输入值 () 并且需要迭代 [0,...,−1] 范围内的“桶”(计数器)。 如果输入的数字都是不同的,那么你可以简化并说复杂度是 O(),那么 ≤。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM