【问题标题】:extract clusters / sets of nodes from an undirected graph从无向图中提取集群/节点集
【发布时间】:2019-03-20 10:47:16
【问题描述】:

说明

我想从无向图数据集中(最好在 Python 中)以节点组的形式识别和获取 n 大小的集群。目前,我被困在我的舒适和知识领域之外的一个领域,所以我认为在这里与感兴趣的人联系可能值得一试。

这里的集群被描述为一组节点,它们都通过一条(非定向的)边相互连接。为简化起见,所有边权重都可以考虑为权重 = 1。此外,节点或边内也没有存储更多信息。

下图说明了数据结构和依赖关系

图表方案

为此,我正在努力寻找一种自动检测完全互连的节点集的解决方案,如下图所示:

预期的集群结果

应该动态识别集群大小并始终考虑互连节点的最大数量(例如,n1 和 n2 不被视为自己的集群,因为 n3 与它们都有连接)。

方法

我尝试通过强连接组件的概念来解决这个问题,但它似乎没有提供所需的输出,因为所有节点之间的连接不是定向的。 我也尝试以矩阵形式解决这个问题,如下所示:

图形为矩阵

但是我在一个优雅的解决方案上失败了,它不包含使用嵌套循环遍历索引的不可扩展的方法。

有没有人知道如何解决这个问题,或者甚至使用我可以定位的可共享解决方案以最佳方式解决这个问题? 非常感谢!!

【问题讨论】:

    标签: matrix graph cluster-computing connected-components


    【解决方案1】:

    集群的正确命名是complete subgraph。您的问题被称为clique problem。 Python 最好的图形处理库之一——networkx——有几种算法可以解决这个问题: networkx cliques

    你的问题可以通过这个函数解决:networkx.algorithms.clique.enumerate_all_cliques

    你应该把你的图转换成 networkx 格式并使用这些算法来找到它。

    【讨论】:

    • 非常感谢!这可能是我能想象到的最中肯、信息最丰富、最有帮助的答案:)
    猜你喜欢
    • 2016-03-30
    • 1970-01-01
    • 2013-04-24
    • 2015-09-08
    • 1970-01-01
    • 2018-07-19
    • 2019-03-05
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多