警告として、私はまだPythonに少し慣れていません
networkx ライブラリを使用して、有向グラフの推移還元を実行しようとしています。アルゴリズムを見つけましたが、実装に問題があります。簡単な検索の後、他のスタック交換の質問で私のものと同様のアルゴリズムを見つけましたが、アルゴリズムを実際にコーディングする方法のデモンストレーションはありませんでした。
ここに私のアルゴリズムがあります:
For X in Nodes
For Y in Nodes
For z in Nodes
if (x,y) != (y,z) and (x,y) != (x,z)
if edges xy and yz are in Graph
delete xz
これをpythonで表現しようとする私の試みは次のとおりです。
G = graph
N = G.Nodes()
for x in N:
for y in N:
for z in N:
if (x,y) != (y,z) and (x,y) != (x,z):
if (x,y) and (y,z) in G:
G.remove_edge(x,z)
ネットワーク内のエッジのすべての順列を適切に呼び出しているとは思わず、itertools を使用しようと考えていました。可能なすべての順列があったとしても、その情報を使用してアルゴリズムを実装する方法がわかりません。
どんな助けでも素晴らしいでしょう。ありがとう!