常見圖算法思想

1 最小生成樹

生成樹:圖有n個結點,用n-1條邊連接起來。
最小生成樹:代價最小的生成樹。

1.1 普里姆算法(Prim)

點擴展:有一個集合其他節點
剛開始,起點在這個集合中,找到到這個集合的最短距離的節點,將這個節點併入這個集合,以此類推直至將所有節點併入這個集合。此集合即最小生成樹。例子如《大話數據結構》P250圖7-6-6.
對稠密圖有優勢。

1.2 克魯斯卡爾算法(Kruskal)

邊擴展:有一個鄰接矩陣,存儲每條邊的權值
按照邊的權值順序將各個節點連接(當形成環時跳過本次連接),以此類推直至將所有節點併入這個集合。此集合即最小生成樹。例子如《大話數據結構》P254-P256.
對稀疏圖有優勢。

2 最短路徑

最短路徑:圖中兩個節點權值和最少的路徑。

2.1 迪傑斯特拉算法(Dijkstra)

點擴展:有一個集合其他節點
通過不斷選擇距離起點最近的頂點,基於已求出的最短路徑,求得更遠的頂點的最短路徑,直到覆蓋圖中所有頂點。有點像Prim算法,但不同之處在於Prim算法計算的是已訪問集合到未訪問集合中各點的距離;Dijkstra算法計算的是源點到未訪問集合中各點的距離。

2.2 弗洛伊德算法(Floyd)

https://blog.csdn.net/Harington/article/details/81982299

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