いくつかの背景
基本的に着信データを発信データにマップする関数の制御フロー グラフを分析しています。ほとんどのブロックは次のようなものです。
if (input_variable == SPECIFIC_CONSTANT) {
output_variable = TRUE;
}
else {
output_variable = FALSE;
}
このようなコードの典型的な制御フロー グラフは、次のグラフのようになります。
digraph G {
2 -> 3 -> 5;
2 -> 4 -> 5;
}
3
ここで、 andの実行はbut4
の値によって条件付けられ、独立しています。input_variable
5
質問
有向グラフと開始ノードが与えられた場合、開始ノードからのパスがこのノードを通過するように最も近いノードを見つけるにはどうすればよいですか?
例:このグラフ6
が与えられた場合、どのように開始2
または12
開始を見つけることができます8
か?
Lowest Common Ancestor アルゴリズムを逆にすることはできますか?それは効率的ですか? お気に入り
for each node in graph:
ancestors = node.get_all_ancestors()
lca = find_lowest_common_ancestor(ancestors)
junction_node[lca] = node
get_junction_point(node):
return junction_node[node]
私のプログラミング言語は Python で、NetworkX を発見したばかりですが、どんなアルゴリズムでも構いません。私はグラフ理論に慣れていないので、探しているものを見つけるための基本的な用語集を見逃していると思います。
ご協力いただきありがとうございます!