<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.62.102.23&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=178.62.102.23&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/178.62.102.23"/>
		<updated>2026-06-13T01:46:47Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%92%D0%B8%D1%82%D0%B5%D1%80%D0%B1%D0%B8&amp;diff=61437</id>
		<title>Алгоритм Витерби</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%92%D0%B8%D1%82%D0%B5%D1%80%D0%B1%D0%B8&amp;diff=61437"/>
				<updated>2017-06-09T19:47:33Z</updated>
		
		<summary type="html">&lt;p&gt;178.62.102.23: /* Псевдокод */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== История ==&lt;br /&gt;
Алгоритм Витерби был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия.&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний [[Скрытые Марковские модели|скрытой Марковской модели]] на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби.&lt;br /&gt;
{{Определение&lt;br /&gt;
|id=def1. &lt;br /&gt;
|definition='''Путь Витерби''' {{---}} наиболее правдоподобная последовательность скрытых состояний.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Пусть задано пространство наблюдений &amp;lt;tex&amp;gt;O =\{o_1,o_2...o_N\}&amp;lt;/tex&amp;gt;, пространство состояний &amp;lt;tex&amp;gt;S =\{s_1,s_2...s_K\}&amp;lt;/tex&amp;gt;, последовательность наблюдений &amp;lt;tex&amp;gt;Y =\{y_1,y_2...y_T\}&amp;lt;/tex&amp;gt;, матрица &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; переходов из &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;-того состояния в &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ое, размером &amp;lt;tex&amp;gt;K \times K&amp;lt;/tex&amp;gt;, матрица эмиссии &amp;lt;tex&amp;gt; B &amp;lt;/tex&amp;gt; размера &amp;lt;tex&amp;gt;K \times N&amp;lt;/tex&amp;gt;, которая определяет вероятность наблюдения &amp;lt;tex&amp;gt;o_j&amp;lt;/tex&amp;gt; из состояния &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;, массив начальных вероятностей &amp;lt;tex&amp;gt;\pi&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;K&amp;lt;/tex&amp;gt;, показывающий вероятность того, что начальное состояние &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;. Путь &amp;lt;tex&amp;gt;X =\{x_1,x_2...x_T\}&amp;lt;/tex&amp;gt; {{---}} последовательность состояний, которые привели к последовательности наблюдений &amp;lt;tex&amp;gt;Y&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Алгоритм ==&lt;br /&gt;
Создадим две матрицы &amp;lt;tex&amp;gt;TState&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TIndex&amp;lt;/tex&amp;gt; размером &amp;lt;tex&amp;gt;K \times T&amp;lt;/tex&amp;gt;. Каждый элемент &amp;lt;tex&amp;gt;TState[i,j]&amp;lt;/tex&amp;gt; содержит вероятность того, что на &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt;-ом шаге мы находимся в состоянии &amp;lt;tex&amp;gt;s_i&amp;lt;/tex&amp;gt;. Каждый элемент &amp;lt;tex&amp;gt;TIndex[i,j]&amp;lt;/tex&amp;gt; содержит индекс наиболее вероятного состояния на &amp;lt;tex&amp;gt;{j-1}&amp;lt;/tex&amp;gt;-ом шаге. &lt;br /&gt;
 &lt;br /&gt;
'''Шаг 1.''' Заполним первый столбец матриц &amp;lt;tex&amp;gt;TState&amp;lt;/tex&amp;gt; на основании начального распределения, и &amp;lt;tex&amp;gt;TIndex&amp;lt;/tex&amp;gt; нулями.&lt;br /&gt;
&lt;br /&gt;
'''Шаг 2.''' Последовательно заполняем следующие столбцы матриц &amp;lt;tex&amp;gt;TState&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;TIndex&amp;lt;/tex&amp;gt;, используя матрицы вероятностей эмиссий и переходов.  &lt;br /&gt;
&lt;br /&gt;
'''Шаг 3.''' Рассматривая максимальные значения в столбцах матрицы &amp;lt;tex&amp;gt;TIndex&amp;lt;/tex&amp;gt;, начиная с последнего столбца, выдаем ответ.&lt;br /&gt;
&lt;br /&gt;
== Псевдокод ==&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  //функция возвращает вектор X {{---}} последовательность номеров наиболее вероятных состояний, которые привели к данным наблюдениям. &lt;br /&gt;
  '''viterbi'''(O, S, &amp;lt;tex&amp;gt; \pi &amp;lt;/tex&amp;gt;, Y, A, B): &lt;br /&gt;
      '''for''' i = 1..K&lt;br /&gt;
          TState[i, 1] = &amp;lt;tex&amp;gt; \pi &amp;lt;/tex&amp;gt;[i] * B[i, Y[1]]&lt;br /&gt;
          TIndex[i, 1] = 0&lt;br /&gt;
      '''for''' i = 2..T&lt;br /&gt;
          '''for''' j = 1..K&lt;br /&gt;
              TState[j, i] = &amp;lt;tex&amp;gt; \max_{1 \leqslant k\leqslant K} \limits &amp;lt;/tex&amp;gt;(TState[k, i - 1] * A[k, j] * B[j, Y[i]]) &lt;br /&gt;
              TIndex[j, i] = &amp;lt;tex&amp;gt; \arg\max_{1 \leqslant k\leqslant K} \limits &amp;lt;/tex&amp;gt;(TState[k, i - 1] * A[k, j] * B[j, Y[i]]) &lt;br /&gt;
              //функция arg max() ищет максимум выражения в скобках и возвращает аргумент (в нашем случае &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;), при котором достигается этот максимум.&lt;br /&gt;
      X[T] = &amp;lt;tex&amp;gt; \arg\max_{1 \leqslant k\leqslant K} \limits &amp;lt;/tex&amp;gt;(TState[k, T]) &lt;br /&gt;
      '''for''' i = T '''downto''' 2&lt;br /&gt;
          X[i - 1] = TIndex[X[i], i]&lt;br /&gt;
      '''return''' X&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритму требуется &amp;lt;tex&amp;gt; O(T\times\left|{K}\right|^2)&amp;lt;/tex&amp;gt; времени.&lt;br /&gt;
&lt;br /&gt;
== Применение ==&lt;br /&gt;
Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
* [[wikipedia:Viterbi_algorithm|Wikipedia {{---}} Viterbi algorithm]]&lt;br /&gt;
* [http://www.cs.sfu.ca/~oschulte/teaching/726/spring11/slides/mychapter13b.pdf Презентация]&lt;br /&gt;
&lt;br /&gt;
[[Категория: Дискретная математика и алгоритмы]]&lt;br /&gt;
[[Категория: Марковские цепи]]&lt;br /&gt;
[[Категория: Динамическое программирование]]&lt;/div&gt;</summary>
		<author><name>178.62.102.23</name></author>	</entry>

	</feed>