ループの内側または外側



Inside Outside Loop



今日、興味深いバグに遭遇しました。コードの2行の位置を移動するだけで、パフォーマンスに大きな違いが生じました。この種のバグが個人的な経験でなければ、謎を理解することは困難です。このようなバグは誤った結果をもたらさないため、デバッグは困難です。
それは本当に古いことわざであり、それは山の終わりです。コードを書く必要はもうありません。この興味深いバグを実際に取得することはできません。
このため、私はそれを念頭に置いて書きました。

バグ:forループ初期化オブジェクト内
次のコードでは、forループ80000+の場合、bfsを初期化するには、等しい倍数のforループが必要です。



注:可能な限りループの外側に配置できるコードに注意してください。そうしないと、時間とリソースの両方のリソースが必要になります。

public int ancestor(int v, int w) { int ant = -1 int len = Integer.MAX_VALUE //The following two lines of code are placed in the for loop BreadthFirstDirectedPaths bfsV = new BreadthFirstDirectedPaths(G, v) BreadthFirstDirectedPaths bfsW = new BreadthFirstDirectedPaths(G, w) for(int i = 0 i

BreadthFirstDirectedPathsを初期化します



public BreadthFirstDirectedPaths(Digraph G, int s) { marked = new boolean[G.V()] distTo = new int[G.V()] edgeTo = new int[G.V()] for (int v = 0 v