第K短路

首先证明那个比较显然的推论

我们先证明一下一个小引理:搜索树边权(也是后继的代价减去前驱的代价)非负的优先队列BFS先出队的点一定比后出队的点的代价小或等于

用数学归纳法,假设前面已经出队的点满足以上性质,之前最后一个出队的点为\(x\),现在队列里面的队首是\(y\),那我们就是要证明\(x\)的代价比\(y\)小或等于

我们考虑一下\(y\)是怎么来的

如果\(y\)是由\(x\)扩展来的,那么由于搜索树边权非负,所以结论得证

如果\(y\)不是由\(x\)扩展而来的,那么之所以\(y\)\(x\)后出队,就是因为\(y\)的代价大于等于\(x\),所以结论也得证

然后我们考虑反证,假设\(x\)这个点已经第\(i\)次被取出了,由以上推论那么这一条路径显然至少是第\(i\)短路

如果这条路径不是第\(i\)短路,那么我直接让这个队列扩展无穷次,第\(i\)短路一定会出现,而且出现在这一条路径的后面

与推论矛盾,所以蓝书推论得证

然后我们考虑用A*优化这一个优先队列BFS,估价函数就像蓝书这么设计

很巧的一件事情是,这么设计后,不会出现上一篇博客说的那种特殊情况,就是仍然满足P126说的这个推论

我们考虑一下什么BFS才满足我们上面证明的引理:搜索树上的边权非负且是优先队列BFS

这里的A*是基于优先队列的,没问题

那么这个A*的搜索树边权非负吗?是的,下面是证明

考虑搜索树上的一个点\(x\),在有向图中有一条边\((x,y,w)\),其中\(w\)是题目给的有向图的边权

由最短路定义可得\(f_{x}≤f_{y}+w\)

所以\(dist+f_{x}≤dist+w+f_{y}\)

而上式前者是\(x\)的代价,后者是\(y\)的代价

所以搜索树上的边权(即\(y\)的代价减去\(x\)的代价)非负,也满足这个引理

但是注意,我们的引理说的“代价”二字指的是节点的状态代价,在这里的A*中,是第\(i\)短路的长度加上最短路长度,所以我们还有下述论证

对同一个点取出了\(i\)次,那么第\(i\)次一定是第\(i\)短路,因为对于同一个点估价函数是相同的,不同的状态代价减去相同的估价函数,也就是第\(i\)短路

posted @ 2023-11-23 16:41  最爱丁珰  阅读(1)  评论(0编辑  收藏  举报