就地基数排序的空间开销
Posted
技术标签:
【中文标题】就地基数排序的空间开销【英文标题】:Space overhead of in-place Radix sort 【发布时间】:2015-03-25 13:38:21 【问题描述】:当递归实现时,是多少。我在这里实现了就地基数排序,没有递归:
http://41j.com/blog/2015/03/in-place-radix-sort-ok-space-overhead/
我相信我实现它的方式 O(r^k) 将需要额外的空间。其中 r 是基数,k 是位数。我是否认为递归解决方案只需要 O(k) 额外空间?
【问题讨论】:
你的代码有很多问题。引用一个微妙的例子:如果int
是 32 位且 bit
是 31
,if ((v & (1 << bit)) > 0)
将失败。如果v
为负数,则表达式将为非零但不是正数。这不是不支持负数的唯一原因,您对高位的假设也是错误的。
【参考方案1】:
假设每个递归步骤按另一个位排序,最大递归深度等于排序键的位长度。因此,如果您的排序键长度为 k=32 位,则您需要进行 32 级递归,并且每个级别的内存使用量都是恒定的。
是的,递归堆栈需要 O(k) 额外空间。
【讨论】:
以上是关于就地基数排序的空间开销的主要内容,如果未能解决你的问题,请参考以下文章