Bellman-Ford算法之最短路径问题
问题:求下图中点S到T的最短路径。
分析:这个问题于TSP问题有点像,不同点在于该问题不需要每个节点都遍历。对于大问题节点太多,眼花缭乱,不会做。先尝试把其分解成子问题,变得容易点。
step 1:从s到t的路径,这个过程我们可以看做是一系列的决策,在每个决策步考虑下一步怎么走。
step 2:假装已经拿到了最优解O,考察O中的第一个决策:所有s的邻居节点都是备选选,这样选择了从s到v的一条路径。
step 3:剩下的问题是从v中如何走到 t,路径越短越好。
但是按照上面的递归表达式写程序还是有点慢,因为子问题太多,图上的递归都是指数级。我们引入新观察,因为图中没有福泉,所以从s到t的最短路径做多经过n个节点即k条边(k=n-1)。从而进一步修整了我们的子问题,写出递归表达式如下:
OPT[v,t,k]=min⎧