计算聚类系数

时间:2012-12-28 12:18:44

标签: algorithm graph machine-learning cluster-analysis data-mining

我在this视频中看到,使用以下算法计算星图的中心节点的聚类系数是theta(n ^ 2),对于clique,它是theta(n ^ 3)。那是对的吗?

def clustering_coefficient(G,v):
    neighbors = G[v].keys()
    if len(neighbors) == 1: return 0.0
    links = 0.0
    for w in neighbors:
        for u in neighbors:
            if u in G[w]: links += 0.5
    return 2.0*links/(len(neighbors)*(len(neighbors)-1))

1 个答案:

答案 0 :(得分:2)

复杂性取决于图表的密度以及in谓词的效率。

完整图表上的天真实现显然是O(n^3):两个嵌套循环和一个in谓词,每个都在线性时间内天真地运行。如果将链接保留在散列映射中(而不是密集矩阵表示中!)那么运行时只有O(n^2) - 对于单个节点。但通常,这样的算法适用于每个节点,为其添加另一个因子n

如果您的图表不完整(并且使用更高效的in谓词),事情会变得更快。假设每个节点都有sqrt(n)个邻居,算法的复杂度将为O(sqrt(n)^2)*n(对于所有节点),这可能是他们的O(n^2)结果。

假设每个节点都有完全两个邻居。然后,复杂性可以轻松降低到O(1) * n。哦,如果每个节点都有0个邻居,那就更简单了。