日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Dijkstra算法正确性证明

發布時間:2024/3/12 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Dijkstra算法正确性证明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:求圖中點1到其他各點的最短距離

策略:

  • 把起點1放入初始集合Set中,從剩余的點中,選取到Set(此時Set中只有1個點)距離最近的點,并入集合Set中,
  • 從剩余的點中,找經過集合Set,到起點1的最短距離,將最短邊并入Set集合
  • 依次循環,直到所有的邊都并入Set
  • ?

    變量的命名:

    Set={1,2,,,,,,x}? ? ? //已找到start(本例中是1點)到1,2,,,,,x的最短路徑的點的集合Set

    dist[u]:? ? ? ? ? ? ?//從start點開始,經過Set中的點,到u點的最短距離

    short[u]:? ? ? ? ? ? ?//從start開始到u的全局最短路徑(不一定經過Set中的點)

    可知short[u] <= dist[u]

    ?

    證明過程:

    命題:算法進行到第k步時,Set中的每個節點Set_i的dist[Set_i]等于全局最短路徑short[Set_i]

    (第n步時,dist[n]=short[n],此時找到點1到所有點的最短距離)

    ?

    歸納基礎:

      k=1,Set={start_point} => dist[start_point] == short[start_point] ==0,命題正確

    歸納假設:

      第k步成立,則第k+1步成立

      設k+1步選擇了頂點v(v是剩余集合中,經過Set到start_point距離最近的點)

      該頂點與Set中的u點相連, 想要證明dist[v] == short[v]

        反證法:假設命題不正確,即:存在從起點start_point到點v的更短路徑 L(綠色部分)為最短路徑short[v],

        該路徑經過集合中的最后一個點為last_point,經過未收錄集合的點集 uncollected_point_set中的,任1個或者多個點到達v.

        本例以單點y為例,多點同理:(v和last_point不可能直接相連,若直接相連,因為dist[v]最后一點經過u,且為最短,此時L必然>=dist[v],不是更短路徑)

        此時 L == dist[y] + distance[y, v] ==?short[v]

        由題意知,dist[v] <= dist[y] (即:文章開頭的每次從剩余集合中找到距離最短的點)

        =>? ?dist[v] <= L ?==?short[v]

        dist[v]是相對于L更短的路徑=>假設不成立,不存在更短的路徑L為全局最短路徑,第k+1步選擇的點即為全局最短路 => 命題成立!

    ?

    參考鏈接

    1.? Proof of Dijkstra algorithm

    總結

    以上是生活随笔為你收集整理的Dijkstra算法正确性证明的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。