我需要将一个简单的图分解为具有相等固定数量的顶点的组件。 对于每个组件,应连接所有顶点。
例如,对于上述网络,如果我们将此网络分解为n = 3(每个组件中的顶点数)的组件,则结果应为125; 123; 124; 234。如果我们将这个网络分解为n = 4的组件,那么结果应该是1253; 1254; 1234,5234。
最简单的解决方案是列出所有可能的组合(C(n,m),m是网络中的顶点数,n是每个组件中的顶点数),然后测试每个组合的连通性。但是,当网络稀疏时,它效率不高。
那么,任何想法?我的主要语言是R,但其他语言也很好。
答案 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是微不足道的; - )