Опубликован: 17.02.2011 | Уровень: специалист | Доступ: платный
Лекция 5:

Преобразования автоматов в автоматы без потери информации

< Лекция 4 || Лекция 5: 123 || Лекция 6 >

Рассмотрим проверочный граф G^A(R') автомата A=(S,X,Y, \delta, \lambda ), где R - регулярное выражение события Q=y_{s \in S} \lambda_s(P). Выделим все слова p из P, такие, что соответствующие им пути в графе G^A(R') содержат выделенные дуги, исходящие из вершины типа \{s,s\}, а также дуги, заходящие в вершину такого же типа. Множество всех таких путей обозначим через M. Легко видеть, что множество всех путей C и множество выделенных дуг F принадлежат M: все пути из M, не совпадающие с путями из C и F, содержат их в качестве отрезков.

Отсюда следует, что если в графе G^A(R') отсутствуют пути из множеств C и F, то и пути из множества M в нем также отсутствуют. Таким образом, из теоремы 5.2 вытекает, что для преобразования автомата A в P -БПИ-автомат достаточно из графа G^A(R') удалить все пути множества C и все выделенные дуги множества F.

Перейдем к рассмотрению алгоритма, позволяющего по множествам C и F строить такое множество L дуг графа G^A(R'), чтобы после их удаления из этого графа в нем отсутствовали все пути из C и все дуги из F.

Алгоритм выбора множества дуг L можно сформулировать следующим образом.

Полагаем L=F, где F - множество выделенных дуг графа G^A(R'), каждая из которых соединяет вершины типа \{s,s\}. Если F= \varnothing, то перейти к пункту 2, иначе к пункту 4.

  1. Из множества C выделяем множество F_1 всех дуг, имеющих максимальный вес.
  2. Добавляем в L одну дугу из F_1, выбранную произвольно.
  3. Из графа G^A(R') удаляем дуги, входящие в множество F=  \varnothing. Вновь полученный граф обозначаем также G^A(R').
  4. Из множества C удаляем пути, содержащие дуги из множества C, построенного на предыдущем этапе. Если C=  \varnothing, то построение L окончено, иначе переходим к пункту 6.
  5. Произво

Пусть L=\{(c_1, d_1, (x_{k_1}, x_{k_1}', y_{k_1})), \dots, (c_{\nu}, d_{\nu}, (x_{k_{\nu}}, x_{k_{\nu}}', y_{k_{\nu}}))\} получено по описанному алгоритму, причем дуги в L занумерованы в том порядке, в котором они присоединялись к L в соответствии с алгоритмом. Пусть C-i - подмножество всех путей из множества C, проходящих через дугу (c_i, d_i, (x_{k_i}, x_{k_i}', y_{k_i})).

Лемма 5.1. Для любых a \ne b, 1 \le a,b \le \nu справедливо соотношение c_a \not \subset c_b .

Доказательство. Для определенности положим, что alt;b. На основании пункта 4 алгоритма из G^A(R') удаляется дуга (c_a, d_a, (x_{k_a}, x_{k_a}', y_{k_a})), что влечет за собой удаление из этого же графа и всех путей из множества C_a. Это же множество путей удаляется из C на основании пункта 5 алгоритма. Присоединение дуги (c_b, d_b, (x_{k_b, x_{k_b}', y_{k_b}})) к множеству L на основании пункта 2 алгоритма возможно лишь в том случае, если в множестве C, полученном на предыдущем этапе, есть по крайней мере один путь, проходящий через эту дугу. Поскольку C после проведенной корректировки заведомо не содержит C_a, отсюда следует, что С_a \not \subset С_b . Обратное соотношение С_b \not \subset С_a тоже справедливо, так как в противном случае после удаления дуги (c_a, d_a, (x_{k_a}, x_{k_a}', y_{k_a})) из графа G^A(R) все пути множества C_b были также удалены, что противоречит предположению о наличии дуги >(c_b, d_b, (x_{k_b}, x_{k_b}', y_{k_b})) во множестве L.

В качестве следствия леммы получаем, что для любого I, 1 \le I \le \nu, справедливы соотношения Y_{j=1}^{i-1}C_j \not \subset C_i и C_i \not \subset Y_{j=1}^{i-1}C_j.

Отметим следующий очевидный факт: множество выделенных дуг F заведомо принадлежит решению задачи 1 независимо от того, получено ли оно по описанному алгоритму или иным способом.

Из изложенного выше следует, что по предложенному алгоритму строится множество L, не являющееся избыточным в том смысле, что на каждом его шаге из графа G^A(R) удаляется непустое множество путей, принадлежащих C. Если L=F, то мощность L минимальна и L строится за один шаг.

Рассмотренная нами задача построения множества L дуг эквивалентна задаче о покрытии, или задаче построения минимальной формы булевой функции. Если проводить аналогию с последней задачей, то построенное с помощью предложенного алгоритма множество L соответствует в силу леммы 5.1 приведенной системе простых импликант. Таким образом, вопрос о близости минимального по мощности решения задачи 1 и решения, построенного с помощью предложенного алгоритма, эквивалентен вопросу о близости приведенной системы простых импликант к минимальной приведенной системе импликант (минимальной форме булевой функции). Продолжая аналогию, заметим, что из построенного по предложенному алгоритму множества L некоторые дуги можно удалять способом, подобным способу удаления импликант из приведенной системы [21].

Проиллюстрируем предложенный способ преобразования автомата в P -БПИ-автомат на примере.

Рассмотрим автомат A, заданный табл. 5.1. Пусть R=a(ba*)*a.

Таблица 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 в рассматриваемом примере нам достаточно ограничиться при замене итерации по изложенному выше способу значением m, равным 8, так как в выражении R до и после итерации (ba*)* стоит символ a и с учетом этого длина слов в R' будет доведена до 10 (значение n(n+1)/2 при n=4 ) и при этом значении m. В результате преобразования R получим следующее выражение:

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

Граф G^A(R'), или, что то же самое, G^A(R), имеет вид, изображенный на рис. 5.2, где двойные стрелки соответствуют выделенным дугам.


Рис. 5.2.

Множество путей C в нашем случае таково:

1,1  \stackrel{0,1,a}{\Longrightarrow} 2,3 \stackrel{0,1,a}{\Longrightarrow} 4,4;
1,1  \stackrel{1,2,a}{\Longrightarrow} 2,3 \stackrel{0,1,a}{\Longrightarrow} 4,4;
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;
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
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
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;
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;
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;
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;
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.

В соответствии с предложенным выше алгоритмом выбора L на первом шаге получаем L=\{(1,1,(0,2,a))\}.

Далее, максимальный вес, равный 8, в множестве C имеют дуги (3,4,(0,1,b)) и (2,3,(1,0,b)) ; тогда полагаем L=\{(1,1,(0,2,a)); (3,4,(0,1,b))\}, выбрав первую из названных дуг. После корректировки в множестве C остается два первых пути из списка, приведенного выше. Поскольку вес дуги (2,3,(0,1,a)) максимален (он равен 2), то добавляем ее в L и на этом процесс построения L заканчивается, так как множество C после повторной корректировки пустое. Таким образом, L=\{(3,4,(0,2,a)); (2,3,(0,1,a))\}

Используя алгоритм A1 из [23], получаем следующее разбиение множества Z=S \times X:

\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)}

Это разбиение имеет два класса, следовательно, для кодирования символов классов достаточно, например, одной двоичной переменной. Пусть K_1=0 и K_2=1, тогда автомат с контрольными точками будет представлен в табл. 5.2.

Таблица 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

Отметим, что идея изложенного метода преобразования автоматов очевидным образом может быть использована и для решения следующей задачи: для заданного регулярного множества P непустых входных слов вывести выходные контрольные точки в автомате таким образом, чтобы каждое слово из P стало диагностическим для автомата с контрольными точками.

Предложенный метод решения задачи 1 в качестве одного из этапов содержит построение путей множества C, выполняемого визуально по проверочному графу. Такое построение становится тем более затруднительным, чем большее число состояний имеет данный автомат. В связи с этим рассмотрим формализованный метод построения такого множества L' дуг автомата A, что удаление их превращает автомат A в P -БПИ-автомат. В основу метода положим представление автомата в виде матрицы переходов и выполнение операций над этой матрицей, описанных, например, в работе [18].

Напомним, что для автомата A, имеющего n состояний, матрица переходов состоит из n строк и n столбцов и обозначается [A]. Пусть S=\{s_1, \dots, s_n\} - множество состояний автомата A и пусть s_i \xrightarrow {x,y} s_j обозначает дугу графа автомата A, направленную от s_i к s_j под воздействием входного сигнала x с выдачей выходного сигнала y. Элемент (i,j) матрицы [A], т. е. содержимое клетки, расположенной на пересечении i -й строки и j -го столбца, содержит все дуги, ведущие из вершины s_i в вершину s_j. Если такие дуги отсутствуют, то элемент (i,j) полагается равным нулю.

Условимся считать, что обозначение k -го состояния s_k приписано k -й строке и k -му столбцу матрицы переходов.

В работе [18] введена операция возведения в степень матрицы переходов [A] и доказано, что элемент (i,j) матрицы [A]^k, k=1,2,\dots, является множеством всех путей длины k, ведущих из состояния s_i в состояние s_j автомата A. Этот факт и является основой для формализованного нахождения тех путей в графе автомата A, которые являются причиной потери информации.

< Лекция 4 || Лекция 5: 123 || Лекция 6 >
Дмитрий Степаненко
Дмитрий Степаненко
Россия
Юрий Фролов
Юрий Фролов
Украина