将网络分解为具有相同顶点数的组件

时间:2014-06-25 10:37:42

标签: r algorithm graph network-programming graph-algorithm

我需要将一个简单的图分解为具有相等固定数量的顶点的组件。 对于每个组件,应连接所有顶点。

An example of n=3

例如,对于上述网络,如果我们将此网络分解为n = 3(每个组件中的顶点数)的组件,则结果应为125; 123; 124; 234。如果我们将这个网络分解为n = 4的组件,那么结果应该是1253; 1254; 1234,5234。

最简单的解决方案是列出所有可能的组合(C(n,m),m是网络中的顶点数,n是每个组件中的顶点数),然后测试每个组合的连通性。但是,当网络稀疏时,它效率不高。

那么,任何想法?我的主要语言是R,但其他语言也很好。

1 个答案:

答案 0 :(得分:1)

给定连接节点子集的所有n元组的集合Sn,通过迭代所有s = {a1,a2,...,an来构造所有n + 1元组的连接节点子集的集合并且迭代遍历所有ai以找到不在s中的连接节点ax。构建s'= {a1,a2,... an,ax}并添加到Sn+1(作为set操作消除了douplicate)。

取125; 123; 124; 234; 235,我们得到

从125:1235; 1245

从123:1234,(1235)

从124:(1234),(1245)

从234:(1234),2345

从235:(1235),(2345)

我不知道R,但是Java的集合操作(​​给定一组合理的元素)足以使这个算法在稀疏矩阵中具有竞争力。

几乎忘了:S1是微不足道的; - )