基本模型之圖論篇
最短路徑問題
(給定連接若幹城市的公路網,尋找從指定城市到各城市去的最短路線。)
涉及算法:
1.貪心算法(由局部最優解求全局最優解)
貪心算法的基本思路是從問題的某一個初始解出發一步一步地進行,根據某個優化測度,每一步都要確保能獲得局部最優解。每一步只考慮一個數據,他的選取應該滿足局部優化的條件。若下一個數據和部分最優解連在一起不再是可行解時,就不把該數據添加到部分解中,直到把所有數據枚舉完,或者不能再添加算法停止。
2.Kijkstra算法
迪科斯徹算法使用了廣度優先搜索解決賦權有向圖或者無向圖的單源最短路徑問題,算法最終得到一個最短路徑樹。該算法常用於路由算法或者作為其他圖算法的一個子模塊。
最小生成樹問題
最小生成樹概念:現在假設有一個很實際的問題:我們要在n個城市中建立一個通信網絡,則連通這n個城市需要布置n-1一條通信線路,這個時候我們需要考慮如何在成本最低的情況下建立這個通信網?
於是我們就可以引入連通圖來解決我們遇到的問題,n個城市就是圖上的n個頂點,然後,邊表示兩個城市的通信線路,每條邊上的權重就是我們搭建這條線路所需要的成本,所以現在我們有n個頂點的連通網可以建立不同的生成樹,每一顆生成樹都可以作為一個通信網,當我們構造這個連通網所花的成本最小時,搭建該連通網的生成樹,就稱為最小生成樹。
構成生成樹的準則有三條:
<1> 必須只使用該網絡中的邊來構造最小生成樹。
<2> 必須使用且僅使用n-1條邊來連接網絡中的n個頂點
<3> 不能使用產生回路的邊
涉及算法:
Kruskal算法:
克魯斯卡爾算法的基本思想是以邊為主導地位,始終選擇當前可用(所選的邊不能構成回路)的最小權植邊。所以Kruskal算法的第一步是給所有的邊按照從小到大的順序排序。
具體實現過程如下
<1> 設一個有n個頂點的連通網絡為G(V,E),最初先構造一個只有n個頂點,沒有邊的非連通圖T={V,空},圖中每個頂點自成一格連通分量。
<2> 在E中選擇一條具有最小權植的邊時,若該邊的兩個頂點落在不同的連通分量上,則將此邊加入到T中;否則,即這條邊的兩個頂點落到同一連通分量 上,則將此邊舍去 (此後永不選用這條邊),重新選擇一條權植最小的邊。
<3> 如此重復下去,直到所有頂點在同一連通分量上為止。
中國郵路問題
涉及算法:
Edmons-Johnson算法
人員安排問題
涉及算法:
匈牙利算法(二分圖分配)
由增廣路的性質,增廣路中的匹配邊總是比未匹配邊多一條,所以如果我們放棄一條增廣路中的匹配邊,選取未匹配邊作為匹配邊,則匹配的數量就會增加。匈牙利算法就是在不斷尋找增廣路,如果找不到增廣 路,就說明達到了最大匹配。
舉個例子
1、起始沒有匹配
2、選中第一個x點找第一跟連線
3、選中第二個點找第二跟連線
4、發現x3的第一條邊x3y1已經被人占了,找出x3出發的的交錯路徑x3-y1-x1-y4,把交錯路中已在匹配上的邊x1y1從匹配中去掉,剩余的邊x3y1 x1y4加到匹配中去
5、同理加入x4,x5。
匈牙利算法可以深度有限或者廣度優先,剛才的示例是深度優先,即x3找y1,y1已經有匹配,則找交錯路。若是廣度優先,應為:x3找y1,y1有匹配,x3找y2。
最大流問題
涉及算法:
Ford-Fulkerson算法
最大流問題常常出現在物流配送中,可以規約為以下的圖問題。最大流問題中,圖中兩個頂點之間不能同時存在一對相反方向的邊。
邊上的數字為該條邊的容量,即在該條邊上流過的量的上限值。最大流問題就是在滿足容量限制條件下,使從起點s到終點t的流量達到最大。在介紹解決最大流問題的Ford-Fulkerson方法之前,先介紹一些基本 概念。
1. 殘存網絡與增廣路徑
根據圖和各條邊上的流可以畫出一幅圖的殘存網絡如下所示。左圖為流網絡,右圖為殘存網絡,其中流網絡中邊上的數字分別是流量和容量,如10/12,那麽10為邊上的流量,12為邊的容量。殘存網絡中可能會 存在一對相反方向的邊,與流網絡中相同的邊代表的是流網絡中該邊的剩余容量,在流網絡中不存在的邊代表的則是其在流網絡中反向邊的已有流量,這部分流量可以通過“回流”減少。例如,右圖殘存網絡中, 邊<s,v1>的剩余容量為4,其反向邊<v1.s>的值為12,即左圖流網絡中的邊<s,v1>的流量。在殘存網絡中,值為0的邊不會畫出,如邊<v1,v2>。
殘存網絡描述了圖中各邊的剩余容量以及可以通過“回流”刪除的流量大小。在Ford-Fulkerson方法中,正是通過在殘存網絡中尋找一條從s到t的增廣路徑,並對應這條路徑上的各邊對流網絡中的各邊的流進行修 改。如果路徑上的一條邊存在於流網絡中,那麽對該邊的流增加,否則對其反向邊的流減少。增加或減少的值是確定的,就是該增廣路徑上值最小的邊
旅行推銷員問題
涉及算法:
遺傳算法
遺傳算法是解決搜索問題的一種通用算法,對於各種通用問題都可以使用。搜索算法的共同特征為:
① 首先組成一組候選解
② 依據某些適應性條件測算這些候選解的適應度
③ 根據適應度保留某些候選解,放棄其他候選解
④ 對保留的候選解進行某些操作,生成新的候選解。
基本模型之圖論篇