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