圖的理論基礎

本章介紹數據結構中圖的基本概念。html

目錄
1. 圖的基本概念
2. 圖的存儲結構
git

轉載請註明出處:http://www.cnblogs.com/skywang12345/github

更多內容:數據結構與算法系列 目錄算法

圖的基本概念

1. 圖的定義數組

定義:圖(graph)是由一些點(vertex)和這些點之間的連線(edge)所組成的;其中,點一般被成爲"頂點(vertex)",而點與點之間的連線則被成爲"邊或弧"(edege)。一般記爲,G=(V,E)。數據結構

2. 圖的種類學習

根據邊是否有方向,將圖能夠劃分爲:無向圖有向圖ui

2.1 無向圖spa

上面的圖G0是無向圖,無向圖的全部的邊都是不區分方向的。G0=(V1,{E1})。其中,htm

(01) V1={A,B,C,D,E,F}。 V1表示由"A,B,C,D,E,F"幾個頂點組成的集合。
(02) E1={(A,B),(A,C),(B,C),(B,E),(B,F),(C,F), (C,D),(E,F),(C,E)}。 E1是由邊(A,B),邊(A,C)...等等組成的集合。其中,(A,C)表示由頂點A和頂點C鏈接成的邊。

2.2 有向圖

上面的圖G2是有向圖。和無向圖不一樣,有向圖的全部的邊都是有方向的! G2=(V2,{A2})。其中,

(01) V2={A,C,B,F,D,E,G}。 V2表示由"A,B,C,D,E,F,G"幾個頂點組成的集合。
(02) A2={<A,B>,<B,C>,<B,F>,<B,E>,<C,E>,<E,D>,<D,C>,<E,B>,<F,G>}。 E1是由矢量<A,B>,矢量<B,C>...等等組成的集合。其中,矢量<A,B)表示由"頂點A"指向"頂點C"的有向邊。

3. 鄰接點和度

3.1 鄰接點

一條邊上的兩個頂點叫作鄰接點。
例如,上面無向圖G0中的頂點A和頂點C就是鄰接點。

在有向圖中,除了鄰接點以外;還有"入邊"和"出邊"的概念。
頂點的入邊,是指以該頂點爲終點的邊。而頂點的出邊,則是指以該頂點爲起點的邊。
例如,上面有向圖G2中的B和E是鄰接點;<B,E>是B的出邊,仍是E的入邊。

3.2 度

在無向圖中,某個頂點的度是鄰接到該頂點的邊(或弧)的數目。
例如,上面無向圖G0中頂點A的度是2。

在有向圖中,度還有"入度"和"出度"之分。
某個頂點的入度,是指以該頂點爲終點的邊的數目。而頂點的出度,則是指以該頂點爲起點的邊的數目。
頂點的度=入度+出度。
例如,上面有向圖G2中,頂點B的入度是2,出度是3;頂點B的度=2+3=5。

4. 路徑和迴路

路徑:若是頂點(Vm)到頂點(Vn)之間存在一個頂點序列。則表示Vm到Vn是一條路徑。
路徑長度:路徑中"邊的數量"。
簡單路徑:若一條路徑上頂點不重複出現,則是簡單路徑。
迴路:若路徑的第一個頂點和最後一個頂點相同,則是迴路。
簡單迴路:第一個頂點和最後一個頂點相同,其它各頂點都不重複的迴路則是簡單迴路。

5. 連通圖和連通份量

連通圖:對無向圖而言,任意兩個頂點之間都存在一條無向路徑,則稱該無向圖爲連通圖。 對有向圖而言,若圖中任意兩個頂點之間都存在一條有向路徑,則稱該有向圖爲強連通圖。

連通份量:非連通圖中的各個連通子圖稱爲該圖的連通份量。

6. 權

在學習"哈夫曼樹"的時候,瞭解過"權"的概念。圖中權的概念與此相似。

上面就是一個帶權的圖。

圖的存儲結構

上面瞭解了"圖的基本概念",下面開始介紹圖的存儲結構。圖的存儲結構,經常使用的是"鄰接矩陣"和"鄰接表"。

1. 鄰接矩陣

鄰接矩陣是指用矩陣來表示圖。它是採用矩陣來描述圖中頂點之間的關係(及弧或邊的權)。
假設圖中頂點數爲n,則鄰接矩陣定義爲:


下面經過示意圖來進行解釋。

圖中的G1是無向圖和它對應的鄰接矩陣。

圖中的G2是無向圖和它對應的鄰接矩陣。

一般採用兩個數組來實現鄰接矩陣:一個一維數組用來保存頂點信息,一個二維數組來用保存邊的信息。
鄰接矩陣的缺點就是比較耗費空間。

2. 鄰接表

鄰接表是圖的一種鏈式存儲表示方法。它是改進後的"鄰接矩陣",它的缺點是不方便判斷兩個頂點之間是否有邊,可是相對鄰接矩陣來講更省空間。

圖中的G1是無向圖和它對應的鄰接矩陣。

圖中的G2是無向圖和它對應的鄰接矩陣。

相關文章
相關標籤/搜索