维特比算法实际是用动态规划求解隐马尔可夫模型解码问题,即用动态规划求概率最大路径(最优路径)。代码中有示例,来自李航《统计学习方法》
function [Delta,Psi,P,I] = Viterbi(A,B,Pi,O)
% 函数功能:利用维特比算法找到观测序列O的最优路径
%
% 参考文献:李航《统计学习方法》
%
% 思路:
% 1,初始化
% delta_1(i) = Pi_i * b_i(o1), i = 1,2,...,N
% psi_1(i) = o, i = 1,2,...,N
% 2,递推,对于t = 2,3,...,T
% delta_t(i) = max_1-from-1-to-N(delta_t-1(j) * a_ji) * b_i(ot), i = 1,2,...,N
% psi_t(i) = arg max_1-from-1-to-N(delta_t-1(j) * a_ji), i = 1,2,...,N
% 3,终止
% 最优路径概率P* = max_1-from-1-to-N(delta_T(i))
% 最优路径终点i*_T = arg max_1-from-1-to-N(delta_T(i))
% 4,最优路径回溯,对于t = T-1,T-2,...,1
% i*_t = psi_t+1(i*_t+1)
% 最优路径I* = (i*_1,i*_2,...,i*_T)
% 【提示:“思路”中的i,j和本程序中的i,j不存在对应关系,只是方便理解原理】