3

我有以下形式的字典

{   0: [1, 2, 3, 4, 5]
    1: [6, 2, 3, 4, 5]
    2: [3, 4, 5, 6, 7]
    3: [8, 9]
    ...
}

每个值(未排序的列表)对应于我想在我的图表中引入的一个集团。不幸的是,如您所见,许多派系共享顶点,这些顶点也是其他派系的一部分。现在,我对这些派系进行了直接的诱导:

for clique in clique_dict.itervalues(): 
    graph.add_edges_from(combinations(clique, 2))

但这在某种意义上是耗时的,因为许多边对已经作为其他集团归纳的一部分而较早地被引出。有没有更有效的方法来诱导这些集团?也许对这些集团本身进行一些后期处理?

4

1 回答 1

1

如果你准备一个所有独特边的列表然后一次添加它们,你可能会得到一些轻微的改进:

edges = set(chain.from_iterable([tuple(sorted(pair)) for pair 
            in combinations(clique, 2)] for clique in clique_dict.values()))
graph.add_edges_from(edges)

添加了排序以避免出现像 (2,3) 和 (3,2) 这样的反平行边缘。

于 2018-01-20T20:53:28.410 回答