【问题标题】:using radix sort on 32bit numbers对 32 位数字使用基数排序
【发布时间】:2014-01-01 19:44:01
【问题描述】:

我想知道,当我有一个整数列表并且我需要对它们进行排序时, 而且我知道它们是 32 位整数,我可以使用基数排序(将计数排序作为其稳定排序)在 o(n) 时间内对它们进行排序吗?

不就是使用从 LSB 开始的数字上的位表示来进行 32 次计数排序吗?

我知道以前不知道数字的一般排序需要 o(nlogn),但它们是 32 位整数的事实不是我需要使它成为 o(n) 排序吗?

谢谢!

【问题讨论】:

  • 可以,但是您的内存使用量可能会变得很大。基准。对于较小的 n,由于开销,这将比 nlogn 搜索慢。它变得更好的点(如果有的话)是您自己找到的,并且取决于您的目标机器的各个位的相对速度。
  • 你可以使用Least significant digit radix sort,它需要o(nk)时间。
  • 基数排序只是O(n),因为您可以(有时)将log(n) 组件替换为常量log(maxN)
  • 如果你不需要知道每个有多少,即一个排序集,你可以使用几个 BitSet。

标签: java radix-sort


【解决方案1】:

是的!基数排序适用于无符号整数,也适用于有符号整数(稍加工作)。

有趣的是,如果它们的位被重新解释为整数,它也适用于非 NaN、非负浮点数。 (负浮点数需要更多的工作,而且可能不值得。)

【讨论】:

  • 这是Java,你在哪里找到“无符号”整数?
  • 通用计算机科学。教人钓鱼等等。
  • @ElliottFrisch - 他们没有 RSA 签名,因此“未签名”。
  • 基数排序可以正常工作,但它会在 o(n) 时间内工作吗?我的意思是,你可以说我用 log(n) 位来表示 0-n 范围内的整数,但是有了这些假设,知道我在 32 位整数系统上工作,我可以肯定地说基数排序是 o(n)?
  • @Guy 是的。将可能的整数个数固定为常数,基数排序为 O(n)。 (顺便提一下,注意大写 O;“little-o”是不同的东西,几乎可以肯定不是你的意思。)
猜你喜欢
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多