我有一个网络(无向图),由以下稀疏矩阵表示:
% 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'))
是否有一些聪明的算法来识别这种强连接子网?
请注意我的矩阵相当大,约10.000x10.000个条目,因此简单的搜索算法可能太慢。非常感谢!
答案 0 :(得分:1)
首先,由于这是一个无向图,因此没有强连接的概念。我在看这个重要的细节时错了。现在,两个红色圆圈通过单个边连接,如果我们要从图中删除边,则为no。连通组件的数量增加1(至2)。因此,给定一个无向图,真正的问题是"是否存在边缘(或边缘),去除哪个会增加连接组件的数量?"。我可以想到一条蛮力的算法:
最后,连接组件的数量会因删除的边数而增加。复杂度将是O(N * E)(O(N),用于在去除每个边缘之后找到n1和n2之间的路径)。您可能需要更改图表表示以有效地执行此操作。