斯坦納樹與旅行商問題

2021-10-07 00:07:49 字數 1942 閱讀 3464

啥也別說了,先上圖

討論了整整四個小時,只討論了不到兩章,我的那章還沒講完,真佩服我們。不過,印證了真理總是越辯越明這句話,通過這一次的討論,對於我自己的那章,我都收穫良多。

下面會寫一下聽第三章斯坦納樹和旅行商問題的理解和感悟。

首先,斯坦納樹在近似演算法中佔據了核心地位,其定義為

給定乙個帶權的無向圖g =(v,e),其頂點被劃分為required和steiner兩個集合,在g中找到乙個包含所有required頂點,和steiner頂點的任意子集的最小代價樹。

也就是說,給了乙個加權無向圖,裡面有一些節點,必須經過,稱require節點。有一些節點不需要經過,但是加入這些點也許會形成捷徑,這些節點稱steiner節點。然後要求每乙個require節點,都必須要經過。經過的路徑,就可以形成一棵斯坦納樹。斯坦納樹的奇特之處就在於,給了一些定點,在定點之外可以增加額外的點,使得開銷變小。

然後給出了乙個度量閉包下的斯坦納樹,這裡就是要求構造出來的斯坦納樹,斯坦納節點和require節點之間要滿足三角不等式,即兩邊之和大於第三邊。

斯坦納樹和度量閉包下的斯坦納樹是可以相互規約的。

2.設r是所需頂點的集合,那麼下證在r上的最小生成樹的耗費是小於2opt的。(也就是說近似演算法和最優解的比值小於2)

首先,原圖為完全無向圖。根據原圖得到一棵斯坦納樹,然後對每條邊進行加倍(一條出邊一條入邊代替原來的無向邊)得到尤拉迴路。尤拉迴路是每條邊都能必走一次並且最後回到出發點的迴路。替換。然後得到下面這個樣子。

根據三角形兩邊之和大於第三邊的原理,進行新邊替換。也就是用藍色的邊代替掉紅色的兩條邊。因為原圖為完全無向圖,任意兩點之間都有通路。

演算法執行完畢得到的圖是這樣的。空心點是斯坦納點,是不需要經過的,實心點是必須要經過的。形成一條哈密頓迴路。哈密頓迴路是每個點都經過一次且最後回到出發點。

我們知道,最優的情況下是最上面的圖,那條最小生成樹。那麼,尤拉迴路是最小生成樹的二倍。哈密頓迴路是根據尤拉迴路構建 的,但是由於採用了三角不等式,又小於尤拉迴路。把哈密頓迴路減掉一條邊,就是一棵度量閉包下的斯坦納樹。那麼,根據斯坦納樹經過每個點的演算法和最優演算法之比不會超過2.如下。

哈密頓迴路-1條邊《哈密頓迴路《尤拉迴路=2*最小生成樹。

旅行商問題:

旅行商問題是在給出n個必經節點,並且,每對節點之間都存在通路,求旅行商經過每個節點,然後回到出發點的最短路徑。

首先,旅行商問題是個np難問題,因為旅行商問題可以規約到哈密頓迴路問題,而後者是np難的。

反證,假設旅行商問題是可以在多項式時間內算出來,這個多項式時間含α(n)因子。

核心思想是把哈密頓圖規約為旅行商問題。把n個節點的圖g轉換成n個節點的帶權無向圖g『。

左圖為原圖,右圖為新增了一條邊長為α(n)的邊,左圖是沒有辦法構成一條哈密頓迴路的,但是右圖可以。那麼, 如果g中存在哈密頓迴路,那麼在g』上進行一次最佳tsp旅行的成本是n(注:n-1條邊加上一條返回出發點的邊); 如果g中不存在哈密頓迴路,那麼在g』上進行一次最佳tsp旅行的成本大於α(n)·n(注:一定大於新增進去的那條邊);

因此,尋找哈密頓迴路就可以通過看最佳旅行商問題的結果是不是大於α(n)·n。but,這個圖是不滿足三角不等式的,兩邊之和一定會小於第三邊。結束。

下面還有一些,但是因為隊友這部分不是特別清楚,所以留到下次講。

旅行商問題 斯坦納樹問題小結

poj 3311 旅行商問題 題意就是從乙個點出發遍歷所有點回到原地所需最短時間 狀態dp st i 表示經過了st中標記的點,現在在i點的最小經過距離 比較水,略了 include include include include include using namespace std const ...

旅行商問題

旅行商問題 乙個商人從城市a出發,訪問bcde等城市各一次最後回到a,問行程如何使得路程或費用最低。這是個np 非多項式可解,但一般驗證容易 問題,假設中間有4個城市,那麼全排列為4!24種,沒有很好的演算法,基本只能窮舉了。class vertex 4 public class lianxi pu...

旅行商問題

一銷售商從n個城市中的某一城市出發,不重複地走完其餘n 1個城市並回到原出發點,在所有可能的路徑中求出路徑長度最短的一條。本題假定該旅行商從第1個城市出發。對每個測試例,第1行有兩個整數 n 4 n 10 和m 4 m 20 n是結點數,m是邊數。接下來m行,描述邊的關係,每行3個整數 i,j le...