2017-06-13 13 views
0

グラフでは、ノードに接続された(直接バインドされた)エッジの数はどのようにして求められますか?
そして、それは簡単ですが、最大の辺が接続されたユニークなノードを見つける直接的な方法があれば、それはいいでしょう。
私はPython 2.7とNetworkxを使用しています。ノードに接続されたエッジの数と最大接続エッジを持つノードを見つける

今まで、私はこのようにやっている:

sG   = list(nx.connected_component_subgraphs(G)) # sG is a sub_graph of main graph G 
nb_sG   = len(sub_graphs) 
max_con_node = list() 
for m in xrange(nb_sG): 
    sG_nodes  = [(node, len(sG[m].edges(node)), sG[m].edges(node)) for node in sG[m].nodes()] 
    connexions = [i[1] for i in sG_nodes] 
    idx   = [i for i,x in enumerate(connexions) if x==max(connexions)] 
    max_con_node.append((max(connexions), [sG_nodes[i][0] for i in idx])) 

感謝を。

答えて

0

グラフを表すために隣接リストを使用しているようです。したがって、ノードに接続されているエッジの数を調べるには、そのノードの隣接リストのサイズを調べることができます。

エッジが最も接続されているノードを見つけるには、すべてのノードを繰り返して、最もエッジがつながっているノードを見つけることができます。この操作を頻繁に繰り返す必要がある場合は、最もエッジの多いノードへのポインタを保持し、余分なエッジを接続したり新しいノードを追加したりするたびに、単に新しいノードをチェックして置き換えます。

は詳細についてはWikipediaのページをチェックアウト: https://en.wikipedia.org/wiki/Adjacency_list

1

私はあなたが、ノードが持っているどのように多くのエッジを見つける方法を求めていると思います。これはノードのとして知られています。

G.degree(node)はノードの次数を示し、G.degree()はキーがノードであり値が対応する次数であるdictです。

したがって、max(G.degree().items(), key = lambda x: x[1])は、最大次数を持つノードの(ノード、次数)を返す単純な1ライナーです。ここで

は一例です:

G = nx.Graph() 
G.add_edges_from([[1,2],[1,3],[2,4],[2,5]]) 
G.degree() 
> {1: 2, 2: 3, 3: 1, 4: 1, 5: 1} 
max(G.degree().items(), key = lambda x: x[1]) 
> (2,3) 
関連する問題