1. ホーム
  2. algorithm

[解決済み] Breadth First Searchの時間複雑性解析

2022-03-06 23:21:27

質問

ある頂点の隣接する各辺を巡回する際の時間計算量は、例えば、以下のようになる。 O(N) ここで N は隣接するエッジの数である。そのため V の頂点の数は、時間の複雑さは次のようになります。 O(V*N) = O(E) ここで E はグラフ内のエッジの総数である。キューから頂点を削除したり、キューに追加したりするのは O(1) としてBFSの全体的な時間計算量に加算されるのはなぜか? O(V+E) ?

解決方法は?

Breadth First Search (BFS)の計算時間について理解するのに苦労している人の助けになれば幸いです。

Queue graphTraversal.add(firstVertex);

// This while loop will run V times, where V is total number of vertices in graph.
while(graphTraversal.isEmpty == false)

    currentVertex = graphTraversal.getVertex();

    // This while loop will run Eaj times, where Eaj is number of adjacent edges to current vertex.
    while(currentVertex.hasAdjacentVertices)
        graphTraversal.add(adjacentVertex);

    graphTraversal.remove(currentVertex);

時間的な複雑さは以下の通りです。

V * (O(1) + O(Eaj) + O(1))
V + V * Eaj + V
2V + E(total number of edges in graph)
V + E

私はコードと複雑な計算を簡素化しようとしましたが、それでも何か質問があれば私に知らせてください。