理解維特演算法

2021-07-27 05:10:38 字數 930 閱讀 8171

維特比演算法說白了就是動態規劃實現最短路徑,只要知道「動態規劃可以降低複雜度」這一點就能輕鬆理解維特比演算法

維特比演算法是乙個特殊但應用最廣的動態規劃演算法,利用動態規劃,可以解決任何乙個圖中的最短路徑問題。而維特比演算法是針對乙個特殊的圖——籬笆網路的有向圖(lattice )的最短路徑問題而提出的。 它之所以重要,是因為凡是使用隱含馬爾可夫模型描述的問題都可以用它來解碼,包括今天的數字通訊、語音識別、機器翻譯、拼音轉漢字、分詞等。——《數學之美》 ps 多處摘錄此書,不再贅述。

籬笆網路有向圖的特點是同一列節點有多個,並且和上一列節點交錯地連線起來。同一列節點代表同乙個時間點上不同的狀態的並列,大概因為這種一列一列整齊的節點和交錯的邊很像籬笆而得名。

籬笆網路的特點

有向

無環圖

上一層節點

只能指向下一層節點

假設上圖每一列分別有

n1……

nn個節點,如果不使用動態的話,那麼計算複雜度就是o(n1*n2……nn)。

而維特比演算法的精髓就是,既然知道到第i列所有節點xi的最短路徑,那麼到第i+1列節點的最短路徑就等於到第i列j個節點的最短路徑+第i列j個節點到第i+1列各個節點的距離的最小值。

這是一句大白話,所謂中文偽碼。

分析一下複雜度,假設整個籬笆有向圖中每一列節點最多有d個(也就是圖的寬度為d),並且圖一共有n列,那麼,每次計算至多計算d*d次(從i列的d個節點中挑乙個計算到i+1列d個節點的距離)。至多計算n次。那麼複雜度驟減為o(nd2),遠遠小於窮舉o(dn)。

簡單理解viterbi 維特比演算法

viterbi演算法其實就是多步驟每步多選擇模型的最優選擇問題,其在每一步的所有選擇都儲存了前續所有步驟到當前步驟當前選擇的最小總代價 或者最大價值 以及當前代價的情況下前繼步驟的選擇。依次計算完所有步驟後,通過回溯的方法找到最優選擇路徑。符合這個模型的都可以用viterbi演算法解決。隱含的身體狀...

維特比演算法

維特比演算法在機器學習中非常重要,在求解隱馬爾科夫和條件隨機場的 問題中均用到了維特比演算法。實際上,維特比演算法不僅是很多自然語言處理的解碼演算法,也是現代數字通訊中使用最頻繁的演算法。以乙個簡單的隱馬爾科夫模型為例,n 為觀測符號,y y1,y2,y n 為隱狀態序列,要求的 問題為 y 1,y...

維特比演算法

維特比演算法主要用來解決籬笆網路,老實講我第一次聽到這個名字是發懵的,網路我是知道的,說白了就是圖 迪傑特斯拉演算法 但是,籬笆網路是值下面這種一列一列的圖,只會前面連線到後面,而且不會跳層連線,可以說是一種非常特殊且友好的圖了 正常的圖能逼死強迫症 x max xx x x x xma x x 這...