【问题标题】:How do these two discrete finite automata differ?这两个离散有限自动机有何不同?
【发布时间】:2016-10-04 02:27:55
【问题描述】:

我有以下语句定义的离散有限自动机:

{ω | ω 是任何不在 a* 中的字符串 ∪ b*}

出于某种原因,我只是不理解“a* ∪ b*”部分。我知道联合是什么,但这与 a* b* 有何不同?这两个语句的结果 DFA 是否相同?我需要先创建这个语言的补全的DFA,然后再根据那个DFA来创建上述语言的DFA。

谁能帮我理解这个?

【问题讨论】:

  • aaaabba* b* 中,但不在a* U b* 中。
  • 据我了解,a* ∪ b*{λ, a, b, aa, bb, aaa, bbb, …}a*b*{λ, b, bb, bbb, …, a, ab, abb, abbb, …, aa, aab, aabb, …}
  • 所以基本上,它就像 a* b*,只是它们不能混合和匹配......它必须是 a 的第一个,然后是 b 的?

标签: regular-language finite-automata


【解决方案1】:

让我们分解定义,然后更容易看出a* ∪ b*a* b* 之间的区别。

  • 集合x*指符号x的任意非负数(包括零)次数。这包括空字符串 (ε)、xxxxxx 等等。
  • 集合XY 指的是X 后跟Y 中的任何符号
    • 如果X = {1, 2}Y = {a, b},那么XY = {1a, 1b, 2a, 2b}
  • 集合X ∪ Y 指的是XY 描述的集合的并集。这包括可能在集合XY 中的任何符号,但不一定两者兼有。
    • 如果X = {1, 2}Y = {a, b},那么X ∪ Y = {1, 2, a, b}

从上面我们可以推断出a* b* 中的元素集合是集合a* 中的任何元素,后跟集合b* 中的任何元素(请记住,因为我们使用的是* 符号,包括空字符串)。 a* = {ε, a, aa, aaa, aaaa, ... }b* = {ε, b, bb, bbb, bbbb, ... }。因此a* b* = {ε, a, b, ab, aa, aab, aabb, bb, abb, aabb, ...}

同样,我们现在知道a* ∪ b* 包含集合a*b* 中的任何元素。因此a* ∪ b* = {ε, a, b, aa, bb, aaa, bbb, aaaa, bbbb, ...}。请注意,没有任何元素同时具有符号 ab,因为它不在集合中。

最后,您可以询问a* b* 中的元素是什么,但a* ∪ b* 中没有。 a* b* \ a* ∪ b* = { x ∈ a* b* | x ∉ a* ∪ b*} = { ab, abb, abbb, ... aab, aabb, aabbb, ..., aaab, aaabb, ... }。这些元素中包含both 符号a b

【讨论】:

    【解决方案2】:

    a* U b* 是所有a 字符串的语言,以及所有b 字符串的语言:{empty, a, b, aa, bb, aaa, bbb, ...}。不是这种语言的字符串是那些不仅包含as 或bs 而且同时包含:{ab, ba, aab, aba, baa, abb, bab, bba, ...} 的字符串。 a*b* 是另一种语言,它包含所有as 位于bs 之前的所有字符串:{empty, a, b, aa, ab, bb, ...}a*b*a* U b* 的超集,但不等于它。它既不是a* U b* 中字符串语言的子集也不是超集,但它确实在许多地方重叠。由于这三种语言都是不同的,因此这三种语言都有不同的 DFA。

    【讨论】:

      猜你喜欢
      • 2010-10-27
      • 1970-01-01
      • 2012-05-27
      • 2013-07-05
      • 2023-04-02
      • 2017-01-04
      • 2010-12-24
      • 1970-01-01
      • 2014-09-06
      相关资源
      最近更新 更多