【发布时间】: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