在Petar Maymounkov和DavidMazières的Kademlia paper中,据说XOR距离是一个有效的非欧几里德度量,对于为什么有效度量的每个属性都是必要或有趣的解释有限,即:
为什么一个指标通常具有这些属性很重要?为什么在Kademlia Distributed Hash Table实现中路由查询的上下文中每个属性都是必需的?
此外,本文提到单向性(对于给定的x和距离l,只存在一个y,其中d(x,y)= 1)保证所有查询将沿同一路径收敛。为什么会这样?
答案 0 :(得分:14)
我只能代表Kademlia,也许其他人可以提供更一般的答案。在此期间......
- d(x,x)= 0
- d(x,y)> 0,如果x!= y
这两点一起有效地表示距离x
最近的点是x
本身;每一个点都离得更远。 (这看似直观,但XOR指标的其他方面则不然。)
在Kademlia的上下文中,这很重要,因为查找ID为x
的节点会使该节点最接近。如果不是这种情况会很尴尬,因为向x
汇总的搜索可能找不到节点x
。
- forall x,y:d(x,y)= d(y,x)
Kademlia路由表的结构使得节点保持与它们最接近的地址空间的详细知识,并且指数地减少对更远地址空间的了解。简而言之,一个节点试图保持所有它听到的k
最近的联系人。
对称性非常有用,因为它意味着这些最接近的联系人中的每一个都将保持对地址空间的类似部分的详细了解,而不是远程部分。
如果我们没有这个属性,那么将搜索看作更像是在钟面上朝一个方向移动的时钟指针可能会有所帮助。 1点钟(节点1)的节点在2点(30°)靠近节点2,但节点2远离节点1(330°)。所以想象一下,我们正在寻找最接近3点的两个(即Node1和Node2)。如果搜索到达Node2,它将不知道Node1,因为它距离很远。整个查找和拓扑都必须改变。
- d(x,z)< = d(x,y)+ d(y,z)
如果不是这种情况,节点就不可能知道在查找期间从其路由表中返回哪些联系人。它会知道距离目标最近的k
,但不能保证其他一个更远的联系人不会产生更短的整体路径。
由于这种属性和单向性,从大量分离的点开始的不同搜索往往会在同一路径上收敛。
单向性意味着没有两个节点可以与给定点具有相同的距离。如果不是这种情况,那么目标点可以被距离它相同距离的一堆节点包围。然后各种不同的搜索将免费挑选任何通过。但是,单向性保证这一组中的一个最接近,并且在该组之间选择的任何搜索将始终选择相同的。
答案 1 :(得分:6)
我一直在抨击这个问题很长一段时间:XOR - 如同不同位数,合适的汉明距离 - 怎么能成为总秩序的基础?
嗯它不能,这样的度量本身对于可比较的关系来说是不够的,它只能在一个点周围的圈内转储节点。
然后我更仔细地阅读了这篇论文,并注意到它将“XOR作为一个整数值”并且它突然出现在我身上:症结不是“XOR度量”,而是ID的公共前缀的长度(其中XOR是一种推导机制。)
从“self”获取两个具有相同汉明距离的节点,并将其前缀的长度与“self”相同:具有最短公共前缀的节点是最远的节点。
本文使用“XOR距离度量”,但它确实应该是“ID前缀长度总排序”
答案 2 :(得分:5)
我认为这可以解释一下,让我知道http://metaquestions.me/2014/08/01/shortest-distance-between-two-points-is-not-always-a-straight-line/
基本上每跳一次,如果它在一个完全填充的网络(极端)中一次只有一个比特,那么它将具有前一跳的两倍知识。当你融合时,知识就会更大,直到你到达最接近网络知识的最近节点。