数据结构之图的基本操作
圖的基本操作
- 基本操作:
- 判斷邊是否存在:
- 列出與某節(jié)點(diǎn)相鄰的邊:
- 在圖中插入一個(gè)頂點(diǎn):
- 在圖中刪除一個(gè)頂點(diǎn):
- 在圖中添加一條邊:
- 在圖中刪除一個(gè)邊:
- 查找某頂點(diǎn)的第一個(gè)鄰接點(diǎn):
- 查找某邊的權(quán)值:
- 查找某一頂點(diǎn)鄰接點(diǎn)的下一個(gè)鄰接點(diǎn):
基本操作:
判斷邊是否存在:
ps:
在鄰接表中,要搜索某節(jié)點(diǎn)的整個(gè)邊表才能找到是否存在邊,O(1)~O(|v|)
在鄰接矩陣中,只需要判斷該邊對(duì)應(yīng)數(shù)組位置的值即可,O(1)
所以從判斷是否存在邊的角度看,鄰接矩陣法更優(yōu)
列出與某節(jié)點(diǎn)相鄰的邊:
無(wú)向圖:
在鄰接矩陣中,只需要搜索對(duì)應(yīng)行或對(duì)應(yīng)列即可,O(|V|)
在鄰接表中,只需要遍歷該節(jié)點(diǎn)的邊表即可,O(1)~O(|V|)
所以在無(wú)向圖中, 列出與某節(jié)點(diǎn)相鄰的邊時(shí)鄰接表法更優(yōu)
有向圖:
在鄰接矩陣中,只需要搜索對(duì)應(yīng)行和對(duì)應(yīng)列即可,O(|V|)
在鄰接表中,出邊很容易,但是找入邊需要遍歷整個(gè)邊表:
1、尋找出邊:O(1)~O(|V|)
2、尋找入邊:O(|E|) (遍歷所有的邊節(jié)點(diǎn))
所以在有向圖中,列出與某節(jié)點(diǎn)相鄰的邊時(shí)鄰接矩陣法更優(yōu)(但是存儲(chǔ)稀疏圖,E比較小)
在圖中插入一個(gè)頂點(diǎn):
ps:
在鄰接表法中,將該頂點(diǎn)加入到頂點(diǎn)表中將邊的關(guān)系加入到邊表中,O(1)
在鄰接矩陣法中,擴(kuò)充一行和一列,放置對(duì)應(yīng)關(guān)系,O(1)
在圖中刪除一個(gè)頂點(diǎn):
無(wú)向圖:
ps:
在鄰接表法中,刪除該節(jié)點(diǎn)和對(duì)應(yīng)的邊表即可,O(|V|)
在鄰接矩陣法中,刪除該頂點(diǎn)對(duì)應(yīng)的行與列即可,有以下兩種情況,O(1)~O(|E|)
1、將后續(xù)元素前移,用D覆蓋C,但是會(huì)讓大量元素移動(dòng),代價(jià)太大
2、將刪除節(jié)點(diǎn)對(duì)應(yīng)行列置0,在頂點(diǎn)結(jié)構(gòu)體中設(shè)置bool變量來(lái)標(biāo)記節(jié)點(diǎn)的空
有向圖:
在圖中添加一條邊:
ps:
在鄰接表法中,在倆端節(jié)點(diǎn)的邊表添加該邊,O(1)
在鄰接矩陣法中,把對(duì)應(yīng)的倆個(gè)矩陣值修改即可,O(1)(頭插法優(yōu)于尾插法,O(1)是頭插法的時(shí)間復(fù)雜度,尾插法還需要遍歷邊表)
在圖中刪除一個(gè)邊:
ps:
在鄰接表法中,遍歷整個(gè)邊表找到對(duì)應(yīng)的邊表節(jié)點(diǎn),然后刪除
在鄰接矩陣法中,只需要修改對(duì)應(yīng)位的值即可
所以在在刪除邊的操作中,鄰接矩陣法更優(yōu)
查找某頂點(diǎn)的第一個(gè)鄰接點(diǎn):
鄰接矩陣:O(1)~O(|V|)
鄰接表:O(1)
查找某邊的權(quán)值:
核心問題:找邊
鄰接矩陣:O(1)
鄰接表:O(1)~O(|V|)
查找某一頂點(diǎn)鄰接點(diǎn)的下一個(gè)鄰接點(diǎn):
鄰接矩陣:O(1)~O(|V|)
鄰接表:O(1)
總結(jié)
以上是生活随笔為你收集整理的数据结构之图的基本操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统之进程管理:18、预防死锁
- 下一篇: 国内油价今日将迎九连跌 出租车燃油费望调