Finding cycle of 3 nodes ( or triangles) in a graph

后端 未结 11 2187
南旧
南旧 2020-12-31 15:42

I am working with complex networks. I want to find group of nodes which forms a cycle of 3 nodes (or triangles) in a given graph. As my graph contains about million edges, u

11条回答
  •  我在风中等你
    2020-12-31 16:23

    This is a more efficient version of Ajay M answer (I would have commented it, but I've not enough reputation).

    Indeed the enumerate_all_cliques method of networkx will return all cliques in the graph, irrespectively of their length; hence looping over it may take a lot of time (especially with very dense graphs).

    Moreover, once defined for triangles, it's just a matter of parametrization to generalize the method for every clique length so here's a function:

    import networkx as nx
    
    def get_cliques_by_length(G, length_clique):
        """ Return the list of all cliques in an undirected graph G with length 
        equal to length_clique. """
        cliques = []
        for c in nx.enumerate_all_cliques(G) :
            if len(c) <= length_clique:
                if len(c) == length_clique:
                    cliques.append(c)            
            else:
                return cliques
        # return empty list if nothing is found
        return cliques
    

    To get triangles just use get_cliques_by_length(G, 3).

    Caveat: this method works only for undirected graphs. Algorithm for cliques in directed graphs are not provided in networkx

提交回复
热议问题