數據結構——圖結構

圖的定義和術語

1.鄰接點:假若頂點v和頂點w之間存在一條邊,則稱頂點v和w互爲“鄰接點”。
2.關聯: 邊(v,w)和頂點v和w相“關聯”。或者說邊(w,v)依附於頂點v和w。
在這裏插入圖片描述
3.迴路(環):第一個頂點和最後一個頂點相同的路徑。
4.簡單路徑:序列中頂點不重複出現的路徑。
5.簡單迴路(簡單環):除了第一個頂點和最後一個頂點外,其餘頂點不重複出現的迴路。
6.連通圖:在無向圖中,如果從一個頂點vi到另一個頂點vj(i≠j)有路徑,則稱頂點vi和vj是連通的。
7.連通分量:非連通圖的極大連通子圖稱爲連通分量。
在這裏插入圖片描述
在這裏插入圖片描述
8.強連通圖:在有向圖中,對圖中任意一對頂點vi和vj (i≠j),若從頂點vi到頂點vj和從頂點vj到頂點vi均有路徑,則稱該有向圖是強連通圖。
9.強連通分量:非強連通圖的極大強連通子圖。
在這裏插入圖片描述
10.生成樹:n個頂點的連通圖G的生成樹是包含G中全部頂點的一個極小連通子圖。
在這裏插入圖片描述
11.生成森林:在非連通圖中,由每個連通分量都可以得到一棵生成樹,這些連通分量的生成樹就組成了一個非連通圖的生成森林。
在這裏插入圖片描述

深度優先遍歷(DFS):找邊

基本思想:
⑴ 訪問頂點v;
⑵ 從v的未被訪問的鄰接點中選取一個頂點w,從w出發進行深度優先遍歷;
⑶ 重複上述兩步,直至圖中所有和v有路徑相通的頂點都被訪問到。

在這裏插入圖片描述
歸納:
在訪問圖中某一起始頂點 v 後,由 v 出發,訪問它的任一鄰接頂點 w1;
再從 w1 出發,訪問與 w1鄰接但還未被訪問過的頂點 w2;
然後再從 w2 出發,進行類似的訪問,…
如此進行下去,直至到達所有的鄰接頂點都被訪問過爲止。
接着,退回一步,退到前一次剛訪問過的頂點,看是否還有其它沒有被訪問的鄰接頂點。
如果有,則訪問此頂點,之後再從此頂點出發,進行與前述類似的訪問;
如果沒有,就再退回一步進行搜索。重複上述過程,直到連通圖中所有頂點都被訪問過爲止。
DFS 算法效率分析:
(設圖中有 n 個頂點,e 條邊)
如果用鄰接矩陣來表示圖,遍歷圖中每一個頂點都要從頭掃描該頂點所在行,因此遍歷全部頂點所需的時間爲O(n2)。
如果用鄰接表來表示圖,找鄰結點所需要的時間是O(e) ,加上訪問 n個頭結點的時間,因此遍歷圖的時間複雜度爲O(n+e)。
結論:
稠密圖適於在鄰接矩陣上進行深度遍歷;
稀疏圖適於在鄰接表上進行深度遍歷。

廣度優先遍歷(BFS):找頂點

基本思想:
⑴ 訪問頂點v;
⑵ 依次訪問v的各個未被訪問的鄰接點v1, v2, …, vk;
⑶ 分別從v1,v2,…,vk出發依次訪問它們未被訪問的鄰接點,並使“先被訪問頂點的鄰接點”先於“後被訪問頂點的鄰接點”被訪問。直至圖中所有與頂點v有路徑相通的頂點都被訪問到。
廣度優先搜索是一種分層的搜索過程,每向前走一步可能訪問一批頂點,不像深度優先搜索那樣有回退的情況。因此,廣度優先搜索不是一個遞歸的過程,其算法也不是遞歸的。在這裏插入圖片描述在這裏插入圖片描述
BFS 算法效率分析:
設圖中有 n 個頂點,e 條邊)
時間效率分析:
如果使用鄰接表來表示圖,則BFS循環的總時間代價爲 O(n+e)。同DFS
如果使用鄰接矩陣,則BFS對於每一個被訪問到的頂點,都要循環檢測矩陣中的整整一行( n 個元素),總的時間代價爲O(n2)。同DFS。

DFS與BFS之比較:
空間複雜度相同,都是O(n)(借用了堆棧或隊列);
時間複雜度只與存儲結構(鄰接矩陣或鄰接表)有關,而與搜索路徑無關。
遍歷圖的實質是通過邊找鄰接點的過程,訪問順序不同就產生不同的遍歷方法DFS和BFS。

圖的生成樹

1.生成樹的特徵——n 個頂點的連通網絡的生成樹有 n 個頂點、n-1 條邊。
2.求生成樹的方法——DFS(深度優先搜索)和 BFS(廣度優先搜索).
3.對於連通圖,僅需從圖中任一頂點出發,進行DFS或BFS, 便可訪問到圖中所有頂點. 對於非連通圖,需從多個頂點出發進行搜索,而每一次從一個新的起始點出發進行搜索過程中得到的頂點訪問序 列恰爲其各個連通分量中的頂點集.
4.生成樹的代價:設G=(V,E)是一個無向連通網,生成樹上各邊的權值之和稱爲該生成樹的代價。
5.最小生成樹:在圖G所有生成樹中,代價最小的生成樹稱爲最小生成樹。

求最小生成樹——克魯斯卡爾算法(判斷新添加的邊是否在最小生成樹中構成迴路是該算法的關鍵)
在這裏插入圖片描述
2.求最小生成樹——普利姆算法(從候選節點中選擇最小的權值添加到最小生成樹中)
在這裏插入圖片描述
圖片來源:XX大學老師授課PPT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章