21

在 Petar Maymounkov 和 David Mazières 的Kademlia 论文中,据说 XOR 距离是一个有效的非欧几里得度量,对于为什么有效度量的每个属性都是必要或有趣的解释有限,即:

  • d(x,x) = 0
  • d(x,y) > 0,如果 x != y
  • forall x,y : d(x,y) = d(y,x) -- 对称
  • d(x,z) <= d(x,y) + d(y,z) -- 三角不等式

为什么度量具有这些属性很重要?为什么在 Kademlia 分布式哈希表实现中的路由查询上下文中这些属性中的每一个都是必需的?

此外,论文提到单向性(对于给定的 x 和距离 l,只存在一个 d(x,y) = l 的 y)保证所有查询都将沿着相同的路径收敛。为什么呢?

4

3 回答 3

15

我只能代表 Kademlia,也许其他人可以提供更笼统的答案。同时...

  • d(x,x) = 0
  • d(x,y) > 0,如果 x != y

这两个点一起有效地意味着最接近的点x就是x它自己;每隔一个点就更远了。(这可能看起来很直观,但 XOR 度量的其他方面并非如此。)

在 Kademlia 的上下文中,这很重要,因为查找具有 ID 的节点x会将该节点作为最近的节点。如果不是这种情况会很尴尬,因为收敛到的搜索x可能找不到 node x

  • 全部 x,y : d(x,y) = d(y,x)

Kademlia 路由表的结构使得节点保持对最接近它们的地址空间的详细了解,并且对更远的地址空间的了解呈指数下降。简而言之,一个节点试图保留它所听到的所有最近的联系人。k

对称性很有用,因为这意味着这些最接近的联系人中的每一个都将保持对地址空间相似部分的详细了解,而不是远程部分。

如果我们没有这个属性,那么将搜索想象成更像是时钟的指针绕着钟面朝一个方向移动可能会有所帮助。1点钟的节点(Node1)在2点钟(30°)靠近Node2,但Node2远离Node1(330°)。所以想象一下,我们正在寻找最接近 3 点钟的两个(即 Node1 和 Node2)。如果搜索到 Node2,它不会知道 Node1,因为它很远。整个查找和拓扑必须改变。

  • d(x,z) <= d(x,y) + d(y,z)

如果不是这种情况,节点就不可能知道在查找期间要从其路由表中返回哪些联系人。它会知道k最接近目标的位置,但不能保证其他更远的联系人之一不会产生更短的整体路径。

由于这种特性和单向性,从非常分离的点开始的不同搜索将趋向于沿着相同的路径收敛。

单向性意味着没有两个节点可以与给定点具有相同的距离。如果不是这种情况,那么目标点可能被一堆节点包围,距离它都相同。然后各种不同的搜索将可以自由选择任何一个通过。然而,单向性保证了这组中的一个将是最接近的,并且在该组之间进行选择的任何搜索将始终选择同一个。

于 2014-09-10T02:46:14.973 回答
7

很长一段时间以来,我一直在抨击这个问题:XOR - 如不同位数,适当的汉明距离 - 如何成为总订单的基础?

好吧,它不能,这样的度量本身不足以建立可比较的关系,它所能做的就是在一个点周围转储节点。

然后我更仔细地阅读了这篇论文,并注意到它说“XOR 作为一个整数值”,这让我恍然大悟:关键不是“XOR 度量”,而是 ID 的公共前缀的长度(其中 XOR是一种推导机制。)

取两个与“self”具有相同汉明距离的节点以及它们与“self”公共前缀的长度:公共前缀最短的节点是最远的节点。

该论文使用“XOR 距离度量”,但它确实应该阅读“ID 前缀长度总排序”

于 2015-05-25T07:18:23.680 回答
6

我认为这可以解释一点,让我知道http://metaquestions.me/2014/08/01/shortest-distance-between-two-points-is-not-always-a-straight-line/

基本上,如果在一个完全填充的网络(极端)中一次只有一个跃点,那么每个跃点的知识将是前一跃点的两倍。当您收敛时,知识会越来越多,直到您到达最近的节点,这些节点的知识在网络中是最终的。

于 2014-09-10T02:24:08.047 回答