Algorithm 聚类系数的计算

Algorithm 聚类系数的计算,algorithm,graph,machine-learning,cluster-analysis,data-mining,Algorithm,Graph,Machine Learning,Cluster Analysis,Data Mining,我在视频中看到,使用以下算法计算星图中心节点的聚类系数是θ(n^2),而对于团,则是θ(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]: link

我在视频中看到,使用以下算法计算星图中心节点的聚类系数是θ(n^2),而对于团,则是θ(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))

复杂性取决于图形的密度,以及谓词中的
的效率

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

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


假设每个节点正好有两个邻居。然后,可以很容易地将复杂性降低到
O(1)*n
。哦,若每个节点都有0个邻居,那个就更简单了。

但在python中,字典的in运算符的复杂性是θ(1)。所以算法的复杂度应该是θ(n^2)。为什么在视频中说它是θ(n^3)?可能是因为他们对所有实例都这样做。这是一个图形示例:{'a':{'b':真的,'c':真的},'b':{'a':真的,'c':真的},'c':{'a':真的,'b':真的}。if语句不接受θ(1),因为它是字典吗?如果它取θ(1),我们有循环的θ(n^2)和取θ(1)的if语句,所以星图和完整图都应该是θ(n^2)。我错了吗?我假设整个函数将被调用
n
次。