<?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=AlexOsikov</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=AlexOsikov"/>
		<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/AlexOsikov"/>
		<updated>2026-04-15T10:14:52Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B4%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82&amp;diff=80971</id>
		<title>Двусторонний детерминированный конечный автомат</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%94%D0%B2%D1%83%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9_%D0%B4%D0%B5%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D0%B9_%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82&amp;diff=80971"/>
				<updated>2021-06-08T23:13:40Z</updated>
		
		<summary type="html">&lt;p&gt;AlexOsikov: Исправлена ошибка в окончании слова&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=&lt;br /&gt;
'''Двусторонний детерминированный конечный автомат (2ДКА)''' (англ. ''Two-way deterministic finite automaton (2DFA)'') {{---}} набор из восьми элементов &amp;lt;tex&amp;gt;M = \langle \Sigma , Q, L, R, s, t, r, \delta \rangle&amp;lt;/tex&amp;gt;, где&lt;br /&gt;
* &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt; {{---}} алфавит,&lt;br /&gt;
* &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний,&lt;br /&gt;
* &amp;lt;tex&amp;gt;L \notin \Sigma&amp;lt;/tex&amp;gt; {{---}} левый маркер конца строки (англ. ''left endmarker''),&lt;br /&gt;
* &amp;lt;tex&amp;gt;R \notin \Sigma&amp;lt;/tex&amp;gt; {{---}} правый маркер конца строки (англ. ''right endmarker''),&lt;br /&gt;
* &amp;lt;tex&amp;gt;s \in Q&amp;lt;/tex&amp;gt; — начальное (стартовое) состояние,&lt;br /&gt;
* &amp;lt;tex&amp;gt;t \in Q&amp;lt;/tex&amp;gt; {{---}} допускающее состояние,&lt;br /&gt;
* &amp;lt;tex&amp;gt;r \in Q&amp;lt;/tex&amp;gt; — отвергающее состояние,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta : Q \times \{\Sigma \cup \{L, R\}\} \to Q \times \{left, right\}&amp;lt;/tex&amp;gt; {{---}} функция переходов.&lt;br /&gt;
}}&lt;br /&gt;
Также должны быть удовлетворены следующие условия:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\forall q \in Q&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta(q, L) = (u, right)&amp;lt;/tex&amp;gt; для некоторого &amp;lt;tex&amp;gt;u \in Q&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta(q, R) = (v, left)&amp;lt;/tex&amp;gt; для некоторого &amp;lt;tex&amp;gt;v \in Q&amp;lt;/tex&amp;gt;,&lt;br /&gt;
и &amp;lt;tex&amp;gt;\forall b \in \Sigma \cup \{L\}&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta(t, b) = (t, right)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta(r, b) = (r, right)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta(t, R) = (t, left)&amp;lt;/tex&amp;gt;,&lt;br /&gt;
* &amp;lt;tex&amp;gt;\delta(r, R) = (r, left)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Регулярность языка ==&lt;br /&gt;
{{Теорема&lt;br /&gt;
|statement=Классы языков ДКА и 2ДКА совпадают.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим длинную входную строку &amp;lt;tex&amp;gt;w_1&amp;lt;/tex&amp;gt; и разобьем на две подстроки &amp;lt;tex&amp;gt;w_1=xz&amp;lt;/tex&amp;gt;. Будем считать, что &amp;lt;tex&amp;gt;w_1 = a_1 a_2 a_3 \dots a_n&amp;lt;/tex&amp;gt;. Пусть &amp;lt;tex&amp;gt;a_0 = L&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;a_{n+1}=R&amp;lt;/tex&amp;gt;. Так как у нас наш автомат может производить чтение в любом направлении, то граница &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; может быть пересечена несколько раз. Каждый раз, когда автомат пересекает границу справа налево (то есть из &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;), он выходит из &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; в состояние &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Когда пересечение происходит снова слева направо (если оно вообще происходит), то автомат выходит из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в состояние &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Теперь, если 2ДКА перейдет в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в состояние &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; заново, то он снова может появиться в состоянии &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. Более того, состояние &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt; зависит исключительно от &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. Обозначим такое отношение через &amp;lt;tex&amp;gt;T_x(q) = p&amp;lt;/tex&amp;gt;. Мы может записать все такие отношения в виде конечной таблицы &amp;lt;tex&amp;gt;T_x : Q \cup \{d\} \to Q \cup \{h\}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; {{---}} множество состояний 2ДКА, а &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;h&amp;lt;/tex&amp;gt; будут описаны ниже.&lt;br /&gt;
&lt;br /&gt;
На входной строке &amp;lt;tex&amp;gt;xz&amp;lt;/tex&amp;gt; 2ДКА начнет чтение с левого маркера конца строки. В процессе работы автомата позиция чтения будет меняться. В конце концов это позиция пересечет слева направо границу между &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;. В первый раз это произойдет в каком-нибудь состоянии, которое будем называть &amp;lt;tex&amp;gt;T_x(d)&amp;lt;/tex&amp;gt; (для этого мы и выделили &amp;lt;tex&amp;gt;d&amp;lt;/tex&amp;gt;). Так же автомат может никогда не выйти из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;. В таком случае мы запишем &amp;lt;tex&amp;gt;T_x(d) = h&amp;lt;/tex&amp;gt;. Состояние &amp;lt;tex&amp;gt;T_x(d)&amp;lt;/tex&amp;gt; дает немного информации о &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, но только конечное количество, поскольку существует только конечное количество вариантов для &amp;lt;tex&amp;gt;T_x(d)&amp;lt;/tex&amp;gt;. Отметим, что &amp;lt;tex&amp;gt;T_x(d)&amp;lt;/tex&amp;gt; зависит только от &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и не зависит от &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;. Если на вход подавалась бы строка &amp;lt;tex&amp;gt;xw&amp;lt;/tex&amp;gt; вместо &amp;lt;tex&amp;gt;xz&amp;lt;/tex&amp;gt;, то в таком случае при пересечении границы из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; автомат также был бы в состоянии &amp;lt;tex&amp;gt;T_x(d)&amp;lt;/tex&amp;gt;, потому что его значение до того момента определялось только &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и до тех пор все, что находится справа от границы никак не влияет.&lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;tex&amp;gt;T_x(d) = h&amp;lt;/tex&amp;gt;, то 2ДКА в бесконечном цикле внутри &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, и он никогда не допустит и не отвергнет входную строку.&lt;br /&gt;
&lt;br /&gt;
Предположим, что 2ДКА переходит из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; и спустя время переходит обратно в состояние &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;. Если это происходит, то потом:&lt;br /&gt;
* либо снова произойдет переход из &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; в некоторое состояние &amp;lt;tex&amp;gt;p&amp;lt;/tex&amp;gt;. В таком случае мы определим &amp;lt;tex&amp;gt;T_x(q)=p&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* либо никогда не перейдет. В таком случае &amp;lt;tex&amp;gt;T_x(q) = h&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ещё раз отметим, что &amp;lt;tex&amp;gt;T_x(q)&amp;lt;/tex&amp;gt; зависит только от &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; и не зависит от &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;. Если автомат переходит в &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; справа в состояние &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt;, то тогда он появится заново в состоянии &amp;lt;tex&amp;gt;T_x(q)&amp;lt;/tex&amp;gt; (или никогда не перейдет, если &amp;lt;tex&amp;gt;T_x(q) = h&amp;lt;/tex&amp;gt;), потому что автомат детерминированный, и его поведение полностью определяется &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и состоянием, в которое он вошел.&lt;br /&gt;
&lt;br /&gt;
Если мы запишем &amp;lt;tex&amp;gt;T_x(q)&amp;lt;/tex&amp;gt; для каждого состояния &amp;lt;tex&amp;gt;q&amp;lt;/tex&amp;gt; вместе с &amp;lt;tex&amp;gt;T_x(d)&amp;lt;/tex&amp;gt;, это даст нам всю информацию о &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, которую можно перенести через границу между &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;. Все это позволит узнать &amp;lt;tex&amp;gt;T_x(d)&amp;lt;/tex&amp;gt; сразу после пересечения границы, а также посмотреть значения &amp;lt;tex&amp;gt;T_x(q)&amp;lt;/tex&amp;gt;. Если &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; {{---}} другая строка, такая что &amp;lt;tex&amp;gt;T_y=T_x&amp;lt;/tex&amp;gt;, то тогда &amp;lt;tex&amp;gt;x&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;T_x : Q \cup \{d\} \to Q \cup \{h\}&amp;lt;/tex&amp;gt;,&lt;br /&gt;
а именно &amp;lt;tex&amp;gt;(k+1)^{k+1}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt; {{---}} размер множества &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt;. Таким образом, у нас конечное количество информации о &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, которое мы может перенести через границу справа от &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;, и которое закодировано у нас в таблицe &amp;lt;tex&amp;gt;T_x&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отметим также, что если &amp;lt;tex&amp;gt;T_x=T_y&amp;lt;/tex&amp;gt; и автомат допускает строку &amp;lt;tex&amp;gt;xz&amp;lt;/tex&amp;gt;, то тогда он допускает и строку &amp;lt;tex&amp;gt;yz&amp;lt;/tex&amp;gt;, потому что последовательность состояний, перенесенных через границу &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt; (либо &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;) в любом направлении, полностью определяется таблицами &amp;lt;tex&amp;gt;T_x=T_y&amp;lt;/tex&amp;gt; и строкой &amp;lt;tex&amp;gt;z&amp;lt;/tex&amp;gt;. Чтобы допустить строку &amp;lt;tex&amp;gt;xz&amp;lt;/tex&amp;gt;, автомат должен в какой-то момент прочитать правый маркер конца строки, находясь в допускающем состоянии &amp;lt;tex&amp;gt;t&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Теперь мы может использовать теорему Майхилла-Нероуда, чтобы показать, что язык &amp;lt;tex&amp;gt;L(M)&amp;lt;/tex&amp;gt; нашего автомата &amp;lt;tex&amp;gt;M&amp;lt;/tex&amp;gt; [[Регулярные_языки:_два_определения_и_их_эквивалентность|регулярный]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T_x = T_y \Rightarrow \forall z (M\ \text{accepts}\ xz \Leftrightarrow M\ \text{accepts}\ yz)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \Leftrightarrow \forall z (xz \in L(M)&amp;lt;/tex&amp;gt; &amp;lt;tex&amp;gt; \Leftrightarrow yz \in L(M)) \Leftrightarrow x \equiv_{L(M)} y&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\equiv_{L(M)}&amp;lt;/tex&amp;gt; {{---}} [[Отношение_эквивалентности|отношение эквивалентности]] на множестве слов в алфавите. Таким образом, если 2 строки имеют одинаковые таблицы, то тогда они эквивалентны отношением &amp;lt;tex&amp;gt;\equiv_{L(M)}&amp;lt;/tex&amp;gt;. Поскольку у нас только конечное число таблиц, отношение &amp;lt;tex&amp;gt;\equiv_{L(M)}&amp;lt;/tex&amp;gt; имеет только конечное количество [[Отношение_эквивалентности|классов эквивалентности]], самое большее один для каждой таблицы. Следовательно, по теореме Майхилла-Нероуда, &amp;lt;tex&amp;gt;L(M)&amp;lt;/tex&amp;gt; {{---}} регулярный язык, что согласно теореме Клини, совпадает с классом и автоматных языков, ч.т.д.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
Рассмотрим следующий язык &amp;lt;tex&amp;gt;L_n = (a+b)^∗a(a+b)^{n-1}a(a+b)^∗&amp;lt;/tex&amp;gt; при &amp;lt;tex&amp;gt;\forall n &amp;gt; 0&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Он может быть легко распознан с помощью следующего [[Недетерминированные_конечные_автоматы|недетерминированного конечного автомата]].&lt;br /&gt;
&lt;br /&gt;
[[Файл:2dfa_example_1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Теперь построим на его основе [[Детерминированные_конечные_автоматы|ДКА]]. Мы можем построить автомат &amp;lt;tex&amp;gt;A_n&amp;lt;/tex&amp;gt;, который запоминает последние &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; входных символов. Следовательно, когда мы находимся в состоянии, соответствующему подстроке &amp;lt;tex&amp;gt;\sigma_1 \sigma_2 \dots \sigma_n&amp;lt;/tex&amp;gt;, и читаем очередной символ &amp;lt;tex&amp;gt;\gamma&amp;lt;/tex&amp;gt;, то мы переходим в состояние, которому уже будет соответствовать подстрока &amp;lt;tex&amp;gt;\sigma_2 \sigma_3 \dots \sigma_n \gamma&amp;lt;/tex&amp;gt;. Однако, в случае &amp;lt;tex&amp;gt;\sigma_1 = \gamma = a&amp;lt;/tex&amp;gt; автомат переходит в допускающее состояние, где в цикле может переходить на любому символу. Следует отметить, что такая стратегия строит ДКА c &amp;lt;tex&amp;gt;2^n + 1&amp;lt;/tex&amp;gt; состояниями. Ниже представлен автомат &amp;lt;tex&amp;gt;A_3&amp;lt;/tex&amp;gt;, который распознает язык &amp;lt;tex&amp;gt;L_3&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:2dfa_example_2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Покажем, что построенные таким образом автоматы будут минимальными.&lt;br /&gt;
* Каждые две попарно различных строки &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt; длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; различимы. Чтобы доказать это, достаточно рассмотреть строку &amp;lt;tex&amp;gt;b^{i-1}a&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i : 1 \leqslant i \leqslant n&amp;lt;/tex&amp;gt; {{---}} самая левая позиция символа, в которой начинают различаться строки &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;y&amp;lt;/tex&amp;gt;, и проверить, что ровно одна строка &amp;lt;tex&amp;gt;xb^{i-1}a&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt;yb^{i-1}a&amp;lt;/tex&amp;gt; принадлежит &amp;lt;tex&amp;gt;L_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Каждая строка длины &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; не принадлежит &amp;lt;tex&amp;gt;L_n&amp;lt;/tex&amp;gt; и, следовательно, различима со строкой &amp;lt;tex&amp;gt;a^{n+1}&amp;lt;/tex&amp;gt;, которая принадлежит &amp;lt;tex&amp;gt;L_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
* Таким образом, &amp;lt;tex&amp;gt;2^n + 1&amp;lt;/tex&amp;gt; строк в &amp;lt;tex&amp;gt;\Sigma^n \cup \{a^{n+1}\}&amp;lt;/tex&amp;gt; являются попарно различимыми для &amp;lt;tex&amp;gt;L_n&amp;lt;/tex&amp;gt;. Как следствие, &amp;lt;tex&amp;gt;2^n + 1&amp;lt;/tex&amp;gt; {{---}} минимальное количество состояний для ДКА, который способен распознать язык &amp;lt;tex&amp;gt;L_n&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Чтобы определить, что строка &amp;lt;tex&amp;gt;w=c_1 \dots c_n&amp;lt;/tex&amp;gt; принадлежит языку &amp;lt;tex&amp;gt;L_n&amp;lt;/tex&amp;gt;, нужно для &amp;lt;tex&amp;gt;\forall i = 1, \dots, |w|-n&amp;lt;/tex&amp;gt; проверить, что &amp;lt;tex&amp;gt;c_i=c_{i+n}=a&amp;lt;/tex&amp;gt;. Строка будет допустимой, если условие сработает хотя бы для одного &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;. Этот алгоритм может быть просто реализован с помощью 2ДКА. Будем для каждого &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; двигаться на &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; позиций вперед, а потом на &amp;lt;tex&amp;gt;n-1&amp;lt;/tex&amp;gt; позиций назад до позиции &amp;lt;tex&amp;gt;i+1&amp;lt;/tex&amp;gt;. Кроме того, при движении с позиции &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; до &amp;lt;tex&amp;gt;i+n&amp;lt;/tex&amp;gt; автомат должен помнить сохраняется ли условие &amp;lt;tex&amp;gt;c_i=a&amp;lt;/tex&amp;gt;. Такой подход требует &amp;lt;tex&amp;gt;O(n)&amp;lt;/tex&amp;gt; состояний.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Локальные автоматы]]&lt;br /&gt;
* [[Теорема Клини (совпадение классов автоматных и регулярных языков)]]&lt;br /&gt;
&lt;br /&gt;
== Источники информации==&lt;br /&gt;
* [[wikipedia:Two-way_deterministic_finite_automaton|Wikipedia {{---}} Two-way deterministic finite automaton]]&lt;br /&gt;
* [[wikipedia:ru:Теорема_Майхилла_—_Нероуда|Википедия {{---}} Теорема Майхилла-Нероуда]]&lt;br /&gt;
* [http://arxiv.org/pdf/1208.2755.pdf Giovanni Pighizzini, ''Two-Way Finite Automata: Old and Recent Results'']&lt;br /&gt;
* [http://www.cs.cornell.edu/Courses/cs682/2008sp/Handouts/2DFA.pdf Cornell University, ''Two-Way Finite Automata'']&lt;br /&gt;
* [http://webcourse.cs.technion.ac.il/236807/Spring2012/ho/WCFiles/Two-way%20finite%20automata%20new.pdf Liat Peterfreund, ''Two-way finite automata &amp;amp; pebble automata'']&lt;br /&gt;
[[Категория: Теория формальных языков]]&lt;br /&gt;
[[Категория: Автоматы и регулярные языки]]&lt;br /&gt;
[[Категория: Другие автоматы]]&lt;/div&gt;</summary>
		<author><name>AlexOsikov</name></author>	</entry>

	</feed>