图和树的基本概念与认识
1.圖是什么:
?圖由頂點(vertex,node)和邊(edge)組成。頂點就是代表對象,因為有時候題不會直接給頂點,而是某種對象,直接看成頂點即可。我們使用鏈接兩頂點之間的線段來表示。頂點的集合V,邊的集合是E,所以圖記為G = (V,E), 連接兩點u和v的邊用e=(u,v)表示。
?圖的種類:
??圖大體上分成兩種,邊沒有指向性的圖叫做無向圖,邊具有指向性的圖叫做有向圖。我們還可以賦予各種各樣的屬性。比較具有代表性的權值(cost)。邊上帶有權值的圖叫做帶權圖。在不同問題中,權值可以代表距離,時間以及價格等不同的屬性。
無向圖的術語:
兩個頂點之間如果有邊連接,那么就視為兩個頂點相鄰。相鄰頂點的序列稱為路徑。起點和終點重合的路徑叫做圈。
任意兩點之間都有路徑連接的圖叫做連通圖。頂點連接的邊數叫做這個頂點的度。
沒有圈的連接圖叫做樹(tree),沒有圈的非連接圖叫做森林。一棵樹的邊數恰好是頂點數-1.反之,邊數等于頂點數-1
的連通圖就是一棵樹。如果樹上選擇一個頂點作為跟(root),就可以把根提到最上面,而離根越遠的頂點越往下安排位置。
這樣的樹叫做有根樹。不過,對于無根樹,有時選擇適當的頂點作為根使之變成有根樹。
沒有圈的有向圖叫做DAG。對于每個頂點按照拓撲序列從左到右排列,那么所有的邊都是從左指向右的。
圖的表示:
1.鄰接矩陣
鄰接矩陣使用二維數組來表示圖。g[i][j]表示的是頂點i和頂點j的關系。
由于在無向圖中,只需要知道頂點i和j之間是否有邊相連即可,因此如果頂點i和頂點j之間有邊相連,那么g[i][j] 和 g[j][i]
就設為1,否則設為0。這樣就可以表示一個無向圖了(也叫雙向圖)。
由于在有向圖中,只需要知道是否有從頂點i發出指向頂點j的邊,因此如果頂點i有一條指向j的邊,那么g[i][j]就設為1,
否則就設為0(注意這是有向圖)。
在帶權圖中,g[i][j]表示的是頂點i到頂點j的邊的權值。由于在邊不存在的情況下,如果將g[i][j]設為0,就無法和權值為0
的情況區分開來,因此選取適當的較大的常數inf,然后令g[i][j]=inf。
使用鄰接矩陣的好處是可以在常數時間內判斷兩點之間是否有邊存在,但是很消耗空間,如果點數>1000就很麻煩了。
大部分情況下,只需要保存權值最小(最大)的邊就可以了,所以在這種情況下可以無視其他的邊。必須保存所有的邊
時可以使用鄰接表。
鄰接表是通過把從頂點i出發有到頂點j的邊,這樣的信息保存在鏈表中來表示圖的。
總結
以上是生活随笔為你收集整理的图和树的基本概念与认识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 职称计算机考试s符号,考前必看!2020
- 下一篇: 孵化出Uber、Airbnb的掌门人:如