MATLAB:在无向图中查找强连通分量

时间:2015-12-28 21:27:25

标签: algorithm matlab networking graph graph-algorithm

我有一个网络(无向图),由以下稀疏矩阵表示:

 %  A B C D E F G H I J K L M
mm=[0 0 1 1 0 0 1 0 0 0 0 0 0; % A
    0 0 0 0 1 0 0 0 0 0 1 0 0; % B
    1 0 0 1 0 1 0 0 0 0 0 1 0; % C
    1 0 1 0 0 0 0 0 0 0 0 0 0; % D
    0 1 0 0 0 0 0 0 0 0 0 0 1; % E
    0 0 1 0 0 0 1 0 0 0 0 0 1; % F
    1 0 0 0 0 1 0 0 0 0 0 1 0; % G
    0 0 0 0 0 0 0 0 1 1 0 0 1; % H
    0 0 0 0 0 0 0 1 0 1 0 0 0; % I
    0 0 0 0 0 0 0 1 1 0 1 0 1; % J
    0 1 0 0 0 0 0 0 0 1 0 0 0; % K
    0 0 1 0 0 0 1 0 0 0 0 0 0; % L
    0 0 0 0 1 1 0 1 0 1 0 0 0; % M
   ]; 
xx=tril(mm + mm');
view(biograph(sparse(xx),[],'ShowArrows','off','ShowWeights','off'))

在此网络中,有两个强互连的子网: enter image description here

是否有一些聪明的算法来识别这种强连接子网?

请注意我的矩阵相当大,约10.000x10.000个条目,因此简单的搜索算法可能太慢。非常感谢!

1 个答案:

答案 0 :(得分:1)

首先,由于这是一个无向图,因此没有强连接的概念。我在看这个重要的细节时错了。现在,两个红色圆圈通过单个边连接,如果我们要从图中删除边,则为no。连通组件的数量增加1(至2)。因此,给定一个无向图,真正的问题是"是否存在边缘(或边缘),去除哪个会增加连接组件的数量?"。我可以想到一条蛮力的算法:

  1. 删除n1和n2之间的边e。
  2. n1和n2之间是否还有路径?
  3. 是:这不是候选优势,请转到1
  4. 否:好,删除此边缘会破坏图表,删除并转到1
  5. 最后,连接组件的数量会因删除的边数而增加。复杂度将是O(N * E)(O(N),用于在去除每个边缘之后找到n1和n2之间的路径)。您可能需要更改图表表示以有效地执行此操作。