5
グラフの中で最も長いパスを決定するコードセグメントを書きました。以下はコードです。しかし、私は途中の再帰的な方法のために計算上の複雑さをどのように得るのか分かりません。最長の経路を見つけることはNP完全な問題であるので、それはO(n!)
またはO(2^n)
のようなものだと仮定しますが、どうすれば実際にそれを決定できますか? n
は、ノードの数を示し、m
は未訪問のノードの数を表し、(あなたがlongestPath
m
回呼び出すため、および訪問したテストn
回実行するループがある)ところ再帰的メソッドと最長のパスアルゴリズムの計算複雑度
public static int longestPath(int A) {
int k;
int dist2=0;
int max=0;
visited[A] = true;
for (k = 1; k <= V; ++k) {
if(!visited[k]){
dist2= length[A][k]+longestPath(k);
if(dist2>max){
max=dist2;
}
}
}
visited[A]=false;
return(max);
}
私はアイデアを取得しています。しかし、あなたはどうしたらいいのか説明できますか?内部の大きなO. – nirandi
ありがとう。それは理にかなっています。最初のO(n)は、メインコードの右側にあるループの不具合によるものですか? – nirandi
また、各ノードについて、訪問するノードの最大数はn-1だから、T(n、n-1)を取るべきだと思います。 – nirandi