mirror of https://github.com/FFmpeg/FFmpeg.git
The description has been moved to the FFmpeg wiki: https://trac.ffmpeg.org/wiki/ViterbiAlgorithm Signed-off-by: Timothy Gu <timothygu99@gmail.com>pull/48/head
parent
8cdf4e0823
commit
a7f35afb56
1 changed files with 0 additions and 109 deletions
@ -1,109 +0,0 @@ |
||||
This is a quick description of the viterbi aka dynamic programing |
||||
algorthm. |
||||
|
||||
Its reason for existence is that wikipedia has become very poor on |
||||
describing algorithms in a way that makes it useable for understanding |
||||
them or anything else actually. It tends now to describe the very same |
||||
algorithm under 50 different names and pages with few understandable |
||||
by even people who fully understand the algorithm and the theory behind. |
||||
|
||||
Problem description: (that is what it can solve) |
||||
assume we have a 2d table, or you could call it a graph or matrix if you |
||||
prefer |
||||
|
||||
O O O O O O O |
||||
|
||||
O O O O O O O |
||||
|
||||
O O O O O O O |
||||
|
||||
O O O O O O O |
||||
|
||||
|
||||
That table has edges connecting points from each column to the next column |
||||
and each edge has a score like: (only some edge and scores shown to keep it |
||||
readable) |
||||
|
||||
|
||||
O--5--O-----O-----O-----O-----O |
||||
2 / 7 / \ / \ / \ / |
||||
\ / \ / \ / \ / \ / |
||||
O7-/--O--/--O--/--O--/--O--/--O |
||||
\/ \/ 1/ \/ \/ \/ \/ \/ \/ \/ |
||||
/\ /\ 2\ /\ /\ /\ /\ /\ /\ /\ |
||||
O3-/--O--/--O--/--O--/--O--/--O |
||||
/ \ / \ / \ / \ / \ |
||||
1 \ 9 \ / \ / \ / \ |
||||
O--2--O--1--O--5--O--3--O--8--O |
||||
|
||||
|
||||
|
||||
Our goal is to find a path from left to right through it which |
||||
minimizes the sum of the score of all edges. |
||||
(and of course left/right is just a convention here it could be top down too) |
||||
Similarly the minimum could be the maximum by just fliping the sign, |
||||
Example of a path with scores: |
||||
|
||||
O O O O O O O |
||||
|
||||
>---O. O O .O-2-O O O |
||||
5. .7 . |
||||
O O-1-O O O 8 O O |
||||
. |
||||
O O O O O O-1-O---> (sum here is 24) |
||||
|
||||
|
||||
The viterbi algorthm now solves this simply column by column |
||||
For the previous column each point has a best path and a associated |
||||
score: |
||||
|
||||
O-----5 O |
||||
\ |
||||
\ |
||||
O \ 1 O |
||||
\/ |
||||
/\ |
||||
O / 2 O |
||||
/ |
||||
/ |
||||
O-----2 O |
||||
|
||||
|
||||
To move one column forward we just need to find the best path and associated |
||||
scores for the next column |
||||
here are some edges we could choose from: |
||||
|
||||
|
||||
O-----5--3--O |
||||
\ \8 |
||||
\ \ |
||||
O \ 1--9--O |
||||
\/ \3 |
||||
/\ \ |
||||
O / 2--1--O |
||||
/ \2 |
||||
/ \ |
||||
O-----2--4--O |
||||
|
||||
Finding the new best paths and scores for each point of our new column is |
||||
trivial given we know the previous column best paths and scores: |
||||
|
||||
O-----0-----8 |
||||
\ |
||||
\ |
||||
O \ 0----10 |
||||
\/ |
||||
/\ |
||||
O / 0-----3 |
||||
/ \ |
||||
/ \ |
||||
O 0 4 |
||||
|
||||
|
||||
the viterbi algorthm continues exactly like this column for column until the |
||||
end and then just picks the path with the best score (above that would be the |
||||
one with score 3) |
||||
|
||||
|
||||
Author: Michael niedermayer |
||||
Copyright LGPL |
Loading…
Reference in new issue