最短路徑問題
最短路徑是把兩點之間路徑最短的問題,應用如導航,兩個地方怎么走距離最短。可以存在到不了的情況。
這個問題是說,如何找到從某個特定的節點出發,通向其他節點的最短路徑。它只着眼於點與點之間的路徑問題,並不關注整個圖,也就意味着對一個節點運行算法的結果與另一個節點的結果之間沒有多少關系。
比如說,可以把城市的路口看作圖的節點,把公路看做邊,綜合長度、擁堵程度等指標作為邊的權重,就可以通過Dijkstra算法計算出從城市一點到另一點的最短路線。
最小生成樹問題
最小生成樹是把連通的圖的所有頂點連起來路徑之和最小的問題,即生成樹總權值之和最小。
即在一個連通的圖里,如何去除圖里的邊,使得剩余的邊仍能連接所有的節點,且這些邊的權重之和最小。顯然,滿足這個要求的圖不可能存在環,也就是一棵樹,因此叫做生成樹。這種算法與上面的相反,着眼於整個圖的結構,並不關心某兩個節點之間的路徑是不是最短的。
這種算法的應用也很廣泛,比如說有一個快遞公司,每天都要開車把快遞送到城市里的不同地點,怎樣走才能不重復地經過每個節點,還能讓總時間最短呢?我們就可以用Kruskal這樣的最小生成樹算法,找到一個最小生成樹,只需要按這個路線走就行了。