前言:
迪傑斯特拉(dijkstra)演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。
它的主要特點是以起始點為中心向外層層擴充套件(廣度優先搜尋思想),直到擴充套件到終點為止。
因為在isomap 中要用到,這裡簡單介紹一下. 這裡主要結合有相同圖結束,無向圖是對稱矩陣
目錄1: 演算法流程
2:演算法實現
一 演算法流程
如上圖1: 引入兩個集合s,u。
s : 已求出最短路徑的點
u: 未求出最短路徑的點
如上圖,當求a點時候
2: 從u 集合中找到最短路徑的點b,加入到s中
如上圖:
ab 最短
3: 從u中找到滿足最短路徑的點k,更新當前的路徑
滿足下面特徵
@author: chengxf2
"""import numpy as np
import copy
class dijkstra:
"""載入資料集
args
-1: 代表無窮大,不可達
return
none
"""def loadpath(self):
"""self.path = np.array([[0, 1, 4, -1, -1, -1],
[1, 0, 2, 7, 5, -1],
[4, 2, 0, -1, 1, -1 ],
[-1, 7, -1, 0, 3, 2 ],
[ -1, 5, 1, 3, 0, 6],
[-1, -1, -1, 2, 6, 0] ])
"""self.path = np.array([[0, 1, 12, -1, -1, -1],
[-1, 0, 9, 3, -1, -1],
[-1, -1, 0, -1, 5, -1 ],
[-1, -1, 4, 0, 13, 15 ],
[-1, -1, -1, -1, 0, 4],
[-1, -1, -1, -1, -1, 0] ])
self.m , self.n = np.shape(self.path)
def __init__(self):
self.m = 0 ##樣本個數
self.n = 0 ##樣本維度
self.loadpath()
self.updata()
"""類似step3, step4
"""def minpath(self, path ,i, ulist):
minpath = float('inf')
minu = -1
for u in ulist:
curpath = path[u]
if curpath>=0 and curpathif -1==path_ik: : 如果是無向圖,對稱矩陣
self.path[k,i]=self.path[i,k]
else:
dist = min(self.path[i,k],self.path[k,i])
self.path[i,k]=self.path[k,i]=dist
dij =dijkstra()
迪傑斯特拉演算法
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演算法是很有代表性的最短...
迪傑斯特拉演算法
迪傑斯特拉演算法用來計算圖中某一點到其他點的最短距離,這個圖可以是加權,也可以是無權的,距離指的是從一點到其它點所經過的邊的權重和 假設現在有乙個加權無向圖,我們要求節點1到其他點的最短距離 初始化圖arr 用乙個鄰接矩陣來表示一張圖,矩陣元素 初始化一維向量d,這個向量儲存的是其他點的最短距離,初...