入力された大きなグラフからサブグラフ内の特定の数のノードを持つすべての可能な誘導サブグラフ (グラフレット) を抽出するために networkx を使用できるかどうか、またはジョブを実行できる別のパッケージがあるかどうか疑問に思っていますか? たとえば、ネットワークx隣接リスト形式で示されている大きなグラフがある場合、
グラフ G:
1 2 3 7
2 1 4
3 1 4 6 5
4 2 3 5
5 3 4 6
6 3 5 7
7 1 6
次のようになります
3 つのノードでグラフレットを抽出したい場合、アルゴリズムは私を返す必要があります
サブグラフ1:
1 2 3
2 1
3 1
[(1,2),(1,3)]
subgraph2:
1 3 7
3 1
7 1
[(1,3),(1,7)]
subgraph3:
3 4 5
4 3 5
5 3 4
[(3,4),(3,5),(4,5)]
subgraph4,subgraph5,subgraph6...
以下は、@Hooked が提案した質問のコードです。n=3 としましょう
import itertools
target = nx.complete_graph(3)
for sub_nodes in itertools.combinations(g.nodes(),len(target.nodes())):
subg = g.subgraph(sub_nodes)
if nx.is_connected(subg):
print subg.edges()
出力は次のようになります
[(1, 2), (1, 3)]
[(1, 2), (2, 4)]
[(1, 2), (1, 7)]
[(1, 3), (3, 4)]
[(1, 3), (3, 5)]
[(1, 3), (3, 6)]
[(1, 3), (1, 7)]
[(1, 7), (6, 7)]
[(2, 4), (3, 4)]
[(2, 4), (4, 5)]
[(3, 4), (3, 5), (4, 5)]
[(3, 4), (3, 6)]
[(3, 5), (3, 6), (5, 6)]
[(3, 6), (6, 7)]
[(4, 5), (5, 6)]
[(5, 6), (6, 7)]