维特比算法简单易懂讲解

神遁克里苏 神遁克里苏     2022-12-12     266

关键词:

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

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

自己画了一张

假设要从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时刻的集种状态的最短路径即可。

hmm的维特比算法简单示例

...一位大牛的关于HMM的技术博客,读完之后,写了一个关于维特比算法的简单示例,用scala和java语言混合编写的。现在上传之。packagecom.txq.hmmimportjava.utilimportscala.collection._/***HMM维特比算法,根据显示状态链条估计隐式链条*@paramstat... 查看详情

最通俗易懂的解说viterbi维特比算法!

...了遍历完所有路径,还有什么更好的方法?答案:viterbi(维特比)算法。过程非常简单:为了找出S到E之间的最短路径,我们先从S开始从左到右一列一列地来看。首先起点是S,从S到A列的路径有三种可能:S-A1、S-A2、S-A3,如下图:... 查看详情

维特比算法(viterbi)(代码片段)

维特比算法(Viterbi)维特比算法维特比算法shiyizhong动态规划算法用于最可能产生观测时间序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔科夫模型中。术语“维特比路径”和“维特比算法”也被用... 查看详情

自然语言处理之维特比算法

刘勇 Email:[email protected]简介  鉴于维特比算法可解决多步骤中每步多选择模型的最优选择问题,本文简要介绍了维特比算法的基本理论,并从源代码角度对维特比算法进行剖析,并对源码中涉及的要点进行了解读,以... 查看详情

《数学之美》——维特比和他维特比算法

维特比乍法是一个特殊但应用最广的动态规划算法,可以解决任何一个图中的最短路径问题。这个算法是针对一个特殊的图——篱笆网络的有向图的最短路径提出的。这个算法之所以重要,是因为凡是使用隐含马尔科夫模型描述... 查看详情

维特比算法viterbi

维特比算法一种动态规划算法(动态规划DynamicProgramming,是运筹学的一个分支,是求解决策过程最优化的过程。)用于寻找最有可能产生观测事件序列的-维特比路径-隐含状态序列特别是在马尔可夫信息源上下文和隐马尔可夫模... 查看详情

维特比算法基础

维特比算法基础维特比算法是一个特殊,但应用最广的动态规划算法。利用动态规划,可以解决任何一个图中的最短路径问题。而维特比算法是针对一个特殊的图--篱笆网络(Lattice)的有向图最短路径问题而提出的。它之所以重要... 查看详情

维特比算法(代码片段)

维特比算法(Viterbialgorithm)是在一个用途非常广的算法,本科学通信的时候已经听过这个算法,最近在看 HMM(HiddenMarkovmodel)的时候也看到了这个算法。于是决定研究一下这个算法的原理及其具体实现,如果了解动态规划的... 查看详情

实时应用的维特比算法

】实时应用的维特比算法【英文标题】:Viterbialgorithmforreal-timeapplications【发布时间】:2011-12-2207:34:31【问题描述】:我知道,给定一个HMM和一个观察,维特比算法可以猜测产生这个观察的隐藏状态序列。但是你想实时使用它的... 查看详情

基本隐马尔可夫模型,维特比算法

】基本隐马尔可夫模型,维特比算法【英文标题】:BasicHiddenMarkovModel,Viterbialgorithm【发布时间】:2017-03-2405:50:40【问题描述】:我对隐马尔可夫模型相当陌生,我正试图围绕该理论的一个非常基本的部分展开思考。我想使用HMM作... 查看详情

大道至简机器学习算法之隐马尔科夫模型(hiddenmarkovmodel,hmm)详解---预测问题:维特比算法(viterbialgorithm)详解

...、从青蛙跳台阶问题引入动态规划思想二、从序列标注到维特比算法三、维特比算法四、总结写在前面其实到本篇文章,关于HMM三个基本问题中最难的部分已经在前两篇介绍过了,但第三个问题却又是HMM中最具实际应用... 查看详情

ml-13-4隐马尔科夫模型hmm--预测问题viterbi(维特比)算法

...奇)【ML-13-4】隐马尔科夫模型HMM--预测问题Viterbi(维特比)算法 目录基础--HMM常用概率的计算HMM最可能隐藏状态序列近似算法Viterbi(维特比)算法Viterbi(维特比)算法举例HMM模型最后一个问题的求解:求给定观测序列... 查看详情

隐马尔科夫模型(前向后向算法鲍姆-韦尔奇算法维特比算法)

 概率图模型是一类用图来表达变量相关关系的概率模型。它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的变表是变量间的概率相关关系。根据边的性质不同,可以将概率图模型分为两类:一类... 查看详情

这是维特比最佳路径算法的好案例吗?

】这是维特比最佳路径算法的好案例吗?【英文标题】:IsthisagoodcaseforViterbi\'sbestpathalg?【发布时间】:2014-10-1903:24:36【问题描述】:我一直在开发一个程序,该程序将读取OCR输出,找到页码,然后将它们返回给我。每当我的函... 查看详情

隐马尔可夫模型——隐马尔可夫模型的解码问题(维特比算法)(转载)

阅读目录HMM解码问题维特比算法时间复杂度程序例证回到顶部HMM解码问题      给定一个观察序列O=O1O2...OT,和模型μ=(A,B,π),如何快速有效地选择在一定意义下“最优”的状态序列Q=q1q2...qT,使该状态最好... 查看详情

加速维特比执行(代码片段)

我已经为基于HMM的信号实现了一个朴素的维特比算法。解码器的执行时间似乎对我的要求来说太慢了。我现在正试图了解如何加快执行速度。当我要确定算法的计算复杂度时,我发现它被提到具有t*s^2的复杂性,其中t是观察数,... 查看详情

hmm条件下的前向算法和维特比解码

一、隐马尔科夫HMM如果:有且仅仅有3种天气:0晴天。1阴天。2雨天各种天气间的隔天转化概率mp:mp[3][3]晴天阴天雨天晴天0.333330.333330.33333阴天0.333330.333330.33333雨天0.333330.333330.33333有2种活动:      0去公园... 查看详情

vue.js路由参数简单实例讲解------简单易懂

vue中,我们构建单页面应用时候,一定必不可少用到vue-routervue-router就是我们的路由,这个由vue官方提供的插件首先在我们项目中安装vue-router路由依赖第一种,我们提供命令行来安装  npminstallvue-router--save第二种,我们直接去... 查看详情