初心者の質問をすることを許してください。しかし、私はアルゴリズムと複雑さの初心者であり、特定のアルゴリズムの複雑さがどのようにして生じたのか理解するのが難しい場合があります。
コーメンのアルゴリズムの紹介から DFSアルゴリズムを読んでいましたが、これがアルゴリズムでした。
G -> graph
G.V -> set of vertices in G
u.π -> parent vertex of vertex u
G.Adj[u] -> adjacency list of vertex u
DFS(G)
1 for each vertex u ∈ G.V
2 u.color = WHITE
3 u.π = NIL
4 time = 0
5 for each vertex u ∈ G.V
6 if u.color == WHITE
7 DFS-VISIT(G,u)
DFS-VISIT(G,u)
1 time = time + 1 // white vertex u has just been discovered
2 u.d = time
3 u.color = GRAY
4 for each v ∈ G.Adj[u] // explore edge u
5 if v.color == WHITE
6 v.π = u
7 DFS-VISIT(G,v)
8 u.color = BLACK // blacken u; it is finished
9 time = time + 1
10 u.f = time
次に、行1-3
と5-7
が表示されO(V)
、への呼び出しを実行する時間を除きますDFS-VISIT()
。ではDFS-VISIT()
、すべての頂点の隣接リストの合計がエッジの数であるため、行4-7
はO(E)
です。そして、それは全体の複雑さがあると結論付けDFS()
ていますO(V + E)
。
それがどうして起こったのか分かりません。内部DFS-VISIT()
で呼び出され DFS()
ます。ラインあれば、5-7
のがDFS()
あるO(V)
とDFS-VISIT()
されO(E)
、その後、全体の時間の複雑さはいけませんDFS()
ことO(VE)
?
6
コーメンは最初にリストされた著者にすぎません。
—
Yuval Filmus
理解できないテキストの正確な引用を教えてもらえますか?それが文字通り「呼び出しを実行する時間を除く」と言っている場合、それは
—
David Richerby 2016
DFS-VISIT()
すでにあなたの質問に答えています:「排他的DFS-VISIT()
」とは、指定された時間にが費やした時間を含まないことを意味しDFS-VISIT()
ます。