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