迪傑斯特拉(Dijikstra)演算法 機器學習

2021-09-28 17:39:20 字數 1780 閱讀 3400

前言:

迪傑斯特拉(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,這個向量儲存的是其他點的最短距離,初...