摘要:最小距離相關(guān)算法算法單源最短路徑算法路徑大于零定義概覽迪杰斯特拉算法是典型的單源最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。注意該算法要求圖中不存在負(fù)權(quán)邊。算法可視化代碼
最小距離相關(guān)算法 Dijkstra算法 單源最短路徑算法 路徑大于零 1.定義概覽
Dijkstra(迪杰斯特拉)算法是典型的單源最短路徑算法,用于計(jì)算一個(gè)節(jié)點(diǎn)到其他所有節(jié)點(diǎn)的最短路徑。主要特點(diǎn)是以起始點(diǎn)為中心向外層層擴(kuò)展,直到擴(kuò)展到終點(diǎn)為止。Dijkstra算法是很有代表性的最短路徑算法,在很多專業(yè)課程中都作為基本內(nèi)容有詳細(xì)的介紹,如數(shù)據(jù)結(jié)構(gòu),圖論,運(yùn)籌學(xué)等等。注意該算法要求圖中不存在負(fù)權(quán)邊。
問題描述:在無向圖 G=(V,E) 中,假設(shè)每條邊 E[i] 的長(zhǎng)度為 w[i],找到由頂點(diǎn) V0 到其余各點(diǎn)的最短路徑。(單源最短路徑)
2.算法步驟 2.1 算法思想首先初始整個(gè)帶權(quán)重的有向圖G=(N,E).然后在將所有節(jié)點(diǎn)分成兩個(gè)集合 S(表示已經(jīng)算計(jì)完畢的節(jié)點(diǎn),初始為發(fā)起節(jié)點(diǎn),值為0)、U(表示未確定的節(jié)點(diǎn)列表,初始為 除了初始節(jié)點(diǎn)之外的節(jié)點(diǎn),值為無限大)。按照最短路徑從U里面的節(jié)點(diǎn)移動(dòng)到S里面,必須保證U中的任意節(jié)點(diǎn)到原始節(jié)點(diǎn)的距離大于S中的任意節(jié)點(diǎn)到原始節(jié)點(diǎn)的距離。
2.2 算法步驟初始化圖,u為原始節(jié)點(diǎn)、S為已處理節(jié)點(diǎn){u=0}、U未處理節(jié)點(diǎn){除了u其它節(jié)點(diǎn)=無限大}。將u設(shè)置為當(dāng)前節(jié)點(diǎn)`u
遍歷U里面所有節(jié)點(diǎn)到`u 距離`d,如果節(jié)點(diǎn)不與`u直連則`為無限大。判斷U里面的每個(gè)節(jié)點(diǎn)當(dāng)前距離是否大于 `d + `u到u的距離,大于就替換
選擇U里面節(jié)點(diǎn)的距離最小的節(jié)點(diǎn),移動(dòng)到S。 并將其設(shè)置為 `u
重復(fù)2,3 兩個(gè)步驟,直到計(jì)算完所有節(jié)點(diǎn)。
2.3 算法可視化 3.代碼 3.1 java + guavaimport com.google.common.graph.ImmutableValueGraph; import com.google.common.graph.MutableValueGraph; import com.google.common.graph.ValueGraphBuilder; import lombok.extern.slf4j.Slf4j; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import java.util.Optional; @Slf4j public class DijkstraTest { public static void main(String[] args) { // init MutableValueGraphinit = ValueGraphBuilder.undirected().build(); init.putEdgeValue(1, 2, 7); init.putEdgeValue(2, 3, 10); init.putEdgeValue(1, 3, 9); init.putEdgeValue(1, 6, 14); init.putEdgeValue(2, 4, 15); init.putEdgeValue(3, 6, 2); init.putEdgeValue(3, 4, 11); init.putEdgeValue(6, 5, 9); init.putEdgeValue(5, 4, 6); ImmutableValueGraph graph = ImmutableValueGraph.copyOf(init); //1. Map S = new HashMap<>(); Map U = new HashMap<>(); int u = 1; S.put(1, 0); for (int i = 2; i <= 6; i++) { U.put(i, Integer.MAX_VALUE); } // 2. for (; ; ) { Integer finalU = u; graph.adjacentNodes(u).stream().filter(U::containsKey).forEach(node -> { Optional value = graph.edgeValue(finalU, node); if (value.get() + S.get(finalU) < U.get(node)) { U.put(node, value.get()); } }); // 3. Optional > min = U.entrySet().stream().min(Comparator.comparing(Map.Entry::getValue)); u = min.get().getKey(); S.put(u, min.get().getValue()); U.remove(u); log.info("{},{}", S, U); if (U.isEmpty()) { break; } // 4. } log.info("result {}", S); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/76119.html
摘要:目前目標(biāo)檢測(cè)領(lǐng)域的深度學(xué)習(xí)方法主要分為兩類的目標(biāo)檢測(cè)算法的目標(biāo)檢測(cè)算法。原來多數(shù)的目標(biāo)檢測(cè)算法都是只采用深層特征做預(yù)測(cè),低層的特征語義信息比較少,但是目標(biāo)位置準(zhǔn)確高層的特征語義信息比較豐富,但是目標(biāo)位置比較粗略。 目前目標(biāo)檢測(cè)領(lǐng)域的深度學(xué)習(xí)方法主要分為兩類:two stage的目標(biāo)檢測(cè)算法;one stage的目標(biāo)檢測(cè)算法。前者是先由算法生成一系列作為樣本的候選框,再通過卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行樣本...
摘要:分別被命名為和。圖的遍歷深度優(yōu)先遍歷深度優(yōu)先遍歷,也有稱為深度優(yōu)先搜索,簡(jiǎn)稱為。拓?fù)渑判蛩惴ㄅc類似,不同的是,拓?fù)渑判蛩惴ú粫?huì)立即輸出已訪問的頂點(diǎn),而是訪問當(dāng)前頂點(diǎn)鄰接表中的所有相鄰頂點(diǎn),直到這個(gè)列表窮盡時(shí),才會(huì)將當(dāng)前頂點(diǎn)壓入棧中。 圖的定義 圖(Graph)是由頂點(diǎn)的有窮非空集合和頂點(diǎn)之間邊的集合組成,通常表示為:G(V,E),其中,G表示一個(gè)圖,V是圖G中頂點(diǎn)的集合,E是圖G中邊的...
摘要:圖關(guān)聯(lián)矩陣在關(guān)聯(lián)矩陣表示的圖中,矩陣的行表示頂點(diǎn),列表示邊。如圖,頂點(diǎn)數(shù)是,邊的數(shù)量是,用鄰接矩陣表示圖需要的空間是,而使用關(guān)聯(lián)矩陣表示圖需要的空間是。廣度優(yōu)先搜索算法數(shù)據(jù)結(jié)構(gòu)是隊(duì)列。深度優(yōu)先搜索算法數(shù)據(jù)結(jié)構(gòu)是棧。 定義 圖和散列表、二叉樹一樣,是一種非線性數(shù)據(jù)結(jié)構(gòu)。如圖1所示,圖由一系列頂點(diǎn)以及連接頂點(diǎn)的邊構(gòu)成。由一條邊連接在一起的頂點(diǎn)成為相鄰頂點(diǎn),比如A和B、A和D是相鄰的,而A和...
摘要:在等機(jī)構(gòu)新提出的論文中,其采用了大規(guī)模數(shù)據(jù)集與深度神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)圖像的自然結(jié)構(gòu),從而進(jìn)一步分離圖像的前景與背景。一張手動(dòng)摳圖的前景圖擁有簡(jiǎn)單背景作為輸入。對(duì)于每一張測(cè)試圖像,按照降序從第列到第列顯示了度量下的排名結(jié)果排名到。 摳圖,一直是一件體力活,它需要大量的操作與時(shí)間。而傳統(tǒng)摳圖算法主要是以色彩為特征分離前景與背景,并在小數(shù)據(jù)集上完成,而這就造成了傳統(tǒng)算法的局限性。在 Adobe 等機(jī)構(gòu)新...
閱讀 704·2021-11-22 13:54
閱讀 3065·2021-09-26 10:16
閱讀 3488·2021-09-08 09:35
閱讀 1576·2019-08-30 15:55
閱讀 3429·2019-08-30 15:54
閱讀 2075·2019-08-30 10:57
閱讀 497·2019-08-29 16:25
閱讀 877·2019-08-29 16:15