在Kademlia 协议中,节点 ID 是 160 位数字。节点存储在桶中,桶 0 存储除最后一位之外与该节点具有相同 ID 的所有节点,桶 1 存储除最后 2 位之外与该节点具有相同 ID 的所有节点,以此类推为所有 160 个存储桶打开。
找到我应该将新节点放入哪个存储桶的最快方法是什么?
我将存储桶简单地存储在一个数组中,并且需要这样的方法:
Bucket[] buckets; //array with 160 items
public Bucket GetBucket(Int160 myId, Int160 otherId)
{
//some stuff goes here
}
显而易见的方法是从最重要的位开始,逐位比较,直到找到不同之处,我希望有一个基于聪明位旋转的更好方法。
实用说明:我的 Int160 存储在一个包含 20 个项目的字节数组中,优先考虑适用于这种结构的解决方案。