简述维特比算法(Viterbi Algorithm)
維特比算法是一個特殊但應用最廣的動態規劃算法。利用動態規劃,可以解決任何一個圖中的最短路徑問題。而維特比算法是針對一個特殊的圖——籬笆網絡(Lattice)的有向圖最短路徑的問題而提出的。它之所以重要,是因為凡是使用隱含馬爾可夫模型描述的問題都可以使用它來解碼,包括今天的數字通信、語音識別、機器翻譯、拼音轉漢字、分詞等。下面用輸入法拼音轉漢字來說明。
假定用戶盲打時輸入的拼音是,對應的漢字是(為簡單起見,以字為單位來解釋維特比算法),那么隱含的狀態序列即為在輸出序列發生的條件下概率最大的那條序列:
輸入為可見序列,產生他們的隱含序列。下圖為隱含的馬爾可夫模型
這是一個相對簡單的隱含馬爾可夫鏈,沒有狀態跳躍,也沒有狀態自環。是狀態之間的轉移概率,是每個狀態的產生概率。現在,這個馬爾可夫鏈的輸出已固定,但是狀態不固定,比如拼音“zhong”為輸出,狀態可能為“中”、“種”等。我們不妨抽象一點,把表示為狀態的第j個可能的值。如果把每個狀態按照不同的值展開,可得到下面的籬笆網絡(Lattice):
上圖中每個狀態可能有3,4個值,實際上它們可以有任意個值
維特比算法的基礎可以概括為下面三點:
基于上述三點,維特比總結了如下算法:
第一步,從起點S出發,對于第一個狀態的各個結點,不妨假定有個,計算出S的距離d(S,)
第二步,這是整個算法的關鍵。對于第二個狀態的所有結點,要計算出S到它們的最短距離。我們知道,對于特定的結點,從S到它的路徑可以經過狀態1到中任何一個結點,我們需要找到這些路徑的最小值。這樣對于第二個狀態的每個結點,需要進行次乘法運算,假定這個狀態有個結點,把S到這些結點的距離都算一遍,就有次運算。
接下來,類似的從第二個狀態走到第三個狀態,一直走到最后一個狀態,就得到了整個網格從頭到尾的最短路徑。每一步狀態轉換的復雜度為。如果假定在這個隱含馬爾可夫鏈中結點最多的狀態有D個結點,也就是這個那個網格的寬度為D,那么任何一步的復雜度不超過,由于網格長度為N,所以整個維特比算法的復雜度是.
總結
以上是生活随笔為你收集整理的简述维特比算法(Viterbi Algorithm)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: ARP断网攻击与监听
- 下一篇: 有关KeyStore的问题
