圖的認識

前言

什麼是圖?它能用來幹嗎?本文將以圖文的形式帶你解答上述疑惑,歡迎各位感興趣的開發者閱讀本文。算法

概念

以下圖所示,圓圈叫作頂點(結點),鏈接頂點的線叫作「邊」,也就是說,由頂點和鏈接每對頂點的邊所構成的圖形就是圖。 網絡

做用

圖能夠用來表現各類關係:計算機網絡

  • 人際關係 圖能夠變現社會中的各類關係,使用起來很是方便。假設咱們要舉行一場活動,將參加人員做爲頂點,把互相認識的人用邊鏈接,就能用來表現參加人員之間的人際關係了。 設計

  • 將車站做爲頂點,把相鄰兩站用邊鏈接,就能用圖來表現地鐵的路線。 3d

  • 在計算機網絡中,把路由器做爲頂點,將相互鏈接的兩個路由器用邊鏈接,這樣就能用圖來表現網絡的鏈接關係。 cdn

分類

圖大體分爲無向圖、加權圖、有向圖blog

加權圖

上面講到的都是由頂點和邊構成的圖,而咱們還能夠給邊加上一個值。圖片

這個值就叫作邊的權重或者權,加了權的圖被稱爲「加權圖」。沒有權的邊只能表示兩個頂點的鏈接狀態,而有權的邊就能夠表示頂點之間的「鏈接程度」。 路由

程度:根據圖的內容不一樣,其表示的意思也不一樣,好比在計算機網絡中,給兩臺路由器之間的邊加上傳輸數據所須要的時間,這張圖就能表示網絡之間的通訊時間了。開發

而在路線圖中,若是把地鐵在兩個車站間行駛的時間加在邊上,這張圖就能表現整個路線的移動時間;若是兩個車站間的票價加載邊上,就能表現乘車費了。

有向圖

當咱們想在路線圖中表示該路線只能單向行駛時,就能夠給邊上加上箭頭,而這樣的圖就叫作「有向圖」。好比網頁裏的連接也是有方向性的,用有向圖來表示就會很方便。

邊上沒有箭頭的圖即是「無向圖」。

如圖所示,咱們能夠從頂點A到頂點B,但不能直接從B到A,而B和C之間有兩條邊分別指向兩個方向,所以能夠雙向移動。

和無向圖同樣,有向圖的邊也能夠加上權重。

如圖所示,從頂點B到頂點C的權重爲5,而從C到B的權重爲7,若是作的是一個表示移動時間的圖,從B到C就是下坡路。就像這樣,有向圖還能夠設置非對稱的權重

便利性

假設圖中有兩個頂點 s 和 t,而咱們設計出了一種算法,能夠找到「從s到t的權重之和最小」的那條路徑。

那麼,這種算法就能夠應用到這些問題上:尋找計算機網絡中通訊時間最短的路徑,尋找路線圖中耗時最短的路徑,尋找路線圖中最省乘車費的路徑等。

就像這樣,只要能用圖來表示這些關係,咱們就能夠用解決圖問題的算法來解決這些看似不同的問題。

圖的搜索

圖的搜索,指得是從圖的某一個頂點開始,經過邊到邊到達不一樣的頂點,最終找到目標頂點的過程。根據搜索的順序不一樣,圖的搜索算法有「廣度優先搜索」、「深度優先搜索」等。

圖的搜索能夠解決圖的基本問題:最短路徑問題的算法,最短路徑問題即「從 s 到 t」的路徑中,找到一條所通過的邊的權重總和最小的路徑。

寫在最後

  • 文中使用的圖片源自《個人第一本算法書》,如若侵權,請評論區留言,做者當即刪除相關圖片。
  • 文中若有錯誤,歡迎在評論區指正,若是這篇文章幫到了你,歡迎點贊和關注😊
  • 本文首發於掘金,未經許可禁止轉載💌
相關文章
相關標籤/搜索