开篇
开篇
写了几篇记录学习图算法,Want先生很不耐烦的提出了自己的问题:他妈的,你扯了那么多算法,我的要求很简单,告诉我从点s到点v有几条路可以到达?其中那条路妹子最多?他妈的要是我敢时间那条路最快?
或许这篇文章可以回答want先生的问题,当然也有许多aspire先生,你写的这些文章对我一点用都没有,我希望的文章是能直接解决我遇到的问题,对此,我很抱歉,希望你能找到灵感,看到一坨屎也能产生灵感,如果是的,我很高兴这是那坨屎。
最短路径最优子结构(开门见山)
算法导论引理24.1(最短路径的子路径是最短路径):对于一给定的带权有向图G=(V,E),所定义的权函数w:E ---> R。设P=(v1,v2,...,vk)的最短路径是从v1到vk的最短路径,对于任意i,j,其中1 <= i <= j <= K,
设Pij = (Vi,Vi+1,....,Vk)为P从顶点vi到vj的子路径。那么,Pij是从Vi到Vj的最短路径。
证明:反证,假设Pij不是Vi到Vj的最短路径。
一个最短路径能包含回路吗(最短路径上的顶点会重复吗)?分三种情况考虑:负权回路、正权回路、0权回路。
1、负权回路(不存在)
那么将不存在V1到Vk的最短路径,因为在这个回路上无限循环,最短路径是“负无穷”(我自己认为这种情况不存在回路,单如果限制要求路径上的点不能重复的话,那么是有最短路径的)
2、正权回路(不存在)
显然把回路那部分去掉,有比这更短的路径
3、0权回路(不存在)
显然,把0权回路去掉,就是无回路的最短路径。
松弛技术
对加权有向图G=(V,E),对每个顶点v属于V,都设置一个属性d[v],用来描述从原点s到v的字段路径上权值的上届,称为最短路径估计(松弛技术的理论基础)
最短路径以及松弛的性质:
三角不等式性质: