私は強結合成分に対する Tarjan のアルゴリズムを研究していますが、その仕組みは明らかです。とにかく、私が理解できない行があります:
// Consider successors of v
for each (v, w) in E do
if (w.index is undefined) then
// Successor w has not yet been visited; recurse on it
strongconnect(w)
v.lowlink := min(v.lowlink, w.lowlink)
else if (w.onStack) then
// Successor w is in stack S and hence in the current SCC
v.lowlink := min(v.lowlink, w.index) // *************
end if
end for
アスタリスクで線をマークしました。バックエッジに遭遇したときにノードの発見インデックス/時間を取得する必要があるのはなぜですか
v.lowlink := min(v.lowlink, w.index)
コンポーネントの値を取得するだけでなく、
v.lowlink := min(v.lowlink, w.lowlink)
これが問題になるケースは考えられません。
誰か教えてください。編集:これは単なるセマンティック要件であると思われます。つまり、 lowlink は、1 つの back-edge のみを持つノードから到達可能な最古の祖先として定義されていますが、これは単なる推測です。