Участница:Наталья Юльцова — различия между версиями
(1) |
(→Преобразование ДКА в регулярное выражение с помощью алгебраического метода Бжозовского.) |
||
Строка 25: | Строка 25: | ||
===Преобразование ДКА в регулярное выражение с помощью алгебраического метода Бжозовского.=== | ===Преобразование ДКА в регулярное выражение с помощью алгебраического метода Бжозовского.=== | ||
− | Создадим систему регулярных выражений | + | Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений <tex>R_i</tex>, связанных с терминальным состояниями <tex>q_i</tex>. Строим уравнения следующим образом: для каждого состояния <tex>q_i</tex> уравнение <tex>R_i</tex> является объединением переходов, ведущих в это состояние. Переход a из <tex>q_i</tex> в <tex>q_j</tex> обозначим за <tex>aR_i</tex>. Если <tex>q_i</tex> - терминальное состояние, то добавим в <tex>R_i</tex> <tex>\ne \varepsilon</tex>. Это приводит к системе уравнений вида: |
<tex> | <tex> | ||
Строка 36: | Строка 36: | ||
</tex> | </tex> | ||
− | где a_x = | + | где <tex>a_x</tex> = ∅ если нет перехода от <tex>R_i</tex> к <tex>R_j</tex>. |
+ | Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена: | ||
− | + | Уравнение вида R = Q + RP, где P <tex>\ne \varepsilon</tex>, имеет решение R = QP*. | |
− | |||
− | Уравнение вида R = Q + RP, где P | ||
Пример | Пример | ||
Найти: Регулярное выражение, удовлетворяющее данному ДКА. | Найти: Регулярное выражение, удовлетворяющее данному ДКА. | ||
+ | |||
Решение: | Решение: | ||
+ | |||
<tex> | <tex> | ||
\begin{cases} | \begin{cases} | ||
Строка 51: | Строка 52: | ||
R_2 = a*R_1 \\ | R_2 = a*R_1 \\ | ||
R_3 = b*R_1 \\ | R_3 = b*R_1 \\ | ||
− | R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 | + | R_4 = a*R_2 + b*R_3 + a*R_4 + b*R_4 + \varepsilon |
\end{cases} | \end{cases} | ||
</tex> | </tex> | ||
+ | |||
Рассмотрим первое терминальное состояние: | Рассмотрим первое терминальное состояние: | ||
− | R_1 = \varepsilon + abR_1 + baR_1 | + | |
+ | <tex>R_1 = \varepsilon + abR_1 + baR_1 = \varepsilon + R_1(ab+ba)</tex> | ||
+ | |||
Воспользуемся теоремой Ардена: | Воспользуемся теоремой Ардена: | ||
− | R_1=(ab+ba)^* | + | |
+ | <tex>R_1=(ab+ba)^*</tex> | ||
+ | |||
Рассмотрим второе терминальное состояние : | Рассмотрим второе терминальное состояние : | ||
− | R_4=R_1(aa+bb)+R_4(a+b) | + | |
− | + | <tex>R_4=R_1(aa+bb)+R_4(a+b)=R_1(aa+bb)(a+b)^*</tex> | |
− | Объединим выражения для терминальных состояний и получим искомое регулярное | + | |
− | R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*) | + | Объединим выражения для терминальных состояний и получим искомое регулярное выражение: |
+ | |||
+ | <tex>R = R_1 + R_4= (ab+ba)^* (\varepsilon + (aa+bb) (a+b)^*)</tex> |
Версия 16:53, 31 декабря 2020
пGреобразование регулярного выражения в ДКА.
Задача: преобразовать регулярное выражение в ДКА. Алгоритм: 1) Преобразовать регулярное выражение в ε-НКА. Будем пользоваться следующим правилом: 1. Для регулярного выражения A|B можем построить следующий КА:
2. Для регулярного выражения AB можем построить следующий КА:
3. Для регулярного выражения A* можем построить следующий КА:
2) Преобразовать ε-НКА в НКА (статья : Автоматы с eps-переходами. Eps-замыкание) 3) Преобразовать НКА в ДКА (статья : Построение по НКА эквивалентного ДКА, алгоритм Томпсона) Пример: преобразовать регулярное выражение (0|1)*1(0|1) в ДКА. 1) Преобразуем регулярное выражение (0|1)*1(0|1) в ε-НКА. Построим сначала автомат для 0|1. Для этого воспользуемся правилом 1.
Далее принимаем (0|1) за А и строим по правилу 3 выражение (0|1)*. После по правилу 2 соединим (0|1)*, 1, и (0|1).
2) Удалим ε-переходы, получим НКА:
3) Преобразуем НКА в ДКА и минимизируем ДКА:
Преобразование ДКА в регулярное выражение с помощью алгебраического метода Бжозовского.
Создадим систему регулярных выражений для каждого состояния в ДКА, а затем решим систему для регулярных выражений
, связанных с терминальным состояниями . Строим уравнения следующим образом: для каждого состояния уравнение является объединением переходов, ведущих в это состояние. Переход a из в обозначим за . Если - терминальное состояние, то добавим в . Это приводит к системе уравнений вида:
где
= ∅ если нет перехода от к . Система может быть решена с помощью простой подстановки, за исключением случаев, когда неизвестное появляется как в правой, так и в левой части уравнения. Для этого воспользуемся теоремой Ардена:Уравнение вида R = Q + RP, где P
, имеет решение R = QP*.Пример
Найти: Регулярное выражение, удовлетворяющее данному ДКА.
Решение:
Рассмотрим первое терминальное состояние:
Воспользуемся теоремой Ардена:
Рассмотрим второе терминальное состояние :
Объединим выражения для терминальных состояний и получим искомое регулярное выражение: