网上很多相关文章介绍的时候都缺乏例子,以至于太抽象不够直观。本文用具体例子来介绍动态规划法界tsp,力求让初学者可以轻松理解。伪代码来自《Foundations of Algorithms(written by Neapolitan, Richard)》
TSP
tsp是为了在一个图中求得一个最短的路径,可以实现从一个起点出发,经过所有节点,最终回到起点。
首先理清一些概念
a.对于下图,我们用v1,v2,v3,……v6表示每个节点。n表示节点个数,n = 6。 因为求的是一个回路,所以从任意一点出发都没有区别。所以我们以v1做起点。
b.用二维邻接矩阵W表示各个节点之间的距离。即W[i][j] = vi到vj的距离
c.比较难理解也是比较重点的是用于存储动态规划状态的矩阵D。D的每一行表示一个节点,每一列表示一个子集。这个子集是指包含除起点v1外的所有节点集合V ={v2, v3, v4, v5, v6}(注意,这里的V不是所有点的集合,是除v1外所有点的集合)的任一子集
-------------------------------------------------------------------------------------------------------
{}{v2}{v2,v3}..(一共有2^5个子集,这里不全写了).{v2,v3,v4,v5,v6}
v1
v2
v3
...
v6
--------------------------------------------------------------------------------------------------------
{ Ø} | {v2} | {v2, v3} | 省略,一共是2^5个子集 |