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

Posted

技术标签:

【中文标题】将网络分解为具有相等顶点数的组件【英文标题】:Decompose a network into components with equal number of vertices 【发布时间】:2014-06-25 10:37:42 【问题描述】:

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

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

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

那么,有什么想法吗?我的主要语言是 R,但其他语言也可以。

【问题讨论】:

【参考方案1】:

给定连接节点子集的所有 n 元组的集合 Sn,通过迭代所有 s=a1,a2,...an 和在那里迭代所有 ai 以找到不在 s 中的连接节点 ax。构建 s'=a1,a2,...an,ax 并添加到 Sn+1(作为集合操作消除重复项)。

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

从 125:1235;1245

从 123: 1234, (1235)

从 124: (1234), (1245)

从 234: (1234), 2345

从 235: (1235), (2345)

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

差点忘了:S1 是微不足道的 ;-)

【讨论】:

我已经尝试过 BFS。你的算法肯定更高效。

以上是关于将网络分解为具有相等顶点数的组件的主要内容,如果未能解决你的问题,请参考以下文章

在有向图中找到可以到达其他顶点的最小顶点数[关闭]

通过允许用户选择顶点数使用 Boost 库生成图形

数据结构与算法 - 图论

在未加权图中找到最小顶点数

凸多边形的划分 LibreOJ - 10149

OpenGL顶点缓冲区对象,我可以访问顶点数据以用于其他用途,例如碰撞检测吗?