<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    E81086713E446D36F62B2AA2A3502B5EB155

    Java雜家

    雜七雜八。。。一家之言

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      40 Posts :: 1 Stories :: 174 Comments :: 0 Trackbacks

    算法:

    設G是帶權圖,圖中的頂點多于一個,且所有的權都為正數。本算法確定從頂點S到G中其他各個頂點的距離和最短通路。在本算法中P表示帶永久標記的頂點的集合。頂點A的前驅是P中的一個頂點,用來標記A。頂點U和V之間的邊的權重用W(U,V)表示,如果U和V之間沒有邊,則記作W(U,V)=∞.

    步驟1 (對S做標記)

          (a)將S標記為0,并使S沒有前驅

          (b)令P={S}

    步驟2 (對其他頂點作標記)

          將每個不在P中的頂點V標記為W(S,V)(可能是暫時的),并使V的前驅為S(可能是暫時的)

    步驟3 (擴大P,修改標記)

         Repeat

         步驟3.1 (是另一個標記永久化)

                      把不在P中且帶有最小標記的頂點U加入到P中去(如果這樣的頂點有多個則任選其中一個)

        步驟3.2  (修改臨時標記)

                    對每個不在P中并且和U相鄰的頂點X,把X的標記替換為下列這兩者中的較小者:i)X的舊標記,ii)U上的標記與W(U,X)之和。如果X的標記改變了,則使U成為X的新前驅(可能是暫時的)

        Until P包含G中的每一個頂點

    步驟4 (求出距離和最短通路)

       頂點Y上的標記是從S到Y的距離。如果Y上的標記是∞,那么從S到Y就沒有通路,從而

    沒有最短通路;否則,按照下列序列的逆序使用頂點就構成從S到Y的一條最短通路:

    Y,Y的前驅,Y的前驅的前驅,。。。。,直至S

     

     

    證明:Dijkstra算法給出了從S到G的各個頂點的最短通路長度。

     

    我們假設G中的每個頂點V都被賦予了一個標記L(V),它要么是一個數,要么是∞。假設P是G的頂點的集合,P包含S,滿足:

    1)如果V屬于P,則L(V)是從S到V的最短通路的長度,并且存在這樣的從S到V的最短通路:通路上的頂點都在P中

    2)如果V不屬于P,則L(V)是從S到V的滿足下面限制的最短通路的長度:V是通路中唯一一個不屬于P的頂點。

     

    我們可以用歸納法證明Dijkstra算法中的P符合上述定義的集合:

    1)當P中元素個數為1時,P對應算法中的第一步,P={S},顯然滿足。

    2)假設P中元素個數為K時,P滿足上述定義,下面看算法的的第三步,

       先找出不在P中且帶有最小標記的頂點U,標記為L(U), 可以證明從S到U的最短通路中除U外不包含不屬于P的元素。

    因為若存在除U外其他頂點,則最短通路為SP1P2...PnQ1Q2...QnU(P1,P2..Pn屬于P,Q1,Q2,...Qn不屬于P),則由性質2)最短通路長度為L(Q1)+PATH(Q1,U)>L(U)

    從而大于SP1P2..PnU的通路長度L(U),不是最短通路,所以從S到U的最短通路中除U外不包含不屬于P的元素,從而從S到U的最短通路長度由L(U)給出.

    現把U加入P中構成P' ,顯然P'滿足性質1)。

    取V不屬于P',顯然V也不屬于P,那么從S到V的最短通路且滿足除V外所有頂點都在P'中的通路有兩種可能,i)包含U,ii)不包含U。

    對i)SP1P2...PnUV=L(U)+W(U,V)

       ii)SP1P2..PnV=L(V)

    顯然二者中的最小給出了從S到V的最短通路且滿足除V外所有頂點都在P'中的長度。

    從而算法第三步給出的P'含K+1個元素且滿足1),2)。

    又歸納,命題得證!

     

    下面是一個Java版的實現:最短路徑的Java實現

    posted on 2007-09-07 13:24 DoubleH 閱讀(6233) 評論(3)  編輯  收藏

    Feedback

    # re: Dijkstra算法及其證明 2007-12-19 22:15 柏拉圓
    “頂點U和V之間的邊上的權”這句話不妥當。
    連接頂點U與V的邊的權重。  回復  更多評論
      

    # re: Dijkstra算法及其證明 2007-12-19 23:19 Javacap
    @柏拉圓
    謝謝提醒,已改過!  回復  更多評論
      

    # re: Dijkstra算法及其證明 2009-04-20 11:16 westwind
    因為若存在除U外其他頂點,則最短通路為SP1P2...PnQ1Q2...QnU(P1,P2..Pn屬于P,Q1,Q2,...Qn不屬于P),則由性質2)最短通路長度為L(Q1)+PATH(Q1,U)>L(U)

    從而大于SP1P2..PnU的通路長度L(U),不是最短通路,所以從S到U的最短通路中除U外不包含不屬于P的元素,從而從S到U的最短通路長度由L(U)給出.

    以上文字表述似可修正為:
    因為若存在除U外其他頂點,設最短通路為SP1P2...PnQ1Q2...QmU(P1,P2..Pn屬于P,Q1,Q2,...Qm不屬于P,m>0)。由性質2),其長度必不小于L(Q1)+PATH(Q1,U),而后者必大于L(U),因而不是由S到U的最短通路,與前設矛盾。所以從S到U的最短通路中除U外不包含不屬于P的元素,從而從S到U的最短通路長度由L(U)給出.

      回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 麻豆安全免费网址入口| 国产亚洲Av综合人人澡精品| 久久精品国产亚洲αv忘忧草| 中文字幕在线日亚洲9| 在线91精品亚洲网站精品成人| 免费看一级一级人妻片| 久久精品免费观看| 日韩亚洲国产高清免费视频| 日本不卡在线观看免费v| 久久精品国产亚洲精品| 99人中文字幕亚洲区| 亚洲人成人网站18禁| 一个人免费播放在线视频看片| 无码人妻一区二区三区免费n鬼沢 无码人妻一区二区三区免费看 | 亚洲AV一二三区成人影片| 在线观看国产一区亚洲bd| 999zyz**站免费毛片| 可以免费看黄视频的网站| 亚洲成?v人片天堂网无码| 香蕉蕉亚亚洲aav综合| 亚洲精品无码中文久久字幕| 久久久久久国产a免费观看不卡| h视频在线观看免费网站| 国产免费人成在线视频| 亚洲精品高清视频| 蜜桃传媒一区二区亚洲AV| 华人在线精品免费观看| 在线播放免费播放av片| 精品亚洲综合在线第一区| 亚洲综合精品第一页| 免费无码av片在线观看| 精品国产一区二区三区免费看| 亚洲VA成无码人在线观看天堂| 亚洲另类自拍丝袜第五页| 日本免费一区二区三区 | 亚欧色视频在线观看免费| 亚洲成AV人在线观看网址| 亚洲国产精品成人久久久| 国产免费福利体检区久久| 在线成人a毛片免费播放| 亚洲AV电影院在线观看|