【问题标题】:Why the 14 most significant bits of 17612864 is 67?为什么 17612864 的最高 14 位是 67?
【发布时间】:2012-10-22 17:06:35
【问题描述】:

在 CLRS 的第 264 页底部,作者说在获得r0 = 17612864 后,r0 的 14 个最高有效位产生哈希值h(k) = 67。我不明白为什么它给出 67,因为二进制中的 67 是 1000011,即 7 位。

编辑 教科书中: 例如,假设我们有k = 123456, p = 14, m = 2^14 = 16384, and w = 32。采用 Knuth 的建议,我们选择 A 作为s/2^32 形式中最接近(\sqrt(5) - 1) / 2 的分数,因此A = 2654435769/2^32。然后是k*s = 327706022297664 = (76300 * 2^32) + 17612864,然后是r1 = 76300 and r0 = 17612864r0 的 14 个最高有效位产生值 h(k)=67

【问题讨论】:

  • 我不知道这有多大可能,但在这里包括更多的上下文而不是书上的页码可能有助于找到可以回答您问题的人。
  • 看图11.4(页首264),w是32,你从32位的左边(最高位)提取p(14)位号码。
  • 谢谢!现在我可以理解这个数字了。

标签: algorithm computation-theory clrs


【解决方案1】:

17612864 = 0x010CC040 =

0000 0001 0000 1100 1100 0000 0100 0000

其中最重要的 14 位是

0000 0001 0000 11

哪个是0x43,哪个是67

还有:

int32 input = 17612864;
int32 output = input >> (32-14); //67

【讨论】:

  • 我没有考虑机器字的大小。事实上,作者之前提到过假设机器的字长为 w 位,并且 k 适合单个字。我没有完全理解它的含义。
【解决方案2】:

在 32 位世界中

17612864 = 00000001 00001100 11000000 01000000(二进制)

前十四位 = 00000001 000011 = 67

【讨论】:

  • 是的!作者确实提到机器是 w(这里 w = 32)位。
猜你喜欢
  • 2013-05-31
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 2020-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-29
相关资源
最近更新 更多