Анализ свойств регулярных языков (пустота, совпадение, включение, конечность, подсчёт числа слов) — различия между версиями
Shevchen (обсуждение | вклад) (Новая страница: «== Пустота == '''Пустота''' [[Регулярные языки: два определения и их эквивалентность|регулярно...») |
(нет различий)
|
Версия 09:42, 14 октября 2011
Пустота
Пустота регулярного языка — свойство языка не содержать ни одного слова. Язык, содержащий хотя бы одно слово, назовём непустым.
| Утверждение: |
Регулярный язык является непустым тогда и только тогда, когда в любом соответствующем ему автомате существует путь из стартового состояния в какое-либо из терминальных. |
|
Пусть язык содержит слово . Любой автомат , соответствующий этому языку, должен допускать . Тогда при переходе из стартового состояния по символам получится путь, оканчивающийся в одной из терминальных вершин.
|
Алгоритм проверки языка на пустоту
Для определения пустоты языка по соответствующему ему автомату проще всего использовать алгоритм обхода в глубину. Язык не является пустым тогда и только тогда, когда при поиске из стартового состояния автомата окажется достижимой хотя бы одна терминальная вершина.
boolean dfs(State v) {
v.seen = true;
if (v.isFinal) {
return false;
}
for (State u : v.next) {
if (!u.seen && !dfs(u)) {
return false;
}
}
return true;
}
boolean isEmpty(Automaton a) {
for (State v : a) {
v.seen = false;
}
return dfs(a.start);
}