def structure_dependent_index(G, ebunch=None):
if ebunch is None:
ebunch = nx.non_edges(G)
#C = nx.average_clustering(G)
#d = nx.average_shortest_path_length(G)
path_range = max(2, math.ceil(nx.average_shortest_path_length(G)))
#print path_range
def predict(u, v):
#NeighborSet = nx.all_neighbors(G, u)
#len( sorted(nx.common_neighbors(G, u, v) ))
SD_Index = {}
#Generate all simple paths in the graph G from source to target, length <= cutoff .
paths = list( nx.all_simple_paths(G, source=u, target=v, cutoff = path_range))
print paths
for path in paths:
if SD_Index.has_key( len(path) ):
SD_Index[len(path)] = SD_Index[len(path)] + 1.0
else:
SD_Index[len(path)] = 1.0
#end for
print SD_Index
#Sum up the num of paths with different length
Coefficient = 0.6
SD_Value = 0.0
key_Sequence = list(sorted(SD_Index.keys()))
for key in key_Sequence:
if key != 2:
SD_Value = SD_Value + math.pow(Coefficient, key-2.0) * SD_Index[key]
#end for
return SD_Value #Coefficient = 0.6
Rank_List = []
for u, v in ebunch:
Rank_List.append((u, v, predict(u, v)))
return Rank_List #((u, v, predict(u, v)) for u, v in ebunch)
##======================================================================##
评论列表
文章目录