R中间和最短路径

时间:2013-08-22 17:17:20

标签: r

我一直在评论这篇有趣的文章:

http://kieranhealy.org/blog/archives/2013/06/09/using-metadata-to-find-paul-revere/

作为一项练习,我一直在采取各种措施来判定里维尔先生叛国罪。在某一点上,作者使用了 igraph库的中介功能,其描述如下:

  

“顶点和边缘之间是(粗略地)由通过顶点或边缘的测地线(最短路径)的数量来定义。”

那么,就文章而言,在考虑的254个人中,每个人之间有多少最短的沟通路径?不过,我从文章中略微转移了一下,我想知道我是否天真地想。

254 x 254矩阵有64516个元素。然而,琐碎的元素(对角线上的那些 - 一个人自言自语显然是从X到X的最短路径)可以打折扣,留下(似乎)254 * 254 - 254 = 64262总的非平凡有序对。但是,这些不是方向性的 - 也就是说,特定对X和Y之间的最短路径是相同的,无论X或Y中的哪一个是发送者,哪个是接收者。

因此,我们可以减少配对次数:(254 * 254 - 254) / 2 = 32131

因为这也恰好是从254中选出的2个组合的数量,甚至更好 - 一个很好的巧合! ; - )

然后,为了好玩,我做了:

((254 * 254 - 254) / 2) - sum(betweenness(person.g)) = 10061

这个数字是什么意思?它几乎可以说有10,061对配对,没有路径存在,但我不知道这是怎么回事。我是否误解了中间性?非常感谢提前。

1 个答案:

答案 0 :(得分:1)

如果你检查一个更简单的图表会发生什么, 你会注意到最短的长度为1的路径 不要输入计算。

betweenness( graph.lattice( 3 ) )
# [1] 0 1 0

长度为2的最短路径将使用一次(对于中间的点), 但是长度为3或更长的最短路径将被多次使用: 对于中间的每个点都有一次。

betweenness( graph.lattice( 5 ) )
# [1] 0 3 4 3 0

在此示例中,最短路径为

length 1: 1-2, 2-3, 3-4, 4-5  (not used)
length 2: 1-3, 2-4, 3-5       (each used once, for the betweenness of 2, 3 and 4)
length 3: 1-4, 2-5            (each used twice, for 2,3 and 2,4)
length 4: 1-5                 (each used 3 times, for 2, 3 and 4)

换句话说,长度为k的最短路径计为k-1次。

p <- shortest.paths(person.g)
sum( p[upper.tri(p)] - 1 )
# [1] 22070
sum( betweenness( person.g ) )
# [1] 22070