1

我重新设计了使用 k-buckets 的“平面模型”构建的系统(P2P 应用程序)——每个距离都有自己的 k-backet。距离是标识符的长度减去共享前缀的长度 (XOR)。这里一切都很清楚。

现在我们想使用二叉树来保存桶(如上一个 Kadelmia 文档)。当我们“寻找桶”以放入新联系人时,树方法不会“直接”处理距离。这让我感到困惑,因为论文说如果新节点更接近本地然后 K-closest,则应该拆分 k-bucket节点。

我的问题:在这种情况下如何计算距离?它不能是桶的前缀(路径),因为桶可能包含具有不同前缀的节点。

找到K-最近节点的便捷方法是什么?

提前致谢。

4

1 回答 1

1

它不能是桶的前缀(路径),因为桶可能包含具有不同前缀的节点。

在树形布局中,每个桶都有一个前缀,但它在路由表数据结构中的位置并不隐含,它必须在拆分和合并操作期间显式跟踪,例如基地址加前缀长度,类似于 CIDR 表示法.

一个空的路由表以覆盖整个键空间(即 0x00/0)的前缀开始,在对其中一个桶进行一些拆分之后,可能会覆盖范围 0x0CFA0 - 0x0CFBF,这将是桶前缀 0x0CFA/15。

请参阅另一个包含示例路由表布局的问题的答案

另外请参阅此答案以获取简单且更高级的存储桶拆分算法

如何找到给定 ID 的匹配存储桶取决于使用的数据结构。排序列表需要二分查找,具有最近查找的 Patricia-Trie 是另一种选择。只要您不必每秒处理太多操作,即使是蛮力方法也足够了。

于 2019-07-24T14:34:23.280 回答