1. 程式人生 > >詳解Dijkstra演算法(含數學證明和優化)

詳解Dijkstra演算法(含數學證明和優化)

Dijkstra演算法簡介

Dijkstra演算法是由荷蘭電腦科學家Edsger Wybe Dijkstra於1959年提出的一種解決有向加權圖中單源最短路問題的演算法,其中要求加權圖中不可有負權邊

Dijkstra演算法步驟演示

  • 以如下的一張有向正權圖G為例,規定:
    • 起點為A
    • 向量xyxy
    • xyxy

有向圖G

  • 初始狀態:
      設起點到各點當前最短距離Lk(k=A,B,C,D,E)
    LA=0
    並設此時
    LBLE=+
    則可列表:
LA LB LC LD L
E
初始狀態 0 + + + +
  • 第一次迭代:
      從起點A點出發,更新起點到A的鄰居(B、C、D)的當前最短距離(Lk)。此時:
    對B:
    LB=AB=10對C:
    LC=AC=3對D:
    LD=AD=20
    則可列表:
LA LB LC LD LE
第一次迭代後 0 10 3 20 +
  • 第二次迭代:
      找出第一次迭代後除已處理過的起點A外,Lk最小的點:C
      從C出發,更新C鄰居(B、E)的Lk值,此時:
    對B:
      經過C到達B的路徑長度:
    L
    =LC+CB=5
    LB=10>LLB=L=LC+CB=5
    對E:
      經過C到達E的路徑長度:
    L=LC+CE=18LE=+>LLE=L=LC+CE

    相關推薦

    Dijkstra演算法數學證明優化

    Dijkstra演算法簡介: Dijkstra演算法是由荷蘭電腦科學家Edsger Wybe Dijkstra於1959年提出的一種解決有向加權圖中單源最短路問題的演算法,其中要求加權圖中不可有負權邊。 Dijkstra演算法步驟演示: 以如下的一張

    Dijkstra演算法鄰接表+優先佇列優化 建立虛點】HDU

    Bessie and her friend Elsie decide to have a meeting. However, after Farmer John decorated his  fences they were separated into differen

    Dijkstra演算法鄰接表+優先佇列優化

    Dijkstra演算法是在圖論中應用很廣的一種演算法,它本質上是貪心的成功應用。它可以求加權圖的單源最短路。但是如果不優化的話,它的複雜度是O(n方),比較低效,一般我們採用鄰接表+優先佇列的優化。#include<bits/stdc++.h> using nam

    DijkstraPrim演算法數學證明

    #ACM&演算法 不知是不是因為自己的抽象學習能力還是不夠強,之前在翻閱別人部落格學習這兩個演算法的時候,整個人一直處於懵逼狀態。 分析了一下,發現之前存在的部落格教程,大多趨向於方法講解,學完以後有知其然不知其所以然的感覺。另一部分部落格則偏向數學證明,語言嚴謹

    資料模型LP32 ILP32 LP64 LLP64 ILP64 中的不同資料型別

    不同資料模型下,各資料型別的位數: Type \ Model LP32 IPL32 LP64 ILP64 LLP64 char 8 8 8 8 8

    物化檢視彙總比較有用的資料

    物化檢視是包括一個查詢結果的資料庫物件,它是遠端資料的的本地副本,或者用來生成基於資料表求和的彙總表。物化檢視儲存基於遠端表的資料,也可以稱為快照。對於複製,物化檢視允許你在本地維護遠端資料的副本,這些副本是隻讀的。如果你想修改本地副本,必須用高階複製的功能。當你想從一個表

    高通平臺msm8953 Linux DTS(Device Tree Source)裝置樹之二DTS裝置樹匹配過程

    本系列導航:有上一篇文章,我們瞭解了dts的背景知識和相關基礎,這次我們對應實際裝置進行一下相關分析。DTS裝置樹的匹配過程一個dts檔案確定一個專案,多個專案可以包含同一個dtsi檔案。找到該專案對應的dts檔案即找到了該裝置樹的根節點。kernel\arch\arm\bo

    C# 多執行緒 Part.02UI 執行緒子執行緒的互動、ProgressBar 的非同步呼叫

           我們先來看一段執行時會丟擲 InvalidOperationException 異常的程式碼段: private void btnThreadA_Click(object sender, EventArgs e) { Thread thread

    Android情景分析之init程序以啟動zygote為例

    概述 init是linux系統中使用者空間的第一個程序。由於Android是基於linux核心的,所以init也是Android系統中使用者空間的第一個程序,它的程序號為1。 作為系統中的第一個使用者空間程序,init程序被賦予了很多及其重要的工作職責。 1.      i

    getClass()getClassLoader()區別 以及ClassLoader及用途檔案載入,類載入

     1.1 幾個相關概念ClassLoader負責載入系統的所有Resources(Class,檔案,來自網路的位元組流等),通過ClassLoader從而將資源載入JVM   每個class都有一個reference,指向自己的ClassLoader。Class.getClassLoader()   arra

    Dijkstra演算法單元點最短路徑

    Dijkstra演算法解決圖中某特定點到其他點的最短路徑。 迪傑斯塔拉(Dijkstra)演算法思想: 按路徑長度遞增的次序產生最短路徑的演算法。設集合S存放已經找到最短路徑的頂點,V為所有節點的集合,S的初始狀態只包含源點V0,對Vi∈V-S。 假設從源點V0到Vi的有向

    LeetCode專題——搜尋演算法中的搜尋策略剪枝

    本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是LeetCode專題第20篇文章,今天討論的是數字組合問題。 描述 給定一個int型別的候選集,和一個int型別的target,要求返回所有的數字組合,使得組合內所有數字的和剛好等於target。 注意: 所有的元素都是正數所有

    Office 2016 for Mac破解版破解補丁教程

    10.11.6實測OK,不保證都能成功,下載地址在下面,安裝完後不要開啟office軟體,開啟破解補丁.dmg,裡面有把藍色的鑰匙,雙擊,出現一把黑色的鎖,點選,輸入系統密碼,OK~搞定Office 2016 for Mac破解版(含破解補丁)百度盤下載連結:

    畢向東Java基礎視訊教程課件原始碼

    本套視訊是傳智播客畢向東老師Java基礎班的25天全程實錄視訊教程,適合零基礎同學學習的Java基礎視訊教程。 內容涉及到的知識點: 1、計算機基本原理,Java語言發展簡史,Java開發環境的搭建,體驗Java程式的開發,環境變數path和classpath的設定,Java程式的執行過程,Java反編譯工具

    poj 1847 最短路 dijkstra模板vector鄰接表+佇列優化

    題目: Tram Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 14423 Accepted: 5332 Description Tram network in Zagreb consi

    用一維陣列的無向圖寫Prim演算法用最小堆優化

    #include <stdio.h> #include <malloc.h> #define true 1 #define false 0 #define INFINITY 1000000 #define MaxVertexNum 10000 #de

    Spring Boot 在Netty上開發WebSocketHTTP應用之二 -- 多個HTTP Handler上傳下載處理鏈

    接上篇。 因業務需要,在一個埠開啟普通的HTTP(S)服務,配合客戶端實現使用者登入驗證,使用者檔案上傳、檔案下載等功能。 在Netty中的處理方式如下: 處理鏈初始化如下,注意途中紅色方框處內容的順序。 接下來是NETTY封裝檔案的下載處理。注意下

    一步一步寫演算法之遞迴堆疊

     看過我前面部落格的朋友都清楚,函式呼叫主要依靠ebp和esp的堆疊互動來實現的。那麼遞迴呢,最主要的特色就是函式自己呼叫自己。如果一個函式呼叫的是自己本身,那麼這個函式就是遞迴函式。     我們可以看一下普通函式的呼叫怎麼樣的。試想如果函式A呼叫了函式B,函式B又呼叫了

    Bzoj-2431 逆序對數列DP+前綴優化

    string 開始 div include main () 生成 enter while 這道題的dp式子很好推 dp[i][j]表示1~n的排列中生成的逆序對數為k的序列的個數 則有dp[i][j]=∑dp[i-1][0~j-1](j<=k) 這個式子

    轉載KMP演算法 原創KMP演算法

    轉自https://www.cnblogs.com/yjiyjige/p/3263858.html (原創)詳解KMP演算法 作者:孤~影   KMP演算法應該是每一本《資料結構》書都會講的,算是知名度最高的演算法之一了,但很可惜,我大二那年壓根就沒看懂過~~~ 之後也在很多地方也都經常看