有向非循環グラフが与えられた場合、分岐が22に等しいパスの合計を返すかどうかを決定します。下の例では、そのようなパスは(7 + 8 + 3 + 4)にあります。そのようなアルゴリズムの実行時間の複雑さは何ですか?有向無巡回グラフのパス合計
7
/\
8 6
/\/\
2 3 8
// \
5 4 1
これは私が思いついたものです。
public boolean hasPathToSum(Node root, int sum)
{
if (root == null) return false;
if (root.value == sum && (root.left == null && root.right == null))
return true;
return hasPathToSum(root.left, sum - root.value) || hasPathToSum(root.right, sum - root.value);
}
複雑さを改善するための推奨事項はありますか?
データ構造は、グラフよりもバイナリツリーのように見えます(ノードには、エッジのリストの代わりに 'left'と' right'があります)。この場合、複雑さは 'O(n)'です。ここで 'n'はツリー内のノードの総数です。各ノードを訪問しているからです。 – Aziz
木であれば、幅優先探索は 'O(n)'で行うことができます。森林は「O(n^2)」で横断することができます。 – yacc
この単純な例でも、ノード「3」は2回訪問されます。 –