1. 程式人生 > >資料結構:圖之DFS與BFS的複雜度分析

資料結構:圖之DFS與BFS的複雜度分析

BFS的複雜度分析。  

     BFS是一種借用佇列來儲存的過程,分層查詢,優先考慮距離出發點近的點。無論是在鄰接表還是鄰接矩陣中儲存,都需要藉助一個輔助佇列,v個頂點均需入隊,最壞的情況下,空間複雜度為O(v)。

    鄰接表形式儲存時,每個頂點均需搜尋一次,時間複雜度T1=O(v),從一個頂點開始搜尋時,開始搜尋,訪問未被訪問過的節點。最壞的情況下,每個頂點至少訪問一次,每條邊至少訪問1次,這是因為在搜尋的過程中,若某結點向下搜尋時,其子結點都訪問過了,這時候就會回退,故時間復 雜度為O(E),演算法總的時間復 度為O(|V|+|E|)。

鄰接矩陣儲存方式時,查詢每個頂點的鄰接點所需時間為O(V),即該節點所在的該行該列。又有n個頂點,故算總的時間複雜度為O(|V|^2)。

DFS複雜度分析

DFS演算法是一一個遞迴演算法,需要藉助一個遞迴工作棧,故它的空問複雜度為O(V)。

遍歷圖的過程實質上是對每個頂點查詢其鄰接點的過程,其耗費的時間取決於所採用結構。

鄰接表表示時,查詢所有頂點的鄰接點所需時間為O(E),訪問頂點的鄰接點所花時間為O(V),此時,總的時間複雜度為O(V+E)。

鄰接矩陣表示時,查詢每個頂點的鄰接點所需時間為O(V),要查詢整個矩陣,故總的時間度為O(V^2)。 

 v為圖的頂點數,E為邊數。