最小生成樹和最短路徑

2021-08-20 22:08:11 字數 1366 閱讀 6770

這篇算作是《演算法》第四版部分讀後感吧

我思考這個問題的開始就是糾結最小生成樹prim演算法和最短路徑dijkstra演算法的異同

1.最小生成樹prim演算法

直接從例子開始吧,我們考慮一副這樣的圖

1.將d設為起始點(設定某個點為起始點是隨機的),考慮與它相鄰節點的權重值,圖中黃色節點,也就是d-a,d-b,d-e,d-f

2.選取權重值最小的d-a將其連線,圖中藍色的代表已經加入到生成樹中,接著考慮與d和a相鄰的節點b,e,f,也就是考慮a-b,d-b,d-e,d-f的權重值

3.我們選擇了最小的d-f將其連線,接著考慮與d,a,f相鄰的節點b,e,g,也就是考慮a-b,d-b,d-e,f-e,f-g的權重值

4.選擇最短的a-b將其連線

5…….

6……

以此類推,大家可以試著自己手畫一下

最後的結果應該是這樣

由prim演算法生成的最小生成樹如圖中藍色線段連起來的路徑

補充一點這裡我覺得這樣可能好理解一點,以第二步中的圖為例

將藍色的節點和藍色的線看做乙個整體,也就是你可以把他們看做是乙個大節點,再去觀察有哪些節點與這個大節點相連,接著再去找最小的權重值

2.最短路徑dijkstra演算法

這裡不同於最小生成樹的是,最小生成樹是要找到最小的邊可以把所有的節點都連線起來,而最短路徑是要指定起點,然後求起點到各個節點的最小值,比如我們要求起點d到各個節點的最短路徑

求d到其餘各個節點的距離結果如下

總結 最小生成樹和最短路徑的目的本來就不是一樣的,最小生成樹是要找到最小的邊可以把所有的節點都連線起來,而最短路徑是要求某個節點到其餘節點的最短的路徑。

最短路徑,最短路徑樹和最小生成樹

首先介紹這三個概念,很多人都聽過最短路徑了,但是最短路徑樹卻很少聽過,關於最短路徑樹的介紹也不太多。而最短路徑樹和最小生成樹更是完全不同的兩個概念。最短路徑就是從乙個指定的頂點出發,計算從該頂點出發到其他所有頂點的最短路徑。通常用dijkstra演算法,floyd演算法求解。最短路徑樹spt sho...

最短路徑 最小生成樹

題目描述 n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離 輸入描述 第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路 接下來m行兩個整數,表示相連的兩個城市的編號 輸出描述 n 1行,表示0號城市到其他城...

最短路徑 最小生成樹

今天覆習的時候,剛好複習的這一塊,所以就簡單做乙個備忘,寫的潦草還望大家不要介意呀 1 dijistra演算法 思路 根據點集合將其分為兩個集合,一種是已經訪問過的點s集合 代表從源點到該集合中的點的距離最小 另一種是未訪問過的u集合,然後每次從u集合中選擇節點,使得源點到改點的距離最小,並新增進s...