![]() |
1
3
您愿意考虑一个由5个32位整数组成的数组吗?(或3个64位整数)?使用整词可能比使用字节更好,但无论如何,该方法都应该有效。 异或两个节点id的对应字,从最重要的开始。如果异或结果为零,则转到下一个最有意义的单词。 否则,使用 constant time method from Hacker's Delight. . 如果设置了最高有效位,则该算法将产生32(64)个结果;如果设置了最低有效位,则产生1个结果,依此类推。这个索引,结合当前单词的索引,将告诉您哪个位不同。 |
![]() |
2
2
首先,您可以逐字节(或逐字)进行比较,当您在该字节(或逐字)内找到差异时,就可以搜索第一个差异位。 对我来说,向存储桶数组中添加一个节点的速度如此之快,以至于无论您是通过巧妙的比特旋转来查找一个字节(或单词)内的第一个差异位,还是仅仅在循环中搅动到char_位(或其他什么),都显得有些不可思议。不过,有可能。 另外,如果id本质上是随机的,分布是均匀的,那么您会发现前8位的差异大约是255/256。如果你只关心一般的案例行为,而不是最坏的案例,那么就做愚蠢的事情:你的循环不太可能运行很长时间。
不过,作为参考,数字之间的第一位差异
但是,您的代码看起来像Java,所以我猜您正在寻找的BITFoO是 integer log . |
![]() |
no one special · 32位整数缩放,无溢出 7 年前 |
![]() |
Benn Tan · 比特操作:更难翻动硬币 7 年前 |
![]() |
Ganesh Thampi · 使用位运算符将十进制转换为二进制 7 年前 |
![]() |
Ganesh Thampi · 使用位的奇偶程序 7 年前 |
![]() |
datapanda · 三维网格的莫顿反向编码 7 年前 |
![]() |
rubyquartz · 交换无符号短整数的字节 7 年前 |
|
John Proctor · C中位的掩蔽范围 7 年前 |
![]() |
Areg Sarvazyan · 从无符号int中提取位的函数 7 年前 |
|
user9505617 · 按位异或0xFFFFFFFF? 7 年前 |