Преобразования автоматов в автоматы без потери информации
Рассмотрим проверочный граф автомата
, где
- регулярное выражение события
. Выделим все слова
из
, такие, что соответствующие им пути в графе
содержат выделенные дуги, исходящие из вершины типа
, а также дуги, заходящие в вершину такого же типа. Множество всех таких путей обозначим через
. Легко видеть, что множество всех путей
и множество выделенных дуг
принадлежат
: все пути из
, не совпадающие с путями из
и
, содержат их в качестве отрезков.
Отсюда следует, что если в графе отсутствуют пути из множеств
и
, то и пути из множества
в нем также отсутствуют. Таким образом, из теоремы 5.2 вытекает, что для преобразования автомата
в
-БПИ-автомат достаточно из графа
удалить все пути множества
и все выделенные дуги множества
.
Перейдем к рассмотрению алгоритма, позволяющего по множествам и
строить такое множество
дуг графа
, чтобы после их удаления из этого графа в нем отсутствовали все пути из
и все дуги из
.
Алгоритм выбора множества дуг можно сформулировать следующим образом.
Полагаем , где
- множество выделенных дуг графа
, каждая из которых соединяет вершины типа
. Если
, то перейти к пункту 2, иначе к пункту 4.
- Из множества
выделяем множество
всех дуг, имеющих максимальный вес.
- Добавляем в
одну дугу из
, выбранную произвольно.
- Из графа
удаляем дуги, входящие в множество
. Вновь полученный граф обозначаем также
.
- Из множества
удаляем пути, содержащие дуги из множества
, построенного на предыдущем этапе. Если
, то построение
окончено, иначе переходим к пункту 6.
- Произво
Пусть получено по описанному алгоритму, причем дуги в
занумерованы в том порядке, в котором они присоединялись к
в соответствии с алгоритмом. Пусть
- подмножество всех путей из множества
, проходящих через дугу
.
Лемма 5.1. Для любых справедливо соотношение
.
Доказательство. Для определенности положим, что . На основании пункта 4 алгоритма из
удаляется дуга
, что влечет за собой удаление из этого же графа и всех путей из множества
. Это же множество путей удаляется из
на основании пункта 5 алгоритма. Присоединение дуги
к множеству
на основании пункта 2 алгоритма возможно лишь в том случае, если в множестве
, полученном на предыдущем этапе, есть по крайней мере один путь, проходящий через эту дугу. Поскольку
после проведенной корректировки заведомо не содержит
, отсюда следует, что
. Обратное соотношение
тоже справедливо, так как в противном случае после удаления дуги
из графа
все пути множества
были также удалены, что противоречит предположению о наличии дуги
во множестве
.
В качестве следствия леммы получаем, что для любого , справедливы соотношения
и
.
Отметим следующий очевидный факт: множество выделенных дуг заведомо принадлежит решению задачи 1 независимо от того, получено ли оно по описанному алгоритму или иным способом.
Из изложенного выше следует, что по предложенному алгоритму строится множество , не являющееся избыточным в том смысле, что на каждом его шаге из графа
удаляется непустое множество путей, принадлежащих
. Если
, то мощность
минимальна и
строится за один шаг.
Рассмотренная нами задача построения множества дуг эквивалентна задаче о покрытии, или задаче построения минимальной формы булевой функции. Если проводить аналогию с последней задачей, то построенное с помощью предложенного алгоритма множество
соответствует в силу леммы 5.1 приведенной системе простых импликант. Таким образом, вопрос о близости минимального по мощности решения задачи 1 и решения, построенного с помощью предложенного алгоритма, эквивалентен вопросу о близости приведенной системы простых импликант к минимальной приведенной системе импликант (минимальной форме булевой функции). Продолжая аналогию, заметим, что из построенного по предложенному алгоритму множества
некоторые дуги можно удалять способом, подобным способу удаления импликант из приведенной системы [21].
Проиллюстрируем предложенный способ преобразования автомата в -БПИ-автомат на примере.
Рассмотрим автомат , заданный табл. 5.1. Пусть
.
s\x | 0 | 1 | 2 | 3 |
---|---|---|---|---|
1 | 2, a | 3, a | 2, a | 1, c |
2 | 4, a | 1, b | 2, c | 3, c |
3 | 2, b | 4, a | 3, d | 2, f |
4 | 3, a | 2, b | 4, f | 3, d |
Вследствие замечания к теореме 5.1 в рассматриваемом примере нам достаточно ограничиться при замене итерации по изложенному выше способу значением , равным 8, так как в выражении
до и после итерации
стоит символ
и с учетом этого длина слов в
будет доведена до 10 (значение
при
) и при этом значении
. В результате преобразования
получим следующее выражение:
![R'=a^2\cup aba^2\cup aba^3\cup aba^4\cup aba^5\cup aba^6\cup aba^7\cup aba^8\cup \\
\cup a(ab)^2a\cup a(ba)^2a^2\cup a(ba)^2a^3\cup a(ba)^2a^4\cup a(ba)^2a^5\cup \\
\cup a(ba^2)^2\cup aba^2ba^3\cup aba^2ba^4\cup aba^2ba^5\cup aba^3ba^2\cup aba^3ba^3\cup \\
\cup aba^3ba^4\cup aba^4ba^2\cup aba^4ba^3\cup aba^5ba^2\cup a(ba)^3a\cup a(ba)^3a^2\cup \\
\cup a(ba)^3a^3\cup a(ba)^2aba^2\cup (ab)^2a^2ba^3\cup (ab)^2a^3ba^2\cup aba^2(ba)^2a\cup \\
\cup aba^2(ba)^2a^2\cup aba^2(ba^2)^2\cup aba^3(ba)^2a](/sites/default/files/tex_cache/81de849f8666acaf4f30ccda298e6737.png)
Граф , или, что то же самое,
, имеет вид, изображенный на рис. 5.2, где двойные стрелки соответствуют выделенным дугам.
Множество путей в нашем случае таково:
![1,1 \stackrel{0,1,a}{\Longrightarrow} 2,3 \stackrel{0,1,a}{\Longrightarrow} 4,4;](/sites/default/files/tex_cache/3f063dabeb736a48103d1ccf9f1f5139.png)
![1,1 \stackrel{1,2,a}{\Longrightarrow} 2,3 \stackrel{0,1,a}{\Longrightarrow} 4,4;](/sites/default/files/tex_cache/1df030fd38dfaa76dc5faf50f36d03b9.png)
![1,1 \stackrel{0,1,a}{\Longrightarrow} 2,3 \stackrel{0,1,b}{\Longrightarrow} 1,2 \stackrel{1,0,a}{\Longrightarrow} 3,4 \stackrel{0,1,b}{\Longrightarrow} 2,2;](/sites/default/files/tex_cache/8664324edefba191931d2c624f1e2be6.png)
![1,1 \stackrel{1,2,a}{\Longrightarrow} 2,3 \stackrel{1,0,b}{\Longrightarrow} 1,2 \stackrel{0,1,a}{\Longrightarrow} 3,4 \stackrel{0,1,b}{\Longrightarrow} 2,2](/sites/default/files/tex_cache/f09dcdbb4035e81e4484b15b22821827.png)
![1,1 \stackrel{0,1,a}{\Longrightarrow} 2,3 \stackrel{0,1,b}{\Longrightarrow} 1,2 \xrightarrow {0,0,a} 2,4 \xrightarrow {0,0,a} 3,4 \stackrel{0,1,b}{\Longrightarrow} 2,2](/sites/default/files/tex_cache/2054875aaf13fdb90346b71619f90fc0.png)
![1,1 \stackrel{1,2,a}{\Longrightarrow} 2,3 \stackrel{1,0,b}{\Longrightarrow} 1,2 \xrightarrow {0,0,a} 2,4 \xrightarrow {0,0,a} 3,4 \stackrel{0,1,b}{\Longrightarrow}2,2;](/sites/default/files/tex_cache/b03569c10efbb64f647ab359e1d39cbd.png)
![1,1 \stackrel{0,1,a}{\Longrightarrow} 2,3 \stackrel{1,0,b}{\Longrightarrow} 1,2 \stackrel{1,0,a}{\Longrightarrow} 3,4 \stackrel{0,1,a}{\Longrightarrow} 3,4 \stackrel{0,1,b}{\Longrightarrow}2,2;](/sites/default/files/tex_cache/b3eebf3d6512f67ed69c209cb4ee6f56.png)
![1,1 \stackrel{1,2,a}{\Longrightarrow} 2,3 \stackrel{1,0,b}{\Longrightarrow} 1,2 \stackrel{1,0,a}{\Longrightarrow}3,4 \stackrel{0,1,a}{\Longrightarrow}3,4 \stackrel{0,1,b}{\Longrightarrow}2,2;](/sites/default/files/tex_cache/a94e9793a304ea912034962d655dbb7c.png)
![1,1 \stackrel{0,1,a}{\Longrightarrow} 2,3 \stackrel{0,1,b}{\Longrightarrow} 1,2 \stackrel{0,2,a}{\Longrightarrow}2,4 \xrightarrow {0,0,a} 3,4 \stackrel{0,1,b}{\Longrightarrow}2,2;](/sites/default/files/tex_cache/6e1d34dcb842e5d74b445e2cac7d385f.png)
![1,1 \stackrel{1,2,a}{\Longrightarrow} 2,3 \stackrel{1,0,b}{\Longrightarrow} 1,2 \stackrel{0,2,a}{\Longrightarrow}2,4 \xrightarrow {0,0,a} 3,4 \stackrel{0,1,b}{\Longrightarrow}2,2.](/sites/default/files/tex_cache/6fb27974dd8525242306644bc907ac53.png)
В соответствии с предложенным выше алгоритмом выбора на первом шаге получаем
.
Далее, максимальный вес, равный 8, в множестве имеют дуги
и
; тогда полагаем
, выбрав первую из названных дуг. После корректировки в множестве
остается два первых пути из списка, приведенного выше. Поскольку вес дуги
максимален (он равен 2), то добавляем ее в
и на этом процесс построения
заканчивается, так как множество
после повторной корректировки пустое. Таким образом,
Используя алгоритм из [23], получаем следующее разбиение множества
:
![\Pi = \overline {(1,0), (1,1),(1,3),(2,0),(2,1),(2,2),(2,3),(3,0),(3,2),(3,3),(4,0),(4,2),(4,3)};\\
\overline {(1,2),(3,1),(4,1)}](/sites/default/files/tex_cache/5715e41dbc79810b634128c614e80722.png)
Это разбиение имеет два класса, следовательно, для кодирования символов классов достаточно, например, одной двоичной переменной. Пусть и
, тогда автомат с контрольными точками будет представлен в табл. 5.2.
s\x | 0 | 1 | 2 | 3 |
---|---|---|---|---|
1 | 2, a 0 | 3, a 0 | 2, a 1 | 1, c 0 |
2 | 4, a 0 | 1, b 0 | 2, c 0 | 3, c 0 |
3 | 2, b 0 | 4, a 1 | 3, d 0 | 2, f 0 |
4 | 3, a 0 | 2, b 1 | 4, f 0 | 3, d 0 |
Отметим, что идея изложенного метода преобразования автоматов очевидным образом может быть использована и для решения следующей задачи: для заданного регулярного множества непустых входных слов вывести выходные контрольные точки в автомате таким образом, чтобы каждое слово из
стало диагностическим для автомата с контрольными точками.
Предложенный метод решения задачи 1 в качестве одного из этапов содержит построение путей множества , выполняемого визуально по проверочному графу. Такое построение становится тем более затруднительным, чем большее число состояний имеет данный автомат. В связи с этим рассмотрим формализованный метод построения такого множества
дуг автомата
, что удаление их превращает автомат
в
-БПИ-автомат. В основу метода положим представление автомата в виде матрицы переходов и выполнение операций над этой матрицей, описанных, например, в работе [18].
Напомним, что для автомата , имеющего
состояний, матрица переходов состоит из
строк и
столбцов и обозначается
. Пусть
- множество состояний автомата
и пусть
обозначает дугу графа автомата
, направленную от
к
под воздействием входного сигнала
с выдачей выходного сигнала
. Элемент
матрицы
, т. е. содержимое клетки, расположенной на пересечении
-й строки и
-го столбца, содержит все дуги, ведущие из вершины
в вершину
. Если такие дуги отсутствуют, то элемент
полагается равным нулю.
Условимся считать, что обозначение -го состояния
приписано
-й строке и
-му столбцу матрицы переходов.
В работе [18] введена операция возведения в степень матрицы переходов и доказано, что элемент
матрицы
, является множеством всех путей длины
, ведущих из состояния
в состояние
автомата
. Этот факт и является основой для формализованного нахождения тех путей в графе автомата
, которые являются причиной потери информации.