Да это обычный язык!
Любая строка состоит, если a
и b
принадлежат языку A = {xy | Na(x) = Nb(y)}
.
Пример:
Предположим, что строка: w = aaaab
, мы можем разделить эту строку на префикс x
и суффикс y
.
w = a aaab
--- -----
x y
Количество a
в x
равно единице, и количество b
в y
также равно единице.
Аналогично строке типа: abaabaa
можно разбить на x = ab
(Na(x) = 1) и y = aabaa
(Nb(y) = 1).
Или w = bbbabbba
как x = bbbabb
(Na(x) = 1) и y = ba
(Nb(y) = 1)
Или w = baabaab
, поскольку x = baa
и y = baab
с (Na(x) = 2) и (Nb(y) = 2).
Таким образом, вы всегда можете разбить строку, состоящую из a
и b
, на префикс x
и суффикс y
так, чтобы Na(x) = (Nb(y).
Официальная проверка:
Примечание. Строки состоят только из a
s или состоят из b
s, не относятся к языку, например. aa
, a
, bbb
...
Определим новый Лагранж CA
таким образом, что CA = {xy | Na(x) != Nb(y)}
. CA
означает дополнение A
состоит из строки, состоящей только из a
s или только из b
s.
1А CA — это обычный язык, его регулярное выражение — a+ + b+
.
Теперь, когда мы знаем, что CA является обычным языком (это может быть выражение с помощью регулярного выражения и, таким образом, DFA), а дополнение любого регулярного языка является регулярным, следовательно, язык A
также является обычным языком!
Чтобы построить DFA для дополнительного языка, см.: Поиск дополнения DFA? и чтобы написать регулярное выражение для DFA, используйте следующие два метода.
- Как написать регулярное выражение для DFA а>
- Как написать регулярное выражение для DFA с использованием теоремы Ардена
"+" Оператор в регулярном выражении в официальные языки
PS: Кстати, регулярное выражение для A = {xy | Na(x) = Nb(y)}
равно (a + b)*a(a + b)*b(a + b)*
.
person
Grijesh Chauhan
schedule
28.09.2013