图的表达与遍历--邻接矩阵和邻接表
今天開始準備學習一個新的數據結構---圖,貌似聽著挺復雜的,當然實際也不容易啦,所以先從理論上對圖有個大概的認識,其實之前咱們學的二叉樹就是一種特殊的圖,怎么個特殊法呢?因為它沒有環,但是圖是可以,它沒有祖先,子孫的關系,如下:
如果任意兩個結點都有一條邊,如下:
此時就叫"完成圖"。
那如果有一個單向的關系,如下:
此時就叫"有向圖"。
那如果有一個雙向的關系,如下:
那此時就叫"雙向有向圖"
當然圖在計算機中還有其它的很多特性待之后慢慢研究,試想一樣這么復雜的一個數據結構,明顯比二叉樹要復雜,那如何去表達它呢?這里有兩種方式來表達:鄰接矩陣和鄰接表,具體如下:
鄰接矩陣:
何為鄰接矩陣,先維基百科一下:
上圖還是有些抽象,下面舉一個例子來展示其形成矩陣的整個過程,咱們對這樣的圖進行研究:
可以畫一個這樣的矩陣:
好,下面再來一一根據圖的關系來填充這個矩陣,如下:
?
至此所有關系都表示完,剩下木有填充的框里全部用0填充,最后矩陣如下:
這樣就通過鄰接矩陣將咱們的圖表達出來了,但是~~明顯這種表式法很浪費空間,咱們舉例的結點比較少,要是有100萬個結點而只有5000條邊呢?那浪費的空間就可想而知了,這時鄰接表就可以很好的解決這個空間的問題。
鄰接表:
那如果用鄰接表來表示同樣的圖,其實是由數組與鏈表相結合來表式的,具體表現如下:
然后以此類推,完整的表達圖的鄰接表如下:
很顯然這種表式圖的方法相對于鄰接矩陣是比較省空間的,下面來算一下這兩種表示方法空間復雜度,假如圖有V個結點,E條邊,對于鄰接矩陣表達占用的空間為V^2,因為橫向和縱向都是V;而如果是用鄰接表表達占用的空間則為V+E,所以說這里從空間復雜度角度來看在選擇用哪種方式去表達圖的時候,如果發現邊比較少結點比較多時用鄰接表是比較合適的,如果邊不是很稀疏的時候可以選擇鄰接矩陣。
轉載于:https://www.cnblogs.com/webor2006/p/7866724.html
總結
以上是生活随笔為你收集整理的图的表达与遍历--邻接矩阵和邻接表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Siamese Neural Netwo
- 下一篇: 日常模板