Двусторонний детерминированный конечный автомат — различия между версиями
Kabanov (обсуждение | вклад) |
Kabanov (обсуждение | вклад) (→Регулярность языков) |
||
Строка 31: | Строка 31: | ||
* либо никогда не перейдет. В таком случае <tex>T_x(q) = h</tex>. | * либо никогда не перейдет. В таком случае <tex>T_x(q) = h</tex>. | ||
− | Ещё раз отметим, что <tex>T_x(q)</tex> зависит только от <tex>x</tex> и <tex>q</tex> и не зависит от <tex>z</tex>. | + | Ещё раз отметим, что <tex>T_x(q)</tex> зависит только от <tex>x</tex> и <tex>q</tex> и не зависит от <tex>z</tex>. Если автомат переходит в <tex>x</tex> справа в состояние <tex>q</tex>, то тогда он появится заново в состоянии <tex>T_x(q)</tex> (или никогда не перейдет, если <tex>T_x(q) = h</tex>), потому что автомат детерминированный, и поведение его поведение полностью определяется <tex>x</tex> и состоянием, в которое он вошел. |
+ | |||
+ | Если мы запишем <tex>T_x(q)</tex> для каждого состояния <tex>q</tex> вместе с <tex>T_x(d)</tex>, это даст нам всю информацию о <tex>x</tex>, которую можно перенести через границу между <tex>x</tex> и <tex>z</tex>. Все это позволит узнать <tex>T_x(d)</tex> сразу после пересечения границы, а также посмотреть значения <tex>T_x(q)</tex>. Если <tex>y</tex> {{---}} другая строка, такая что <tex>T_y=T_x</tex>, то тогда <tex>x</tex> и <tex>y</tex> будут неразличимы. | ||
+ | |||
+ | Заметим, что у нас конечное число возможных таблиц | ||
+ | <tex>T_x : Q \cup \{d\} \to Q \cup \{h\}</tex>, | ||
+ | а именно <tex>(k+1)^{k+1}</tex>, где <tex>k</tex> {{---}} размер множество <tex>Q</tex>. Таким образом, у нас конечное количество информации о <tex>x</tex>, которое мы может перенести через границу справа от <tex>x</tex>, и которое закодировано у нас в таблицe <tex>T_x</tex>. | ||
+ | |||
+ | Отметим также, что если <tex>T_x=T_y</tex> и автомат допускает строку <tex>xz</tex>, то тогда он допускает и строку <tex>yz</tex>, потому что последовательность состояний перенесенных через границу <tex>x</tex> и <tex>z</tex> (либо <tex>y</tex> и <tex>z</tex>) в любом направлении полностью определяется таблицами <tex>T_x=T_y</tex> и строкой <tex>z</tex>. Чтобы допустить строку <tex>xz</tex>, автомат должен в какой-то момент прочитать правый маркер конца строки, находясь в допускающем состоянии <tex>t</tex>. | ||
== Пример == | == Пример == |
Версия 00:12, 10 января 2015
Определение: |
Двусторонний детерминированный конечный автомат (2ДКА) (англ. Two-way deterministic finite automaton (2DFA)) — набор из восьми элементов | , где — алфавит (англ. alphabet), — множество состояний (англ. finite set of states), — левый маркер конца строки, — правый маркер конца строки, — начальное (стартовое) состояние (англ. start state), — допускающее состояние (англ. accept state), — отвергающее состояние (англ. reject state), — функция переходов (англ. transition function).
Также должны быть удовлетворены следующие условия:
- для некоторого ,
- для некоторого ,
и
- ,
- ,
- ,
- .
Описание
Зафиксируем
, где . Пусть и . Тогда .Пусть дан 2ДКА
с состояниями. Тогда можно построить ДКА, распознающий язык тот же язык, с состояниями.Для доказательства приведем ход построения требуемого автомата
.Регулярность языков
Рассмотрим длинную входную строку
и разобьем на две подстроки . Так как у нас наш автомат может производить чтение в любом направлении, то граница и может быть пересечена несколько раз. Каждый раз, когда автомат пересекает границу справа налево (то есть из в ), он выходит из состояния . Когда пересечение происходит снова слева направо (если оно вообще происходит), то автомат выходит из состояния . Теперь, если 2ДКА перейдет в в состояние заново, то он снова может появиться в состоянии . Более того, состояние зависит исключительно от и . Обозначим такое отношение через записать . Мы может записать все такие отношения в виде конечной таблицы , где — множество состояний 2ДКА, а и будут описаны ниже.На входной строке
2ДКА начнет чтение с левого маркера конца строки. В процессе работы автомата позиция чтения будет меняться. В конце концов это позиция пересечет слева направо границу между и . В первый раз, когда это произойдет в каком-нибудь состоянии (для этого мы и выделили ). Так же автомат может никогда не выйти из . В таком случае мы запишем . Состояние дает немного информации о , но только конечное количество, поскольку существует только конечное количество вариантов для . Отметим, что зависит только от и не зависит от . Если на вход подавалась строка вместо , то в таком случае при пересечении границы из в автомат также был бы в состоянии , потому что его значение до того момента определялось только и до тех пор не все, что находится справа от границы никак не влияет.Если
, то 2ДКА должен быть в бесконечном цикле внутри и никогда не допустит или отвергнет входную строку.Предположим, что 2ДКА переходит из
в и спустя время перейти обратно в состояние . Если это происходит, то потом:- либо снова произойдет переход из в некоторое состояние . В таком случае мы определим .
- либо никогда не перейдет. В таком случае .
Ещё раз отметим, что
зависит только от и и не зависит от . Если автомат переходит в справа в состояние , то тогда он появится заново в состоянии (или никогда не перейдет, если ), потому что автомат детерминированный, и поведение его поведение полностью определяется и состоянием, в которое он вошел.Если мы запишем
для каждого состояния вместе с , это даст нам всю информацию о , которую можно перенести через границу между и . Все это позволит узнать сразу после пересечения границы, а также посмотреть значения . Если — другая строка, такая что , то тогда и будут неразличимы.Заметим, что у нас конечное число возможных таблиц
, а именно , где — размер множество . Таким образом, у нас конечное количество информации о , которое мы может перенести через границу справа от , и которое закодировано у нас в таблицe .Отметим также, что если
и автомат допускает строку , то тогда он допускает и строку , потому что последовательность состояний перенесенных через границу и (либо и ) в любом направлении полностью определяется таблицами и строкой . Чтобы допустить строку , автомат должен в какой-то момент прочитать правый маркер конца строки, находясь в допускающем состоянии .Пример
Рассмотрим следующий язык
при .Он может быть легко распознан с помощью следующего недетерменированного конечного автомата.
Теперь построим на его основе ДКА. Мы можем построить автомат
, который запоминает последние входных символов. Следовательно, когда мы находимся с состоянии, соответствующему подстроке , и читаем очередной символ , то мы переходим в состояние, которому уже будет соответствовать подстрока . Однако, в случае автомат переходит в допускающее состояние, где в цикле может переходить на любому символу. Следует отметить, что такая стратегия строит ДКА c состояниями. Ниже представлен автомат , который распознает язык .Покажем, что построенные таким образом автоматы будут минимальными.
- Каждые две попарно различных строки и длины различимы. Чтобы доказать это, достаточно рассмотреть строку , где — самая левая позиция символа, в которой начинают различаться строки и , и проверить, что ровно одна строка или принадлежит .
- Каждая строка длины не принадлежит и, следовательно, различима от строки , которая принадлежит .
- Таким образом, строк в являются попарно различимыми для . Как следствие, — минимальное количество состояний для ДКА, который способен распознать язык .