维特比算法详解(隐马尔科夫模型)
嗯…,在寫這個(gè)之前看了幾篇文章,寫的極其學(xué)術(shù)化,根本就看不懂嗎。。。
我個(gè)人認(rèn)為寫文章就是應(yīng)該寫的通俗易懂才好,讓別人也能學(xué)會(huì),能理解到你想表達(dá)的東西。
維特比算法說(shuō)白了就是動(dòng)態(tài)規(guī)劃實(shí)現(xiàn)最短路徑,就是說(shuō)只要知道“動(dòng)態(tài)規(guī)劃可以降低復(fù)雜度”這一點(diǎn)就能輕松理解維特比算法。
維特比算法是一個(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)漢字、分詞等?!稊?shù)學(xué)之美》
籬笆網(wǎng)絡(luò)有向圖的特點(diǎn)是同一列節(jié)點(diǎn)有多個(gè),并且和上一列節(jié)點(diǎn)交錯(cuò)地連接起來(lái)。同一列節(jié)點(diǎn)代表同一個(gè)時(shí)間點(diǎn)上不同的狀態(tài)的并列,大概因?yàn)檫@種一列一列整齊的節(jié)點(diǎn)和交錯(cuò)的邊很像籬笆而得名。
假設(shè)上圖每一列分別有n1……nn個(gè)節(jié)點(diǎn),如果不使用動(dòng)態(tài)的話,那么計(jì)算復(fù)雜度就是O(n1*n2……nn)。
維特比算法的精髓就是,既然知道到第i列所有節(jié)點(diǎn)Xi{j=123…}的最短路徑,那么到第i+1列節(jié)點(diǎn)的最短路徑就等于到第i列j個(gè)節(jié)點(diǎn)的最短路徑+第i列j個(gè)節(jié)點(diǎn)到第i+1列各個(gè)節(jié)點(diǎn)的距離的最小值,可應(yīng)用于分詞。
這是一句大白話,所謂中文偽碼。
分析一下復(fù)雜度,假設(shè)整個(gè)籬笆有向圖中每一列節(jié)點(diǎn)最多有D個(gè)(也就是圖的寬度為D),并且圖一共有N列,那么,每次計(jì)算至多計(jì)算D*D次(從i列的D個(gè)節(jié)點(diǎn)中挑一個(gè)計(jì)算到i+1列D個(gè)節(jié)點(diǎn)的距離)。至多計(jì)算N次。那么復(fù)雜度驟減為O(ND2),遠(yuǎn)遠(yuǎn)小于窮舉O(DN)。
開(kāi)箱即用的維特比算法代碼,可參考《通用維特比算法的Java實(shí)現(xiàn)》
總結(jié)
以上是生活随笔為你收集整理的维特比算法详解(隐马尔科夫模型)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 百度 oppo 滴滴出行 面试问题总
- 下一篇: TortoiseSVN配置