]> git.sesse.net Git - ffmpeg/commitdiff
Quick description of the Viterbi algorithm so I do not have to repeat it
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 3 Mar 2009 15:35:20 +0000 (15:35 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 3 Mar 2009 15:35:20 +0000 (15:35 +0000)
over and over again on the ML.

Originally committed as revision 17772 to svn://svn.ffmpeg.org/ffmpeg/trunk

doc/viterbi.txt [new file with mode: 0644]

diff --git a/doc/viterbi.txt b/doc/viterbi.txt
new file mode 100644 (file)
index 0000000..d9d924f
--- /dev/null
@@ -0,0 +1,110 @@
+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
+