廣度優先搜索(BFS)
1、將頭結點放入隊列Q中
2、while Q!=空
u出隊
遍歷u的鄰接表中的每個節點v
將v插入隊列中
當使用無向圖的鄰接表時,復雜度為O(V^2)
當使用有向圖的鄰接表時,因為每條邊只訪問一次,不會重復訪問,所以總復雜度為O(V+E)
深度優先搜索(DFS)
for each vertex u∈V(G) //執行時間為O(V)
DFS(u)
DFS內部:
for each v 為u的鄰接點 //執行時間為O(E)
DFS(v)
總執行時間為O(V+E)
A*搜索
從A開始,遍歷周圍的點,且避開close中以及障礙點,利用f(x) = g(x)+h(x)評價這些點,選取最佳點。並且如果第二次評價某點時,取記錄中該點的f(x)值與現在計算得到的f(x)值更小的,放入到記錄中
算法復雜度:
外循環中每次從open中取出點,共取n次,
內循環:遍歷它的鄰接點n(E),並將這些鄰接點放入open中,對open進行排序,open表大小是O(n)量級的,若用快排就是O(nlogn),內循環總的復雜度為O(n*logn+E)=O(n*logn)
總復雜度為 O(n^2*logn)
Dijkstra(旅行商問題,最短距離遍歷所有的城市)


行2--4的初始化對n個頂點進行,顯然是O(n)
5--6行O(1)
7行n個頂點入隊列O(n)
8行--14行,從8行可以看出進行了n遍循環,每遍在第九行調用一次ExtractMin過程,ExtractMin過程需要搜尋鄰接表,每一次需要搜尋整個數組,所以一次操作時間是O(n);11行到14行對節點u的鄰接表中的邊進行檢查,總共有|E|次(總共.每條邊最多檢查一次),因此是O(E);合起來就是O(E+n*n) = O(n^2);
以上合起來就是O(n)+O(1)+O(n)+O(n^2) == O(n^2)
算法復雜度:
O(V^2)