JAVA數據結構——圖

圖:

與線性結構和樹形結構相比,圖是一種更爲複雜的數據結構,因爲複雜所以也更好玩。在線性數據結構中,元素只能和他的前驅或者後繼有關;在樹形結構中,元素只能和其父節點或者子節點有關;然而圖,他可以跟其他任意一個元素相關,這也就是圖的魅力所在。

圖的應用:

那麼我們學圖有什麼用?我們在離散數學和數據結構中都接觸了圖的概念,但是圖在生活中應用在那邊呢?圖的應用處於我們生活的處處面面,如:我們去超市購買 巧克力、米、油三樣東西,如果在不想逛超市的情況下,我們就會在大腦中思考如何最快,最捷徑的方式去買到東西,這中找捷徑的方法就是圖的一種應用,當然你要學好圖,送外賣都可以比別人快。所以好的送外賣的小哥都是圖應用的最好實踐者。

上述那麼多廢話,我們怎麼去求最短路徑?非實際應用中我們有克魯斯卡爾算法和普里姆算法。下面我們介紹一下克魯斯卡爾算法。

克魯斯卡爾算法:

先構造一個只含 n 個頂點、而邊集爲空的子圖,把子圖中各個頂點看成各棵樹上的根結點,之後,從網的邊集 E 中選取一條權值最小的邊,若該條邊的兩個頂點分屬不同的樹,則將其加入子圖,即把兩棵樹合成一棵樹,反之,若該條邊的兩個頂點已落在同一棵樹上,則不可取,而應該取下一條權值最小的邊再試之。依次類推,直到森林中只有一棵樹,也即子圖中含有 n-1 條邊爲止。

簡單的說就是在圖中找到所有的點之間的最短路徑,然後通過最短路徑依次鏈接,最後形成最小生成樹的過程。可能這句話有BUG但是大概思路就是這樣。

根據每個點之間的路徑長由短向長依次鏈接,最後生成最小生成數。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章