annotate ffmpeg/doc/viterbi.txt @ 13:844d341cf643 tip

Back up before ISMIR
author Yading Song <yading.song@eecs.qmul.ac.uk>
date Thu, 31 Oct 2013 13:17:06 +0000
parents 6840f77b83aa
children
rev   line source
yading@10 1 This is a quick description of the viterbi aka dynamic programing
yading@10 2 algorthm.
yading@10 3
yading@10 4 Its reason for existence is that wikipedia has become very poor on
yading@10 5 describing algorithms in a way that makes it useable for understanding
yading@10 6 them or anything else actually. It tends now to describe the very same
yading@10 7 algorithm under 50 different names and pages with few understandable
yading@10 8 by even people who fully understand the algorithm and the theory behind.
yading@10 9
yading@10 10 Problem description: (that is what it can solve)
yading@10 11 assume we have a 2d table, or you could call it a graph or matrix if you
yading@10 12 prefer
yading@10 13
yading@10 14 O O O O O O O
yading@10 15
yading@10 16 O O O O O O O
yading@10 17
yading@10 18 O O O O O O O
yading@10 19
yading@10 20 O O O O O O O
yading@10 21
yading@10 22
yading@10 23 That table has edges connecting points from each column to the next column
yading@10 24 and each edge has a score like: (only some edge and scores shown to keep it
yading@10 25 readable)
yading@10 26
yading@10 27
yading@10 28 O--5--O-----O-----O-----O-----O
yading@10 29 2 / 7 / \ / \ / \ /
yading@10 30 \ / \ / \ / \ / \ /
yading@10 31 O7-/--O--/--O--/--O--/--O--/--O
yading@10 32 \/ \/ 1/ \/ \/ \/ \/ \/ \/ \/
yading@10 33 /\ /\ 2\ /\ /\ /\ /\ /\ /\ /\
yading@10 34 O3-/--O--/--O--/--O--/--O--/--O
yading@10 35 / \ / \ / \ / \ / \
yading@10 36 1 \ 9 \ / \ / \ / \
yading@10 37 O--2--O--1--O--5--O--3--O--8--O
yading@10 38
yading@10 39
yading@10 40
yading@10 41 Our goal is to find a path from left to right through it which
yading@10 42 minimizes the sum of the score of all edges.
yading@10 43 (and of course left/right is just a convention here it could be top down too)
yading@10 44 Similarly the minimum could be the maximum by just fliping the sign,
yading@10 45 Example of a path with scores:
yading@10 46
yading@10 47 O O O O O O O
yading@10 48
yading@10 49 >---O. O O .O-2-O O O
yading@10 50 5. .7 .
yading@10 51 O O-1-O O O 8 O O
yading@10 52 .
yading@10 53 O O O O O O-1-O---> (sum here is 24)
yading@10 54
yading@10 55
yading@10 56 The viterbi algorthm now solves this simply column by column
yading@10 57 For the previous column each point has a best path and a associated
yading@10 58 score:
yading@10 59
yading@10 60 O-----5 O
yading@10 61 \
yading@10 62 \
yading@10 63 O \ 1 O
yading@10 64 \/
yading@10 65 /\
yading@10 66 O / 2 O
yading@10 67 /
yading@10 68 /
yading@10 69 O-----2 O
yading@10 70
yading@10 71
yading@10 72 To move one column forward we just need to find the best path and associated
yading@10 73 scores for the next column
yading@10 74 here are some edges we could choose from:
yading@10 75
yading@10 76
yading@10 77 O-----5--3--O
yading@10 78 \ \8
yading@10 79 \ \
yading@10 80 O \ 1--9--O
yading@10 81 \/ \3
yading@10 82 /\ \
yading@10 83 O / 2--1--O
yading@10 84 / \2
yading@10 85 / \
yading@10 86 O-----2--4--O
yading@10 87
yading@10 88 Finding the new best paths and scores for each point of our new column is
yading@10 89 trivial given we know the previous column best paths and scores:
yading@10 90
yading@10 91 O-----0-----8
yading@10 92 \
yading@10 93 \
yading@10 94 O \ 0----10
yading@10 95 \/
yading@10 96 /\
yading@10 97 O / 0-----3
yading@10 98 / \
yading@10 99 / \
yading@10 100 O 0 4
yading@10 101
yading@10 102
yading@10 103 the viterbi algorthm continues exactly like this column for column until the
yading@10 104 end and then just picks the path with the best score (above that would be the
yading@10 105 one with score 3)
yading@10 106
yading@10 107
yading@10 108 Author: Michael niedermayer
yading@10 109 Copyright LGPL