我很难找到下一个TSP问题变化的矛盾例子。
输入:G =(V,E)无向完整图,它保存三角形不等式,w:E-> R +权重函数和源顶点s。
输出:简单的汉密尔顿循环,以s开始和结束,重量最小。
算法:
1. S=Empty-Set
2. B=Sort E by weights.
3. Initialized array M of size |V|,
where each cell in the array holds a counter (Initialized to 0)
and a list of pointers to all the edges of that vertex (In B).
4. While |S|!=|V|-1
a. e(u,v)=removeHead(B).
b. If e does not close a cycle in S then
i. s=s union {e}
ii. Increase degree counter for u,v.
iii. If M[u].deg=2 then remove all e' from B s.t e'=(u,x).
iv. If M[v].deg=2 then remove all e' from B s.t e'=(v,x).
5. S=S union removeHead(B).
这将类似于Kruskal算法(使用union-find DS) 步骤4.b.iii和4.b.iv将使用指针列表完成。
我非常怀疑这个算法是否属实,所以我立刻转而找到它为什么是错误的。任何帮助将不胜感激。
答案 0 :(得分:0)
假设我们有一个包含4个顶点(a, b, c, d)
的图形,其边缘权重如下:
w_ab = 5
w_bc = 6
w_bd = 7
w_ac = 8
w_da = 11
w_dc = 12
7
|--------------|
5 | 6 12 |
a ---- b ---- c ----- d
|______________| |
| 8 |
|_____________________|
11
三角形不等式适用于此图中的每个三角形。
当更好的周期为a-b-c-d-a
(费用为32)时,您的算法将选择周期a-b-d-c-a
(费用34)。
答案 1 :(得分:0)
您的程序可能不会终止。考虑具有节点{1,2,3,4}和边{(1,2),(1,3),(2,3),(2,4),(3,4)}的图。该图中唯一的哈密顿循环是{(1,2),(1,3),(2,4),(3,4)}。假设最低加权边是(2,3)。然后你的程序将选择(2,3),选择{(1,2),(1,3)}中的一个并消除另一个,选择{(2,4),(3,4)}中的一个并消除另一个,然后永远循环。
这样的细微差别使旅行商问题变得如此困难。
答案 2 :(得分:0)
考虑4个顶点上的完整图形,其中{a,b,c,d}
是节点,被设想为方形的顺时针排列角。设边缘权重如下。
w({a,b}) := 2, // "edges"
w({b,c}) := 2,
w({c,d}) := 2,
w({d,a}) := 2,
w({a,c}) := 1, // "diagnoals"
w({b,d}) := M
其中M
是一个大于2的整数。一方面,哈密顿循环包括" edge"重量为8.另一方面,包含{a,c}
(最轻的边缘)的哈密顿循环必须包含{b,d}
且总重量
1 + M + 2 + 2 = 5 + M > 8
大于最小可能的重量。总的来说,这意味着通常最小权重的hamitonian循环不一定包含最小边缘,这是由原始问题中的算法选择的。此外,由于M
趋于无穷大,因此算法在approximation ratio方面任意严重,因为
(5 + M) / 8
任意增长。