我對迪傑斯特拉演算法的理解

2021-07-29 14:27:23 字數 3833 閱讀 7330

dijkstra(迪傑斯特拉)

演算法是典型的單源最短路徑演算法,理解dijkstra(迪傑斯特拉)

演算法是很必要的,對以後的成長很有幫助,特左此文以作筆記,方便複習。 

演算法描述:

基本思想:設g(u,v)是加權圖,將g上的點分為兩組,第一組為集合s(初始只有乙個點,即源點,其他點陸續按路徑由到長及相鄰關係往裡加入),第二組為其餘未確定最短路徑的頂點集合(用u表示,按最短路徑長度的遞增次序依次把第二組的頂點加入s中,,直到u為空,則演算法結束)。在加入的過程中,總保持從源點v到s中各頂點的最短路徑長度不大於從源點v到u中任何頂點的最短路徑長度。

例子:

步驟集合s

集合u1        

演算法開始,選入u0                                  

u1-u7        

2比較u0到u1-u7的距離,

u0->u1=2

u0->u2=1

u0->u3=8

u0->u4=00(00表示無窮,下同)

u0->u5=00

u0->u6=00

u0->u7=00

選入u2,s=(u0,u2),

路徑:u0->u2

u0選擇路徑: u0->u2

u1,u3-u7

3比較u0,u0->u2到u1-u9的距離,

u0->u1=2

u0->u3=8

u0->u4=00

u0->u5=00

u0->u6=00

u0->u7=00

u0->u2->u3=8

u0->u2->u4=00

u0->u2->u5=00

u0->u2->u6=10

u0->u2->u7=00

選入u1,s=(u0,u1,u2),

路徑:u0->u1

u0->u2

u0選擇路徑: u0->u1

u3-u7

4比較u0、u0->u1、u0->u2到集合u的各點之間的距離,

u0->u3=8

u0->u4=00

u0->u5=00

u0->u6=00

u0->u7=00

u0->u1->u3=10

u0->u1->u4=3

u0->u1->u5=00

u0->u1->u6=00

u0->u1->u7=00

u0->u2->u3=8

u0->u2->u4=00

u0->u2->u5=00

u0->u2->u6=10

u0->u2->u7=00

選入u4,s=(u0,u1,u2,u4)

路徑:u0->u1->u4

u0->u1

u0->u2

選擇路徑:u0->u1->u4

u5-u7、u3

5比較u0、u0->u1、u0->u2、u0->u1->u4到集合u的各點之間的距離,

u0->u1=2

u0->u3=8

u0->u4=00

u0->u5=00

u0->u6=00

u0->u7=00

u0->u1->u3=8

u0->u1->u5=00

u0->u1->u6=00

u0->u1->u7=00

u0->u1->u4->u5=6

u0->u1->u4->u6=00

u0->u1->u4->u7=12

u0->u2->u3=8

u0->u2->u4=00

u0->u2->u5=00

u0->u2->u6=11

u0->u2->u7=00

選入u5,s=(u0,u1,u2,u4,u5)

路徑:u0->u1->u4->u5

u0->u1->u4

u0->u2

u0->u1

u0選擇路徑:u0->u1->u4->u5

u6-u7、u3

6比較u0、u0->u1、u0->u2、u0->u1->u4、u0->u1->u4->u5到集合u的各點之間的距離,

u0->u3=8

u0->u6=00

u0->u7=00

u0->u1->u3=8

u0->u1->u5=00

u0->u1->u6=00

u0->u1->u7=00

u0->u1->u4->u6=00

u0->u1->u4->u7=12

u0->u1->u4->u5->u6=7

u0->u1->u4->u5->u7=9

u0->u2->u3=7

u0->u2->u6=9

u0->u2->u7=00

選入u6,s=(u0,u1,u2,u4,u5,u6)

路徑:u0->u1->u4->u5->u6

u0->u1->u4->u5

u0->u1->u4

u0->u2

選擇路徑:u0->u1->u4->u5->u6

u7、u3

7比較u0、u0->u1、u0->u2、u0->u1->u4、u0->u1->u4->u5、u0->u1->u4->u5->u6到集合u的各點之間的距離,

u0->u3=8

u0->u7=00

u0->u1->u3=8

u0->u1->u7=00

u0->u1->u4->u3=8

u0->u1->u4->u7=12

u0->u1->u4->u5->u3=7

u0->u1->u4->u5->u7=12

u0->u1->u4->u5->u6->u3=12

u0->u1->u4->u5->u6->u7=13

u0->u2->u3=7

u0->u2->u7=00

選入u3,s=(u0,u1,u2,u4,u5,u6,u3)

路徑:    u0->u1->u4->u5->u6

u0->u1->u4->u5->u3

u0->u1->u4->u5

u0->u1->u4

u0->u2->u3

u0->u2

u0選擇路徑:  u0->u1->u4->u5->u3

u0->u2->u3u78

比較u0->u1->u4->u5->u6、

u0->u1->u4->u5->u3、 

u0->u1->u4->u5、

u0->u1->u4

u0->u2->u3

u0->u2

u0到集合u的各點之間的距離,

u0->u7=00

u0->u2->u7=00

u0->u2->u3->u7=00

u0->u1->u4->u7=12

u0->u1->u4->u5->u7=12

u0->u1->u4->u5->u3->u7=00

u0->u1->u4->u5->u6->u7=13

選入u7,s=(u0,u1,u2,u4,u5,u6,u3 ,u7)

路徑:    u0->u1->u4->u5->u6->u7

u0->u1->u4->u5->u3->u7

u0->u1->u4->u5->u7

u0->u1->u4->u7

u0->u2->u3->u7

u0->u2->u7

u0->u7

u0選擇路徑:  u0->u1->u4->u7

u0->u1->u4->u5->u7

空(演算法結束)

選出最短路徑:u0->u1->u4->u7、u0->u1->u4->u5->u7

以上就是我理解的dijkstra(迪傑斯特拉)

演算法的動態過程。(有錯誤之處,請指正)

對迪傑斯特拉演算法的理解

計算圖中某個頂點到其他頂點的最短路徑,邊的權值不能為負數 數學上的證明 扣鼎之歌的回答 清晰地證明了dist j min 貪心演算法的最優子結構性質 整體最優必定區域性最優,但並不是所有區域性最優解都被整體最優解包含 根據上述資料可以了解到,每當確定了乙個頂點 初始頂點也算在內 的最短路徑,並對所有...

迪傑斯特拉演算法

if object id t test is not null drop table t test gocreate table dbo t test id int identity 1,1 not null primary key,自增字段,無意義 header varchar 500 第一點的名...

迪傑斯特拉演算法

dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法 能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。dijkstra演算法是很有代表性的最短...