- Viterbi algorithm is a dynamic programming approach to find the most probable sequence of hidden states given the observed data, as modeled by a HMM.
- Without dynamic programming, it becomes an exponential problem as there are exponential number of possible sequences for a given observation(How – explained in answer below).
- Let the transition probabilities(state transition) be denoted by , and the output probabilities be denoted by
- Here let us call the most probable sequence of hidden states of length that finishes in the state and generates the output and be the probability of this sequence which can be computed from the equation below
- Say we have states , observation sequence of length , then we need to find and and maximum in each iteration is obtained by checking for all states . This leave us with a of
**Space complexity:**Next question could be what is the extra storage or memory complexity of Viterbi Algorithm –With DP, we always maintain an extra array to store the intermediate computations for reuse to avoid re-work. Here, we maintain a matrix which is in size. We also maintain argmax in every iteration which is also of same size. Hence the memory complexity is

*Hint: To answer such a question one must either remember the exact answer or the algorithm itself. In general, to compute complexity one can check how many times we have terms like “*for all*” .