【數據結構】數據結構-圖的基本概念


圖的簡介

     圖(Graph)結構是一種非線性的數據結構,圖在實際生活中有很多例子,比如交通運輸網,地鐵網絡,社交網絡,計算機中的狀態執行(自動機)等等都可以抽象成圖結構。圖結構比樹結構復雜的非線性結構。

圖結構構成


 

1.頂點(vertex):圖中的數據元素,如圖一。

2.邊(edge):圖中連接這些頂點的線,如圖一。

 

                        圖一

     所有的頂點構成一個頂點集合,所有的邊構成邊的集合,一個完整的圖結構就是由頂點集合和邊集合組成。圖結構在數學上記為以下形式:

     G=(V,E) 或者 G=(V(G),E(G))

     其中 V(G)表示圖結構所有頂點的集合,頂點可以用不同的數字或者字母來表示。E(G)是圖結構中所有邊的集合,每條邊由所連接的兩個頂點來表示。

     圖結構中頂點集合V(G)不能為空,必須包含一個頂點,而圖結構邊集合可以為空,表示沒有邊。

 

 圖的基本概念


 

     1.無向圖(undirected graph)

       如果一個圖結構中,所有的邊都沒有方向性,那么這種圖便稱為無向圖。典型的無向圖,如圖二所示。由於無向圖中的邊沒有方向性,這樣我們在表示邊的時候對兩個頂點的順序沒有要求。例如頂點VI和頂點V5之間的邊,可以表示為(V2, V6),也可以表示為(V6,V2)。

  

                        圖二  無向圖

      對於圖二無向圖,對應的頂點集合和邊集合如下:

       V(G)= {V1,V2,V3,V4,V5,V6}

       E(G)= {(V1,V2),(V1,V3),(V2,V6),(V2,V5),(V2,V4),(V4,V3),(V3,V5),(V5,V6)}

 

    2.有向圖(directed graph)

      一個圖結構中,邊是有方向性的,那么這種圖就稱為有向圖,如圖三所示。由於圖的邊有方向性,我們在表示邊的時候對兩個頂點的順序就有要求。我們采用尖括號表示有向邊,例如<V2,V6>表示從頂點V2到頂點V6,而<V6,V2>表示頂點V6到頂點V2。

     

                    圖三  有向圖

 

      對於圖三有向圖,對應的頂點集合和邊集合如下:

       V(G)= {V1,V2,V3,V4,V5,V6}

       E(G)= {<V2,V1>,<V3,V1>,<V4,V3>,<V4,V2>,<V3,V5>,<V5,V3>,<V2,V5>,<V6,V5>,<V2,V6>,<V6,V2>}

  

      注意:

          無向圖也可以理解成一個特殊的有向圖,就是邊互相指向對方節點,A指向B,B又指向A。

 

    3.混合圖(mixed graph)

  一個圖結構中,邊同時有的是有方向性有的是無方向型的圖。

  在生活中混合圖這種情況比較常見,比如城市道路中有些道路是單向通行,有的是雙向通行。

 

    4.頂點的度

      連接頂點的邊的數量稱為該頂點的度。頂點的度在有向圖和無向圖中具有不同的表示。對於無向圖,一個頂點V的度比較簡單,其是連接該頂點的邊的數量,記為D(V)。 例如,圖二所示的無向圖中,頂點V5的度為3。而V6的度為2。

     對於有向圖要稍復雜些,根據連接頂點V的邊的方向性,一個頂點的度有入度出度之分。

  •  入度是以該頂點為端點的入邊數量, 記為ID(V)。
  •  出度是以該頂點為端點的出邊數量, 記為OD(V)。

     這樣,有向圖中,一個頂點V的總度便是入度和出度之和,即D(V) = ID(V) + OD(V)。例如,圖三所示的有向圖中,頂點V5的入度為3,出度為1,因此,頂點V5的總度為4。

 

    5.鄰接頂點

      鄰接頂點是指圖結構中一條邊的兩個頂點。 鄰接頂點在有向圖和無向圖中具有不同的表示。對於無向圖,鄰接頂點比較簡單。例如,在圖二所示的無向圖中,頂點V2和頂點V6互為鄰接頂點,頂點V2和頂點V5互為鄰接頂點等。

      對於有向圖要稍復雜些,根據連接頂點V的邊的方向性,兩個頂點分別稱為起始頂點(起點或始點)和結束頂點(終點)。有向圖的鄰接頂點分為兩類:

  • 入邊鄰接頂點:連接該頂點的邊中的起始頂點。例如,對於組成<V2,V6>這條邊的兩個頂點,V2是V6的入邊鄰接頂點。

  • 出邊鄰接頂點:連接該頂點的邊中的結束頂點。例如,對於組成<V2,V6>這條邊的兩個頂點,V6是V2的出邊鄰接頂點。

          

    6.無向完全圖

      如果在一個無向圖中, 每兩個頂點之間都存在條邊,那么這種圖結構稱為無向完全圖。典型的無向完全圖,如圖四所示。

              圖四  無向完全圖

    理論上可以證明,對於一個包含M個頂點的無向完全圖,其總邊數為M(M-1)/2。比如圖四總邊數就是5(5-1)/ 2 = 10。

 

    7.有向完全圖

      如果在一個有向圖中,每兩個頂點之間都存在方向相反的兩條邊,那么這種圖結構稱為有向完全圖。典型的有向完全圖,如圖五所示。

      

                 圖五 有向完全圖

 

      理論上可以證明,對於一個包含N的頂點的有向完全圖,其總的邊數為N(N-1)。這是無向完全圖的兩倍,這個也很好理解,因為每兩個頂點之間需要兩條邊。

 

      8.有向無環圖(DAG圖)

    如果一個有向圖無法從某個頂點出發經過若干條邊回到該點,則這個圖是一個有向無環圖。

    有向無環圖可以利用在區塊鏈技術中。

  9.無權圖和有權圖

       

 這里的權可以理解成一個數值,就是說節點與節點之間這個邊是否有一個數值與它對應,對於無權圖來說這個邊不需要具體的值。對於有權圖節點與節點之間的關系可能需要某個值來表示,比如這個數值能代表兩個頂點間的距離,或者從一個頂點到另一個頂點的時間,所以這時候這個邊的值就是代表着兩個節點之間的關系,這種圖被稱為有權圖;

 

10.圖的連通性

    圖的每個節點不一定每個節點都會被邊連接起來,所以這就涉及到圖的連通性,如下圖:

可以發現上面這個圖不是完全連通的。

 

11.簡單圖 ( Simple Graph)

 對於節點與節點之間存在兩種邊,這兩種邊相對比較特殊

  1.自環邊(self-loop):節點自身的邊,自己指向自己。

  2.平行邊(parallel-edges):兩個節點之間存在多個邊相連接。

  這兩種邊都是有意義的,比如從A城市到B城市可能不僅僅有一條路,比如有三條路,這樣平行邊就可以用到這種情況。不過這兩種邊在算法設計上會加大實現的難度。而簡單圖就是不考慮這兩種邊。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM