圖結構-----Floyd算法
1、前言
根據計算機考研中對于求解最短路徑算法的出題形式,以Dijkstra算法為重要考點,Dijkstra算法對于求解一個頂點到其他任意的頂點之間的最短路徑的問題,可以說是非常實用。
同時對于求解各個端點到其他端點的最短路徑的集合這個問題,Dijkstra算法便沒有那麼優勢了,本着學習就要學全面的特點,下面對Floyd算法進行原理講解,(隻講執行過程,不涉及到算法的代碼實作)
2、算法介紹
時間複雜度介紹
- 相比于Dijkstra算法,Floyd算法的時間複雜度是非常高的。
- 時間複雜度為O(n3),(n的三次方),其時間複雜度是非常的高。
算法執行準備
- 首先給出要講解的題目例子圖如下:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjYTMfhHLlN3XnxCM38FdsYkRGZkRG9lcvx2bjxCMy8VZ6l2csE2VZVDUDJWNmlmY2MWLJZTQClGVF5UMR9Fd4VGdsATNfd3bkFGazxycykFaKdkYzZUbapXNXlleSdVY2pESa9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmL4IDOlNmMwATMzQWOkZTM4ATOiRTNyIDNxMWNjNGZwYzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
2. Floyd算法的執行過程需要我們在草稿紙上畫出,兩個矩陣,一個是上圖中的邊與邊對應的權值關系,另一個是節點指向節點的路徑顯示,是以給出兩個矩陣結構圖如下:
3. 準備好初始的矩陣的條件節點後,我們對其進行Floyd算法的執行分析:
Floyd算法執行過程
- 首先是選取第二個矩陣中的初始路徑,這裡以第一行中的A->B為開始操作路徑。
- Floyd算法第一步---------在A->B選擇路徑後,加入節點C,對其目前的矩陣中的所有節點進行路徑的更新
- 更新的原則:若加入了C,使得其中的一個路徑長度變短,便更新,否則不更新。
- 其第一輪更新過程圖如下:
根據上述圖檔對其進行第一輪的加入C節點進行操作分析:
- 找到不帶C節點的路徑,對于目前的路徑長度跟加入C節點後的路徑長度進行對比
- 若小于目前的路徑長度,則更新該位置
- 若不小于則保持原型
下面進行第二輪更新,選擇加入B節點:其執行圖如下:
以上是第二輪加入B節點進行矩陣更新後的第二輪流程:
最後是最後一輪加入節點A,由于其中一共有三個節點,是以隻需要執行三輪,這裡有幾個節點就要幾輪操作。
第三輪更新:加入A節點
執行圖如下:
其Floyd執行算法的流程如下,其思路了解掌握就好,代碼時間複雜度n的三次方有點高,有需要可以了解下。