SPF(最短路徑樹)演算法

2021-10-10 14:59:53 字數 1326 閱讀 5569

構造一棵樹[a],使n個節點之間的總長最小(樹是乙個在每兩個節點之間僅有一條路徑的圖)。

在我們給出構造過程中,分支被分成3個集合:

ⅰ:被明確分配給構造中的樹的分支(他們將在子樹中);

ⅱ:這個分支的隔壁分枝被新增到集合1;

ⅲ:剩餘的分支(拋棄或不考慮);

節點被分成兩個集合:

a: 被集合1中的分支連線的節點;

b:剩餘的節點(集合2中有且僅有乙個分支將指向這些節點中的每乙個節點);

下面我們開始構造樹,首先選擇任意乙個節點作為集合a中僅有的成員,並將所有拿這個節點做端點的分支放入集合ⅱ中。開始集合ⅰ是空的。然後我們重複執行下面兩步。

步驟一:集合ⅱ中最短的分支被移出並加入集合ⅰ。結果,乙個節點被從集合b傳送到集合a。

步驟二:考慮從這個節點(剛才被傳送到集合a中的節點)通向集合b中節點的分支。如果構建中的分支長於集合ⅱ中相應的分支,那麼分支被丟棄;否則,用它代替集合ⅱ中的相應的分支,並且丟棄後者。

接著我們回到演算法的第一步並重複此過程直到集合ⅱ和集合b為空。集合ⅰ中的分支形成索要的樹

在djikstra演算法中描述了3個分支集合:ⅰ、ⅱ、ⅲ。在路由器的演算法中用三個資料庫來表示這三個分支集合。

**最短路徑樹資料庫**——表示集合ⅰ。通過向資料庫中新增分支實現向最短路徑樹中新增鏈路。當演算法完成時,這個資料庫將可以描述最短路徑樹。

**候選物件資料庫**——表示集合ⅱ。按照規定的順序從鏈路狀態資料庫向該資料庫中複製鏈路,作為向樹中新增的候選物件。

**鏈路狀態資料庫**——表示集合ⅲ。這裡儲存所有鏈路。

djikstra中還指定了兩個節點集合——a、b。這裡的節點時=是路由器。這寫路由器被明確地喲個路由器三元組(路由器id、鄰居id、代價)中的鄰居id表示。集合a中的是最短路徑樹資料庫中鏈路所連線的路由器。而集合b中的是所有其他的路由器,所以當演算法收斂完成時集合b應該為空。

以下是一台路由器中的最短路徑優選演算法的版本:

**步驟1**:路由器初始化最短路徑樹資料庫,將自己作為樹的根。就是路由器作為它自己的鄰居,代價為0。

**步驟2**:在鏈路狀態資料庫中,所有描述通向根路由器鄰居鏈路的三元組被新增到候選物件資料庫中。

**步驟4**:檢查新增到最短路徑樹資料庫中的鄰居id。除了鄰居id已經在最短路徑樹資料庫中的三元組之外,鏈路狀態資料庫中描述路由器鄰居的三元組被新增到候選物件資料庫中。

**步驟5**:如果候選物件資料庫中還有剩餘的項,就回到第3步。如果候選資料庫為空,終止演算法。演算法終止時,在最短路徑樹資料庫中,每乙個單一的鄰居id表將表示1臺路由器,到此演算法收斂完畢,最短路徑樹構造完畢。

SPF的最短路徑演算法

常見的路由協議比如rip igrp bgp是距離向量協議,ospf和isis是資料鏈路狀態協議。向量協議路由器只知道本身和與自身相連的介面路由資訊,向量圖只是一張方向圖,在路由傳播的過程中,容易造成環路。rip路由器採用扁平化設計規避環路,bgp則採用as path規避環路。ospf是資料鏈路狀態路...

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路徑樹

問題描述 所謂最短路徑樹,就是從s出發,沿著樹上的邊走到任意點i,那麼經過的這些邊的權值和就是s到i的最短路徑。dijkstra演算法或spfa演算法不僅可計算從起點s到各點的最短路徑長度,同時也可得到以s為根的最短路徑樹。方法是在進行鬆弛操作時,如果d i c d j 時,除了更新d j 之外,還...