根据标题:
L = {(na(w)-nb(w)) mod 3>0}
字母 = {a,b}
我找到了这个问题的两个答案:
在这个解决方案中,我们的语言被接受。
然而,
w = b
也被接受。
在下一个解决方案中:
我们的问题
w = b
在这里解决了但是
w = aaab
不被接受。
我该如何解决这个问题?我在互联网上找不到合适的答案。
最佳答案
假设我们有以下 mod
的定义:
x mod y = { x, if 0 <= x < y
(x - y) mod y, if 0 < y <= x
x, if -y < x < 0
(x + y) mod y, if x <= -y < 0
-(-x mod -y) if y < 0
}
所以我们的模数是这样工作的:
3 mod 5 = 3
6 mod 5 = 6-5 mod 5 = 1 mod 5 = 1
-3 mod 5 = -3
-6 mod 5 = -6+5 mod 5 = -1 mod 5 = -1
-6 mod -5 = -(6 mod 5) = -1
6 mod -5 = -(-6 mod 5) = -(-1) = 1
我们的语言是 L = {(n_a(w) - n_b(w)) mod 3 > 0}
让我们定义
A := n_a(w)
和 B := n_b(w)
.所以我们需要解决(A - B) mod 3 > 0
使用我们对 mod
的定义.我们有五种情况:我们不得不从我们的语言中丢弃以下字符串:
所以我们只保留 a 多于 b 的字符串,其中 A - B 不能被 3 整除。假设这种语言是正则的。考虑语言中的字符串 (b^p)(a^(p+1))。由抽引引理,我们应该可以抽到
b
的数量。 s;但是我们可以得到更多 b
比a
s。所以语言不可能是正规的。如果我们对
x mod y
采取可能更常见的定义(不一定更正确):x mod y = { x , if 0 <= x < y
(x - y) , if 0 < y <= x
(x + y) mod y , if -y < x < 0
-(-x mod -y) , if y < 0
}
根据这个定义:
现在我们只抛出了 A mod B = 0 (mod 3) 的情况。这种语言是常规语言并且具有 DFA:
+------------a-------------+
| |
| +---b----+ +---b----+ |
| | | | | |
V V | V | |
(q0)---a--->(q1)---a--->(q2)
--->(q0)
(q0)---b--->(q3)---b--->(q4)
^ ^ | ^ | |
| | | | | |
| +---a----+ +---a----+ |
| |
+------------b-------------+
关于automata - 为 L = {(na(w)-nb(w)) mod 3>0} 构造 DFA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46604378/