Разрешимые алгоритмические проблемы, связанные с автоматными языками

1) Проблема принадлежности:

Дано описание языка L и цепочка a. Принадлежит ли цепочка a языку L. Существует алгоритм, который за конечное количество шагов решает эту проблему.

Дано: А – автомат, a – цепочка.

Выход: «Да», если aÎL(A). «Нет», если aÏL(A).

Метод решения: распишем цепочку a посимвольно: a= a1a2…an.

Обозначим z1= t(z0, a1), z2= t(z1, a2), …, zn= t(zn-1, an).

Если znÎF (где F – множество заключительных состояний), то цепочка a принадлежит языку L. В противном случае – нет.

2) Проблема пустоты: Дано определение языка. Пустой ли этот язык.

Дано: конечный автомат А.

Выход: «Пустой» или «Непустой» язык L(A).

Метод: Найти множество состояний, достижимых из начального состояния. Если это множество содержит какое-либо заключительное состояние, то ответ «Да», иначе – «Нет». Множество достижимых состояний находят перебором всех возможных путей в графе автомата.

3) Проблема эквивалентности: Даны два определения языка. Определить, описывают ли они один и тот же язык.

Дано: 2 конечных автомата А1= (X1, Z1, t1, z01, F1) и А2= (X2, Z2, t2, z02, F2).

Предполагаем, что множества состояний этих автоматов не пересекаются: Z1ÇZ2= Æ.

Выход: «Да» – если L(A1) = L(A2), «Нет» – если L(A1) ¹ L(A2).

Метод: построим объединенный автомат А: (X1 È X2, Z1 È Z2, t1 È t2, z0, F1 È F2).

Определим, различимы ли конечные состояния данного автомата. Если они различимы, то «Нет», иначе – «Да».

Вопросы и упражнения

1. Почему данные проблемы называют алгоритмическими?

2. Как доказывается, что они разрешимы?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: