我有一個圖表,我經常需要知道所有最短路徑(或更確切地說它們的長度)。因爲我不想重新計算它們,所以我將它們存儲在一個簡單的數組中,然後從那裏檢索它們。然而,由於圖形也可能隨着時間而改變,我將不得不在給定時間重新計算它們。動態更新最短路徑
對於現在的以下變化可能會發生:
添加節點和邊緣給它的圖形
改變一個邊緣
的長度增加一個新的邊緣的圖
刪除邊或刪除節點
在所有情況下,所有節點將始終連接並且所有邊都具有正權重。該圖也是無向的。操作的順序是這樣的,所有節點將始終來自圖的相同組件。如果在添加節點或邊之前已經添加了其他節點和邊,以便圖永遠不會分離。
現在我打算只做更新,然後通過圖結構傳播所有更改。但是我不確定如何正確處理這個問題。你將如何嘗試實現這些緩存長度的更新。
編輯:
你們當中有些人已經指出,當一個節點被添加或鏈接改變可能是neccessary重新計算的一切。例如,當所有距離通過更新而改變時,這可能是例如。但是,如果我只是通過圖形傳播更改並執行類似於完成dijkstras的方式,我可能必須多次放鬆同一個節點,因爲我可能不會選擇最佳順序。問題是如何訂購放鬆步驟,所以我儘可能避免多次更新。
如果沒有我想到的實際想法,這是沒有多大意義的,但我希望這可以澄清更多。
你有一個根節點和它的所有最短路徑,或所有節點之間的所有路徑最短? –
不,沒有根節點,而是所有的最短路徑長度。 – LiKao
對於每個可以通過修改影響的路徑連接的2個點,您將不得不重新計算最短路徑 –