• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 18,  comments - 5,  trackbacks - 0

              在加權圖中,我們經常需要找出兩個指定點之間的最短路,這類問題有如下兩種形式:
               1、單個點到圖中各個點的距離
              
            2、圖中任意兩個點之間的距離

            一、 單個點到圖中各個點的距離



            這類題目主要有兩個算法:
            Bellman-Ford算法,時間復雜性為O(n3),關于其算法的描述及其優化:
            http://m.shnenglu.com/Icyflame/archive/2009/05/02/81662.html
            Dijkstra算法,時間復雜性為O(n2),描述如下:
             1 Dijkstra(G, u)
             2     for each vertex v in V(G)
             3         L[v] = ∞
             4     L[u] = 0
             5     S = {u}
             6     while S != V(G)
             7         v = vertex in V(G)-S with the minimum L-value
             8         S = S + {v}
             9         for each vertex a in V(G)-S
            10             if L[v] + w[v, a] < L[v]
            11                 L[v] = L[v] + w[v, a]
            定理:Dijkstra算法能求出u到G中其它各個點的距離最短
            證明:令k表示6行迭代的次數
            (1) 當k=0時,即初始化后,L[u]為0,S為{u},顯然滿足如下兩個條件:
            • 對于在S中的任意頂點v都有L[v]為u到v的最短路的長度
            • 對于不再S中的任意點v都有L[v]為u只經過S中的點到v的最短路的長度
            (2) 假設k-1次迭代后,滿足上述條件,對于第k次迭代時,選取vk作為加入S點。
                假設L[vk]不是從uvk的最短路的長度,由于vk不在k-1次迭代后的S中,則根據上述條件2可知在uvk的最短路Pu=v1,v2,…,vk,中必存在一個經過一個不在S中的點vi(不為vk),使得v1,…,vi-1S中,則L[vi]uvi的最短路得長度,則有L[vi]<uvk的最短路的長度<L[vk],這與算法第7行中vk的選取條件矛盾。證畢。

            二、 圖中任意兩個點之間的距離



            這類問題有個十分直觀的方法,就是對每個點運行Dijkstra算法,時間復雜性為O(n3),而且也是一個性能較好的方法。
            下面是一個著名的算法—Floyd-Warshall算法,時間復雜性也是O(n3):
             1 Warshall(G)
             2     for i 1 to n
             3         for j 1 to n
             4             if vi in adj[vj]
             5                 d[i, j] = w[i, j]
             6             else
             7                 d[i, j] = ∞
             8     for k 1 to n
             9         for i 1 to n
            10             for j 1 to n
            11                 d[i, j] = min(d[i, j], d[i, k]+d[k, j])
            這個算法其實是一個動態規劃的形式,令d[i, j, k]表示vi與vj經過前k個點的最短距離,則可得遞歸式:
            d[i, j, 0] = w[i, j] 當vi與vj相鄰
            d[i, j, 0] = ∞ 當vi與vj不相鄰
            d[i, j, k+1] = min(d[i, j, k], d[i, k, k]+ d[k, j, k])


            posted on 2009-05-22 22:49 Icyflame 閱讀(504) 評論(0)  編輯 收藏 引用 所屬分類: 圖論
            久久人妻少妇嫩草AV无码专区| 777午夜精品久久av蜜臀| 久久av无码专区亚洲av桃花岛| 久久中文骚妇内射| 久久99精品国产一区二区三区| 亚洲国产成人久久精品动漫| 久久久久无码国产精品不卡| 亚洲综合伊人久久综合| 久久精品国产免费| 2021最新久久久视精品爱 | 久久亚洲天堂| 色诱久久久久综合网ywww| 精品久久久久久久| 久久人妻少妇嫩草AV蜜桃| 99久久精品国产一区二区蜜芽 | 93精91精品国产综合久久香蕉| 久久综合九色综合久99| 国产精品乱码久久久久久软件| 国产午夜精品理论片久久影视| 亚洲欧美精品一区久久中文字幕 | 久久夜色撩人精品国产小说| 久久久精品国产sm调教网站 | 99久久精品国产免看国产一区| 国产99久久九九精品无码| 亚洲精品无码久久久影院相关影片| 国产福利电影一区二区三区,免费久久久久久久精 | 久久婷婷五月综合色奶水99啪 | 99热热久久这里只有精品68| 午夜不卡久久精品无码免费| 久久性生大片免费观看性| 伊人丁香狠狠色综合久久| 国产精品18久久久久久vr| 久久久久女人精品毛片| 亚洲人成网亚洲欧洲无码久久 | 人妻精品久久无码区| 久久婷婷午色综合夜啪| 精品人妻伦一二三区久久 | 国产精品久久国产精品99盘| 蜜臀av性久久久久蜜臀aⅴ麻豆| 奇米影视7777久久精品人人爽| 久久无码精品一区二区三区|