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