2017-06-13 80 views
0

在圖中,如何查找連接(直接綁定)到一個節點的邊數?
然後,這將是微不足道的,但如果有任何直接的方法來找到最大邊連接到他們的獨特(S)節點(S),這將是很好的。
我正在使用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

看起來您正在使用鄰接列表來表示圖。因此,要查找連接到節點的邊的數量,您可以找到該節點的鄰接列表的大小。

要查找具有最多連接邊的節點,可以遍歷所有節點並找到邊連接最多的節點。如果你不得不經常重複這個操作,你可以保留一個指向最邊緣的節點的指針,並且只要檢查並且可能用新節點替換它,只要你連接額外的邊或添加一個新的節點。

退房更多信息,維基百科頁面: https://en.wikipedia.org/wiki/Adjacency_list

1

我認爲你詢問如何找到一個節點有多少邊了。這被稱爲節點的程度

G.degree(node)給你節點的程度和G.degree()是一個字典,其鍵是節點,其值是相應的度數。

所以max(G.degree().items(), key = lambda x: x[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) 
相關問題