【维特比算法】简单易懂讲解

最近看了一下维特比算法,是一种典型的动态规划算法。概念定义就不多说了,直接进入正题。

对这样一个最短路径的问题,如何去求解?
暴力法当然可以找到答案,但是很复杂,所以这个时候我们就要使用维特比算法了

在这里插入图片描述

自己画了一张
在这里插入图片描述

假设要从A到D,我们是不是一定会经过t2、t3时刻,就是一定会经过B和C,只不过我们要 求解的是经过的是哪一个B和C。B1,B2,还是B3?C1,C2,还是C3?
还有最后到达的是D1,D2,还是D3?

我们可以分时刻来求解,对于t2时刻,是不是可以求出每个B的最短路径。

  • t2时刻

比如对于B1,到达B1的最短路径为5,记做L(B1)=5
到达B2的最短路径L(B2)=6;对于B3,L(B3)=1。
不用比较,只用把这三个记录下来就好了。

  • t3时刻

接着看t3时刻,对C1来说,有三种到达的方式,B1—>C1,B2—>C1,B3—>C1。计算一下这三种方式的代价。
B1—>C1:=L(B1)+cost(B1—>C1)=5+2=7;
B2—>C1:=L(B2)+cost(B2—>C1)=6+2=8;
B3—>C1:=L(B3)+cost(B3—>C1)=1+9=10;
这里3个之中最小的记为L(C1),所以L(C1)=7。
意思就是说,如果我们要到达C1这个状态,那么她一定经过的是A—>B1—>C1这条路径,因为这条路径的代价是最短的。

同样对于C2,也有3条路径,计算出最短的那条为
B1—>C2:=L(B1)+cost(B1—>C2)=5+3=8;
B2—>C2:=L(B2)+cost(B2—>C2)=6+4=10;
B3—>C2:=L(B3)+cost(B3—>C2)=1+10=11;
所以到达C2的最短路径是A—>B1—>C2,L(C2)=8。

同样对于C3,也有3条路径,计算出最短的那条为
B1—>C3:=L(B1)+cost(B1—>C3)=5+7=12;
B2—>C3:=L(B2)+cost(B2—>C3)=6+5=11;
B3—>C3:=L(B3)+cost(B3—>C3)=1+10=11;
所以到达C2的最短路径是A—>B1(或者B2)—>C3,,走B1或者B2都行,反正代价一样,到达C3的最段路径L(C3)=11。

这样就得到了L(C1),L(C2),L(C3),也是不用比较,记录下来就好。

  • t4时刻
    把图再放一遍,免得上下翻。
    在这里插入图片描述

接着看t4时刻,对D1来说,有三种到达的方式,C1—>D1,C2—>D1,C3—>D1。计算一下这三种方式的代价。
C1—>D1:=L(C1)+cost(C1—>D1)=7+6=13;
C2—>D1:=L(C2)+cost(C2—>D1)=8+3=11;
C3—>D1:=L(C3)+cost(C3—>D1)=11+1=12;
这里3个之中最小的记为L(D1),所以L(D1)=11。
意思就是说,如果我们要到达D1这个状态,那么她一定经过的是C2—>D1这条路径,而到达C2的最短路径已经在t2时刻求出来了,是B1—>C2,而到达B1的最短路径是A—>B1。
所以如果要达到D1,最短的就是A—>B1—>C2—>D1这条路径。

同样对于C2,也有3条路径,计算出最短的那条为
C1—>D2:=L(C1)+cost(C1—>D2)=7+4=11;
C2—>D2:=L(C2)+cost(C2—>D2)=8+2=10;
C3—>D2:=L(C3)+cost(C3—>D2)=11+2=13;
所以到达D2的最短路径是A—>B1—>C2—>D2,L(D2)=10。

同样对于C3,也有3条路径,计算出最短的那条为
C1—>D3:=L(C1)+cost(C1—>D3)=7+7=13;
C2—>D3:=L(C2)+cost(C2—>D3)=8+5=13;
C3—>D3:=L(C3)+cost(C3—>D3)=11+1=12;
所以到达D2的最短路径是A—>B1(或者B2)—>C3—>D3,L(D3)=12。

结论:此时L(D1)=11,L(D2)=10,L(D3)=12。
相互比较,可得到A—>B1—>C2—>D2路径是最短的,为10。

总结:
每个时刻,我们记录的是到达该时刻的几种状态的最短路径,
t时刻记录每种状态的最短路径,t+1时刻,运用t时刻求的最短路径,得到t+1时刻的集种状态的最短路径即可。

猜你喜欢

转载自blog.csdn.net/zzy_pphz/article/details/115023223