将图划分为 k 个相似的子图

Posted

技术标签:

【中文标题】将图划分为 k 个相似的子图【英文标题】:Partitioning a graph into k similar subgraphs 【发布时间】:2017-10-05 17:09:12 【问题描述】:

我有一个连接的图,边上有权重。边之间的权重越小,相邻顶点越接近。我想把图分成k个更小的子图,这样所有子图中的节点都非常相似。

换句话说,我需要对图进行聚类。有人可以建议适用于图且时间复杂度较低(小于 O(n^2))的聚类算法吗?

【问题讨论】:

为什么你的意思是“相似节点”? 【参考方案1】:

聚类是一个难题,通常只能通过蛮力解决exaclty。因此,在有效算法的情况下,您必须依赖一些启发式方法。如果您可以将问题作为顶点聚类任务来解决,您可以尝试k-means 之类的方法,但在较大的数据集上可能会很慢。

对于图表,我建议对您的问题使用MCL 算法。 MCL 在很多情况下似乎都很有效。它使用随机流模拟来检测加权/未加权图中的集群。基本思想是流量聚集在一个集群内,而集群之间的链接往往不太饱和

【讨论】:

以上是关于将图划分为 k 个相似的子图的主要内容,如果未能解决你的问题,请参考以下文章

698. 划分为k个相等的子集(Python)

Matplotlib的子图subplot的使用

Matplotlib笔记 · 绘图区域的结构和子图布局与划分(figure, axes, subplots)

算法设计之分治法策略

白话啥是谱聚类算法

谱聚类算法总结