• 维特比算法基础


    维特比算法基础

    维特比算法是一个特殊,但应用最广的动态规划算法。利用动态规划,可以解决任何一个图中的最短路径问题。而维特比算法是针对一个特殊的图--篱笆网络(Lattice)的有向图最短路径问题而提出的。它之所以重要是因为,凡是使用隐含马尔科夫模型描述的问题都可以用它来解码。

     

        假如用户输入的拼音是y1,y2,...,yn,对应的汉字是x1,x2,...,xn,根据概率公式:

     

     

        输入的序列为y1,y2,...,yN,而产生他们的隐含序列是x1,x2,...,xN,可以用下图描述这个过程:

     

                                                          

     

                                                                      图1  适合维特比算法的隐含马尔科夫模型

     

         现在这个马尔可夫链的每个状态的输出是固定的,但是每个状态的值可以变化。比如输出读音"zhong"的字可以是“中”,“种”等多个字。用符号xij表示状态xi的第j个可能的值。如果把每个状态按照不同的值展开,就得到下面这个篱笆网络:

     

                                                                          

     

                                                                                             图2  篱笆网络

     

        在上图中,每个状态有3个或4个值,当然实际中他们可以有任意个值。

     

    总结算法如下:

     

    第一步,从点S出发,对于第一个状态x1的各个节点,不妨假定有n1个,计算出S到他们的距离d(S,x1i),其中x1i代表任意状态1的节点。

     

    第二步,对于第二个状态x2的所有节点,要计算出从S到它们的最短距离。对于特定的节点x2i,从S到它的路径可以经过状态1的n1中任何一个节点x1i,当然,对应的路径长度就是d(S,x2i) = d(S,x1j) + d(x1j,x2i)。由于j有n1种可能性,我们要一一计算,然后找到最小值。即

     

                                     d(S,x2i) = min d(S,x1j) + d(x1j,x2i)

     

    这样对于第二个状态的每个节点,需要进行n1次计算。假定这个状态有n2个节点,把S这些节点的距离都算一遍,就有O(n1·n2)次计算。

     

    接下来,类似的按照上诉方法从第二个状态走到第三个状态,一直走到最后一个状态,就得到了整个网络从头到尾的最短路径。复杂度为O(N·D^2)。

     

     

    参考书籍

     

    http://www.cnblogs.com/ryuham/p/4686594.html

     
     
  • 相关阅读:
    分享一个MySQL分库分表备份脚本(原)
    mysql配置以及性能优化(转)
    redis 集群配置实战
    Debian安装fail2ban来防止扫描
    关于微信小程序,一些想法
    读书笔记:《HTML5开发手册》-- 现存元素的变化
    linux下如何使用vnstat查看服务器带宽流量统计
    在iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式
    VS自定义项目模板:[4]自定义模板的分组
    VS自定义项目模板:[3]创建自定义模板
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/7766931.html
Copyright © 2020-2023  润新知