Изменения

Перейти к: навигация, поиск

Алгоритм Витерби

397 байт добавлено, 19:06, 30 марта 2018
Нет описания правки
== Псевдокод ==
Функция возвращает вектор <tex>{X}</tex> : последовательность номеров наиболее вероятных состояний, которые привели к данным наблюдениям.
'''viterbi'''(<tex>\mathtt {O}, \mathtt {S}, <tex> \pi </tex>mathtt {P} , \mathtt {Y}, \mathtt {A}, \mathtt {B}</tex>) '''for''' i <tex>\mathtt{j} = 1 </tex> '''to''' <tex>\mathtt K</tex> <tex>\mathtt{TState[i, 1] } = <tex> \pi </tex>mathtt {P[i] * B[i, Y[1]]}</tex> <tex>\mathtt{TIndex[i, 1] } = 0</tex> '''for''' <tex>\mathtt{i } = 2 </tex> '''to''' <tex>\mathtt T</tex> '''for''' <tex>\mathtt{j } = 1 </tex> '''to''' <tex>\mathtt K</tex> <tex>\mathtt{TState[j, i] } = <tex> \max_{1 \leqslant k\leqslant K} \limits </tex>(\mathtt{TState[k, i - 1] * A[k, j] * B[j, Y[i]]}) </tex> <tex>\mathtt{TIndex[j, i] } = <tex> \arg\max_{1 \leqslant k\leqslant K} \limits </tex>(\mathtt{TState[k, i - 1] * A[k, j] * B[j, Y[i]]}) </tex> ''<font color=green>//функция arg max() ищет максимум выражения в скобках и возвращает аргумент // (в нашем случае <tex>\mathtt{k}</tex>), при котором достигается этот максимум</font>'' <tex>\mathtt{X[T] } = <tex> \arg\max_{1 \leqslant k\leqslant K} \limits </tex>(\mathtt{TState[k, T]}) </tex> '''for''' <tex>\mathtt{i } = \mathtt{T }</tex> '''downto''' <tex>2</tex> <tex>\mathtt{X[i - 1] } = \mathtt{TIndex[X[i], i]}</tex> '''return''' <tex>\mathtt{X}</tex>
Таким образом, алгоритму требуется <tex> O(T\times\left|{K}\right|^2)</tex> времени.
62
правки

Навигация