近似算法之旅行商问题

来源:互联网 发布:浙江大学网络平台 编辑:程序博客网 时间:2024/05/17 20:24

1. 问题定义


        输入:加权的完全无向图G=(V,E), 权值函数c: E → R+, c满足三角不等式

        输出:权值最小的哈密顿环


        哈密顿环指的是包含V中的每一个顶点恰一次的简单环。哈密顿环的权值指的是其中所有边的权值之和。如果旅行商问题的权值函数满足三角不等式,即c(u,w)≤c(u,v) + c(v,w)对任意u,v,w都成立,则称它满足三角不等式。无论旅行商问题是否满足三角不等式,它均是NP-完全问题。相关定理表明,不满足三角不等式的旅行商问题不存在常数近似比的近似算法,除非NP=P。

       求解旅行商问题要求选用图中的一组边,将图中所有顶点连接成一个简单环。在图中,最小生成树T*总是以总代价最小的方式将所有顶点相互连接。因此,以深度优化方式遍历最小生成树T*中的每条边两遍,可得到访问所有顶点的回路L,然后将回路L改造成一个简单环C,从而得到问题的一个近似解C。分析近似比时,问题的优化解C*和近似解C可以通过最小生成树T*关联。由此,可得到以下算法。


2. 近似算法设计


1. 任意选择V中的一个顶点r,作为树根节点;

2. 调用Prim算法得到图G(V,E)的最小生成树T*;

3. 先序遍历T*,访问T*中的每条边两遍,得到顶点序列L;

4. 删除L中的重复顶点形成哈密顿环C;

5. 输出C.


3. 算法的性能分析


3.1 时间复杂度


       该算法的时间复杂度为O(|V|^2 * log|V|)。事实上,第2步开销为O(|E| * log|V|)且图G是完全图,O(|E| * log|V|)等于O(|V|^2 * log|V|)。第3~4步的开销为O(|V|),因为最小生成树恰有|V| - 1条边。


3.2 近似精度


      对于近似解C,由于L是遍历T*的每条边两次得到的回路,则有c(L) = 2 * c(T*), 而C又是关于L删除某些重复边后得到的结果,因此C ≤ 2 * c(T*)。

      对于优化解C*,由于C*是一个简单环,则删除任一条边便可生成树,而且该树的代价一定不低于最小生成树的代价,因此有c(C*) ≥ c(T*)。

      综上,有C ≤ 2 * c(T*) ≤ 2 * C*。所以C / C* ≤ 2,该算法的近似比为2。


4. 拓展


       在最小生成树的基础上求解近似问题,其近似比为2。那是否存在某种算法使得近似比更好?事实上,将最小生成树算法与最大匹配算法结合,就可以实现近似比为3/2的算法,但是该算法的时间复杂度较高。

原创粉丝点击