中介中心性Brandes算法

时间:2014-04-26 14:31:27

标签: algorithm graph graph-algorithm

我正在阅读基于Brandes algorithm的中间性中心性。我对算法有一些疑问

  1. 此算法是否给出了精确的中介中心性或近似值?当我运行BC on Sage, which is based on Brandes algorithm时,它没有给出确切的值。比如14,我得到了13.9956 ......

  2. 有人可以解释"对依赖的积累"更简单的条款部分?

  3. 对于"我们需要为每个顶点和前辈列表存储一个依赖项。"是否在执行Dijkstra算法时完成此操作?

  4. 加权图表应该怎么做?

1 个答案:

答案 0 :(得分:6)

  1. 布兰德斯'算法给出每个顶点的精确中心性。我不知道Sage中使用了哪种算法实现,但很可能是精确度问题。

  2. 算法的累积部分可能是最棘手的。当你到达那个部分时,你在 sigma 中有从当前顶点 s 到其余顶点的最短路径的数量。此外,在 Pred 中,每个顶点都有通过最短路径到达它们的顶点列表。依赖 delta 将是 s 将对其余顶点(范围从0到 N -2)贡献的中介量,即,在每个顶点上取决于 s 多少。

    顶点 w S 弹出,直到为空,从 s 中最远的 s 开始本身(请记住,当在算法的最短路径计数部分到达顶点时,顶点已添加到 S )。对于 w Pred [ w ])的前任列表中的每个 v ,新的值为计算依赖性,并且(对我来说)是棘手的部分。

    表达式显示 delta [ v ] = delta [ v ] +( sigma < / em> [ v ] / sigma [ w ])*(1 + delta [ w ]),换句话说, v 的新依赖项是它已经具有的依赖项( sigma [ v ] / sigma [ w ])*(1 + delta [ w ])。好吧,首先,请注意,当从 S 中弹出顶​​点 w 时,其整个依赖关系 delta [ w ],因为将来没有比 w 更远的节点,所以它不能处于任何其他最短路径的中间。然后,应该清楚( sigma [ v ] / sigma [ w ])是依赖关系 v 的对( s w ),即顶点 s v 保持连接(因为它是从 s w 的最短路径的比例,通过 v )。但是(我认为这是不太明显的部分),顶点 v 不仅位于 s w 之间的最短路径中,它也涉及 w 所涉及的所有最短路径!所以,如果从 s 到通过 w 的某个顶点 x 有一条最短路径,那么必须有一条来自 s的路径 x 传递 v 。简单来说, s 更多地依赖于 v ,如果它依赖于 w 。因此,因子(1 + delta [ w ])解释如下:1,对于 v 的依赖关系(< s w )和 delta [ w ],用于 v 的依赖关系每对( s ,&lt;超出 w &gt;的任何顶点)。

    最后, delta [ w ]被添加到其完整的中介 Cb [ w ]中(除非< em> w == s ,因为 s 不被视为依赖于自身。)

    正如我所说,乍一看它并不是一个容易理解的算法。如果您还有疑问,请花点时间和评论。

  3. 我不完全确定你在这里指的是什么。如果你问如何从Dijkstra算法的输出中获得前辈列表,那么,你不能,至少直接。如果您想使用预先存在的Dijkstra算法实现此算法,除非算法在执行期间允许某种类型的访问者,否则您将无法实现此功能,例如Boost Graph库Dijkstra实现。顺便说一句,这个库已经实现了这个算法(see here),甚至是分布式/并行版本(herehere),如果您对此感兴趣的话。

  4. 在(至少)两种方法中你可以考虑中间度计算中的权重(我假设你的意思是边权重):as&#34; length&#34 ;,所以它有影响在最短路径计算,以及&#34;重要性&#34;或&#34;多样性&#34; (例如,关系出现的次数)。 Brandes本人在他的论文On Variants of Shortest-Path Betweenness Centrality and their Generic Computation,算法10(&#34;长度&#34;)和11(&#34;多样性&#34;)中为这些和其他案例提供了几种变体。请注意,本文算法11中存在错误,在Brandes' publications page中进行了解释(在列表中查找论文的名称)。