【问题标题】:Is using a hash table valid in counting sort (in place of an array)?使用哈希表在计数排序中是否有效(代替数组)?
【发布时间】:2015-11-27 07:49:42
【问题描述】:

经典的计数排序示例要求您构建一个大小等于输入数组的最大整数的数组。

例如,如果您的数组是 [1, 6, 3, 10000, 8] 您将需要一个长度为 10000 的数组来进行计数排序。

这不能在同一线性时间内使用整数上的哈希表完成吗?只是一张简单的地图?

在 python 中,它会是这样的:

counting_map = {n: 0 for n in input_array}  # start by mapping all to 0
for num in input_array:
    counting_map[n] += 1

我知道这确实只适用于整数,但在这种情况下映射解决方案不是更好吗?

在时间复杂度方面,您在 O(n) 时间内初始化映射,然后在 O(n) 时间内遍历数组,然后在 O(1) 时间内对输入执行散列函数。 (很明显,大 O 表示法并不是算法好坏的最终决定因素,我只是想确保我在这里的理论是正确的)。

这是一个好的解决方案,还是“原始”计数排序仍然可以做一些我看不到的更好的事情?我也很好奇为什么“基于哈希图的计数排序”几乎不返回任何 Google 搜索结果,使它看起来几乎从未使用过。散列的开销是否足以超过其较小的内存占用?

【问题讨论】:

    标签: algorithm sorting time-complexity


    【解决方案1】:

    你可以这样做,构造将是 O(n),具有明显的内存优势。

    有一个小问题。

    要输出排序后的数组,您仍然需要对哈希表键进行排序。而这个问题正是您最初想要解决的问题。

    【讨论】:

      【解决方案2】:

      你不需要对key进行排序,只需从min到max作为key遍历

      【讨论】:

      • 没看懂,为什么从min遍历到max不需要之前的排序?你能详细解释一下吗?谢谢!
      猜你喜欢
      • 2017-02-11
      • 2013-03-07
      • 2014-10-12
      • 2014-10-27
      • 2017-04-13
      • 2013-12-04
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      相关资源
      最近更新 更多