對於SPFA的一些理解(寫給自己)

2021-09-25 06:31:06 字數 833 閱讀 2659

演算法優點:

1.時間複雜度比普通的dijkstra和ford低。

2.能夠計算負權圖問題。

3.能夠判斷是否有負環

核心思想

我們採取的方法是動態逼近法:

1.設立乙個先進先出的佇列

2.每次取出隊首元素,用隊首元素到起點的最優值對與其相連的其他元素的到起點的最優值進行優化(a+b>c)正確性是顯然的

3.當隊列為空時及所有元素優化到不能再優化了,演算法結束

spfa對於負邊權的處理

spfa對於所有正邊權都雙向存邊

對於所有負邊權都單項存邊

why???!!!

因為若對負邊權雙向存邊的話,設a,b兩點之間邊權為-2,a->b b->a 。a,b可以互相無限鬆弛,沒有個頭,這樣的話還怎麼判斷負環和單個的負邊權呢!(重點重點重點)

||好了,如果單項存邊,那麼這個負邊權只能由a->b被使用,b->a使用不了,所以可以滿足要求

spfa對於負環

由於負邊權時單向儲存的,假設三個點a,b,c;

a->b;b->c;c->a;

如果a,b,c轉了一圈a點的值變小了的話,那麼可以用a再一次更新b,b再一次更新a,a又獲得乙個更小值,如此往復;

如果當a進隊超過n-1次那麼一定存在負環,因為n個點的圖,入度最大為n-1,若超過n-1,那麼一定存在負環

寫給自己的一些建議

知識的獲取現在已經並不是那麼的難了,而對於我自己而言,海量的知識給我造成了很大的困惑。從小到大都沒有寫東西的習慣,我認為現在到了這樣乙個的年紀,要經常嘗試著做一些總結了,不管是關於平常的生活還是技術。活到現在,我認為對自我的認知並不是非常的清楚,所以,現在,我必須努力的去好好了解一下自己,了解自己適...

對於切片的一些理解

使用技巧 type struct 乙個切片是由資料指標加上長度和容量組成的,類似與c 中的vector。var a int 等價於nil b int 表示乙個空的切片,不等於nil c int len,cap都為3的切片 d c 2 cap為3,len為2。與c共享一片記憶體位址 e c 0 2 c...

對於java 集合的一些理解

list set繼承自collection儲存引用型別 且只能乙個乙個儲存 arraylist linkedlist vector 都是繼承自list arraylist linkedlist初始化為10 擴容後為1.5倍 vector 為2倍 arraylist 底層採用的資料結構為陣列儲存元素,...