gfiber / vendor / opensource / ffmpeg / a08e27a935844c13e4090bbd0fd2b626cd862a2b / . / doc / viterbi.txt

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 pathes and scores for each point of our new column is | |

trivial given we know the previous column best pathes 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 | |