使用igraph python从图中提取某个组件。

问题描述 投票:2回答:1

问题的描述。

目的是提取某个顶点所属的分量,以计算其大小。

代码的步骤。

  • 使用 图形 办法 群集() 来获取图中所有连接的组件(c.c)的列表。
  • 然后,在c.c列表中迭代,同时每次检查该某个节点是否属于它。
  • 当找到它时,我计算它的大小。

代码如下。

def sizeofcomponent(clusters, vertex):
    for i in range(len(clusters)):
        if str(vertex) in clusters.subgraphs()[i].vs["name"]:
            return(len(clusters.subgraphs()[i].vs["name"]))

问题 是这个代码将与 极为 大图,这种方式让我的代码速度慢了很多。有什么方法可以改进吗?


EDIT 01: 解释一下算法的工作原理

  1. 假设下面的图形是 主图:

    - main graph -

  2. 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 最大独立集 (MIS)进行计算,我们得到以下图形,我称之为 部件:

    - Components (MIS) -

  3. 随机添加一个节点 主图 的方式,使该节点属于 主图 不属于 部件 不属于MIS的一部分)。例如 在组件中加入节点10。

    adding node 10 to components

  4. 计算它形成的组件的大小。

  5. 对所有节点(不属于组件(MIS)的节点)重复这个过程。

  6. 最后,形成最小的组件(尺寸最小)的节点是永久添加到了 部件.

你的解决方案。

  • 当执行以下代码时(i是顶点):
    cls = components.clusters()
    c = cls.membership[i]

变量c的值将是下面的列表。 c=cls.membership[i]

例如: 节点(2)属于组件1(id 1)。

为什么对我来说不能用。

下面这行代码不能给我正确的结果:

    cls = components.clusters()
    c = cls.membership[i]

因为列表中的节点的id是 c 不合 名称 的节点。例如:cls.membership[i]会给出一个异常错误:list out of range。而不是正确的结果,即。4.

另外,从你的代码来看,在你的情况下,大小是按以下方式计算的。

    c = components.membership[i]
    s = components.membership.count(c)
python python-3.x igraph connected-components
1个回答
3
投票

你可以简单地得到组件顶点 i 所属

components = G.clusters()
c = components.membership[i]

然后你可以得到组件的大小 c 使用

s = components.size(c)
© www.soinside.com 2019 - 2024. All rights reserved.