【问题标题】:Bucket sort:Why don't we set range to 1? vs counting sort桶排序:为什么我们不将范围设置为 1?与计数排序
【发布时间】:2024-01-21 06:46:01
【问题描述】:

桶排序创建 k 个桶......并在其中一个桶中分配 n 个数字...... 例如1-10, 11-20, 21-30... O(n+k)

桶内的编号使用插入 O(n²) 排序

当少数数字最终在同一个桶中时,它可以正常工作.. O(n+k) 但是如果所有数字都在同一个桶中...O(n²)

我的问题是我们是否将桶的范围设为 1 即 0-1 ,1-2, 2-3…… 不同的号码不会在同一个桶中结束......(不需要在桶内排序) O(n+k)

在不考虑空间复杂度的情况下,为什么我们不使用它来代替计数排序呢? 如果我错了,请纠正我..

【问题讨论】:

    标签: algorithm sorting complexity-theory counting bucket


    【解决方案1】:

    您建议的是一种称为 count sort 的分布排序,它只是一个更简单的版本,您知道元素不重复,因此计数在 1 处停止。它在时间上非常有效O(N+n),但确实需要O(N) 空间。

    当被要求对一副纸牌进行排序时,许多人自然会使用这种方法:他们将每张纸牌分配到桌子上的位置,以形成 4 行 13 张牌。最后一步是逐行收集卡片。这里我们有N == n,因为这两个步骤都需要O(n) 时间,所以排序非常有效。

    N 变得比n 大很多时,假设您想按照序列号的顺序对一堆20 美元的钞票进行排序,这种方法就完全不切实际了。

    如果您对整数进行排序,您可以考虑另一种具有O(n) 时间复杂度的方法:基数排序。

    【讨论】:

    • 感谢 chqrlie... :-) 它有帮助!
    • 你能给我提供任何直接排序的参考吗?(只是为了探索更多:-)).....我用谷歌搜索时找不到......
    【解决方案2】:

    第一种方法中的 k 值与您建议的方法不同。假设您有 n 个介于 0 和 N 之间的数字。在第一种情况下(大小为 10 的存储桶)您需要 N/10 个存储桶,在第二种情况下(大小为 1 的存储桶)需要 N 个存储桶。根据 N 和 n 的相对值,k 会有一个最优值,它可能不是 k=1。

    【讨论】: