TSP问题

1. 蛮力法:

基本思想:

找出所有可能的旅行路线,即依次考查图中所有顶点的全排列,从中选择路径长度最短的哈密顿回路(也称简单回路).

时间复杂性: Ω(n!)

2.  动态规划法:

伪代码:

输入: 图的代价矩阵arc[n][n]
输出: 从顶点0出发经过所有顶点一次且一次再回到顶点0的最短路径长度

1. 初始化第0列:
   for(i=1; i

时间复杂性: Ω(2^n)

3. 贪心法:

3.1: 最近邻点策略求解TSP

伪代码:

输入: 无向带权图G=(V,E),顶点w
输出: 回路长度TSPLength

1. 初始化,P={};TSPLength=0;
2. u=w;V=V-{w};
3. 循环直到集合P中包含n-1条边
   3.1 查找与顶点u邻接的最小代价边{u,v},并且v属于集合V;
   3.2 P=P+{(u,v)];V=V-{v};TSPLength=TSPLength+Cuv;
   3.3 输出经过的路径u->v,u=v,转步骤3继续求解;
4. 输出TSPLength+Cuv.

时间性能:O(n*2)

3.2 : 最短链接策略求解TSP问题

伪代码:

输入: 无向带权图G=(V,E),顶点w
输出: 回路长度TSPLength

1. 初始化: P={};TSPLength=0;
2. E`=E;
3. 循环直到集合P中包含n-1条边
   3.1 在E`中选取最短边{u,v};
   3.2 E`=E`-{(u,v)};
   3.3 如果(顶点u和v在P中不连通&&不产生分歧)
       则P=P+{(u,v)};TSPLength=TSPLength+Cuv;
4. 输出TSPLength.

时间性能: O(n*log2n)       n倍log以2为底n的对数

4. 分支界限法:

伪代码: 

输入: 图G=(V,E)
输出: 最短哈密顿回路

1. 根据限界函数计算目标函数的下界down;采用贪心法得到上届up;
2. 计算根结点的目标函数值并加入待处理的结点表PT;
3. 循环直到某个叶子节点的目标函数值在表PT中取得最小值
   3.1 i=表PT中具有最小值的结点;
   3.2 对结点i的每个孩子节点x执行下列操作:
       3.2.1 估算结点x的目标函数值lb;
       3.2.2 若(lb<=up),则将结点x加入表PT中,否则丢失该节点;
4. 将叶子节点对应的最优值输出,回溯求得最优解的各个分量.

5. 近似算法:

伪代码:

输入: 无向带权图G=(V,E)
输出: 近似最短回路

1. 在图中任选一个顶点v;
2. 采用Prim算法生成以顶点v为根节点的最小生成树T;
3. 对生成树T从顶点v出发进行深度优先遍历,得到遍历序列L;
4. 根据L得到图G的哈密顿回路.

时间复杂性: O(n^2)

 


未完待续...

你可能感兴趣的:(#,算法)