问题的描述。
目的是提取某个顶点所属的分量,以计算其大小。
代码的步骤。
代码如下。
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: 解释一下算法的工作原理
假设下面的图形是 主图:
负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 负责人: 最大独立集 (MIS)进行计算,我们得到以下图形,我称之为 部件:
随机添加一个节点 主图 的方式,使该节点属于 主图 不属于 部件 不属于MIS的一部分)。例如 在组件中加入节点10。
计算它形成的组件的大小。
对所有节点(不属于组件(MIS)的节点)重复这个过程。
最后,形成最小的组件(尺寸最小)的节点是永久添加到了 部件.
你的解决方案。
cls = components.clusters()
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)
你可以简单地得到组件顶点 i
所属
components = G.clusters()
c = components.membership[i]
然后你可以得到组件的大小 c
使用
s = components.size(c)