簡體   English   中英

使用networkx對邊緣進行約束的圖同構

[英]Graph isomorphism with constraints on the edges using networkx

我想定義我自己的兩個圖的同構。 我想檢查兩個圖是否同構,因為每條邊都有一些屬性——基本上是放置每條邊的順序。 我想知道是否可以使用以下方法:

networkx.is_isomorphic(G1,G2, edge_match=some_callable) 

以某種方式通過定義 function some_callable()

例如,下圖是同構的,因為您可以重新標記節點以從另一個節點獲取一個。

G1 G2

即,重新標記 [2<->3]。

但是,下面的圖不是同構的。

G3 G4

沒有辦法通過重新標記節點來從另一個獲得一個。

這里是 go。 這正是edge_match選項的用途。 我將創建 3 個圖,前兩個是同構的(即使權重有不同的名稱 --- 我已經設置了比較 function 來說明這一點)。 第三個不是同構的。

import networkx as nx
G1 = nx.Graph()
G1.add_weighted_edges_from([(0,1,0), (0,2,1), (0,3,2)], weight = 'aardvark')
G2 = nx.Graph()
G2.add_weighted_edges_from([(0,1,0), (0,2,2), (0,3,1)], weight = 'baboon')
G3 = nx.Graph()
G3.add_weighted_edges_from([(0,1,0), (0,2,2), (0,3,2)], weight = 'baboon')

def comparison(D1, D2):    
    #for an edge u,v in first graph and x,y in second graph
    #this tests if the attribute 'aardvark' of edge u,v is the 
    #same as the attribute 'baboon' of edge x,y.

    return D1['aardvark'] == D2['baboon']

nx.is_isomorphic(G1, G2, edge_match = comparison)
> True
nx.is_isomorphic(G1, G3, edge_match = comparison)
> False

此處使用完全相同的圖表專門回答問題中的問題。 請注意,我正在使用 networkx.MultiGraph 並在放置這些邊時考慮一些“排序”。

import networkx as nx

G1,G2,G3,G4=nx.MultiGraph(),nx.MultiGraph(),nx.MultiGraph(),nx.MultiGraph()

G1.add_weighted_edges_from([(0, 1, 0), (0, 2, 1), (0, 3, 2)], weight='ordering')
G2.add_weighted_edges_from([(0, 1, 0), (0, 3, 1), (0, 2, 2)], weight='ordering')                                                                            
G3.add_weighted_edges_from([(0, 1, 0), (0, 1, 1), (2, 3, 2)], weight='ordering')
G4.add_weighted_edges_from([(0, 1, 0), (2, 3, 1), (0, 1, 2)], weight='ordering')

def comparison(D1,D2):
    return D1[0]['ordering'] == D2[0]['ordering']

nx.is_isomorphic(G1,G2, edge_match=comparison)                                                                                          
>True

nx.is_isomorphic(G3,G4, edge_match=comparison)                                                                                          
>False

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM