![]() |
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 . |
![]() |
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 6 年前 |
![]() |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 7 年前 |
![]() |
Guillermo Gutiérrez · STR转换是如何工作的? 7 年前 |
![]() |
RudziankoÅ · 合并排序数组算法 7 年前 |
|
user8852560 · 构造函数中的验证和构造函数冲突 7 年前 |
![]() |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
![]() |
hippietrail · 确定浮点数中前导零的数量 7 年前 |