【问题标题】:How do you know how many states are needed for a finite automata?你怎么知道有限自动机需要多少个状态?
【发布时间】:2021-05-23 02:45:24
【问题描述】:

我附上了一张关于我的问题的图片。因此,对于这个问题,它说要制作一个接受以 aa 或 bb 开头/结尾的字符串的 FA。我的问题是你怎么知道什么时候停止添加状态?比如为什么 5 个州而不是所示的 9 个州就不够了?

【问题讨论】:

  • 您是否尝试过为这种具有五个状态的语言构建 DFA?如果您认为它应该是可能的,首先要做的就是尝试。

标签: theory finite-automata


【解决方案1】:

给定语言的正式描述,我们可以通过算法将其转换为有限状态自动机,并且必须有一种算法可以找到最小的自动机(如果没有别的,则通过枚举,因为可能性是有限的)。但是,给定自然语言描述,我们(还)没有算法将其翻译成自动机或其他形式的描述。

但是,在这种情况下,我们可以推理:

  • 看到“”、“a”和“b”之后的状态必须是不同的,因为它们的结果会根据下一个字符是“a”还是“b”而有所不同。 (“a”后跟“a”被接受,而“b”后跟“a”还没有被接受。“a”后跟“a”被接受,而“”后跟“a”还没有被接受],等等。)
  • “aa”和“bb”达到的两个状态是相同的,可以合并,将自动机减少到八个状态。
  • 否则,在最初看到“ab”或“ba”之后,我们必须有不同的状态:
    • 最后看到的字符是“aa”。 (如果是结束状态,则必须接受此状态,如果收到“a”,则必须通向自身[或同构状态],如果收到“b”,则必须通向不同的状态。)
    • 最后看到的字符是“bb”。 (与上述类似,但交换收到“a”或“b”时发生的情况。)
    • 最后看到的字符是“ab”。 (如果收到“b”,则该状态必须导致“bb”-was-last-seen 状态,但如果收到“a”则不会。)
    • 最后看到的字符是“ba”。 (与上述类似,但交换了。)
  • 这四种状态也必须不同于最初的四种状态:
    • 无论收到什么其他内容,初始“a”状态和初始“b”状态都必须导致接受,而后四个状态都不能这样做。
    • 最初的“”状态不能在多一封信后导致接受,而后面的四个状态都可以在收到相应的信后。
    • 一开始看到“aa”或“bb”的状态只能导致接受,而后四种状态都不能导致无条件接受。

因此,我们必须有八个状态。

【讨论】:

  • “必须有一种算法可以找到最小的自动机(如果没有其他方法,则通过枚举,因为可能性是有限的)” 对此的小问题 - 有一个算法检查两个 DFA 是否识别相同的语言,但它使用一种算法来最小化 DFA 作为子例程,因此除非您有另一种检查两个 DFA 是否为子例程的方法,否则您将无法使用前者作为子例程来构造后者识别同一种语言,这不是从最小化它们开始的。
  • 在其他情况下,通过穷举搜索无法找到具有特定行为的最小程序,因为无法确定两个程序是否具有相同的行为。所以引用的句子并没有完全错误,但它可能会产生误导,因为它没有明确说明它依赖于 DFA 可判定的等价问题。
  • 除了@kaya3 的优点之外,“因为可能性是有限的” 也是错误的,因为任何给定的无限语言通过扩展循环都有无限可能的接受 DFA。在 OP 的示例中,终端自循环接受状态(表示以“aa”和“bb”开头的字符串)可以无限扩展为接受状态的任意长链(或循环!)。这适用于任何最小 DFA 具有循环特征的语言(即无限正则语言)。
  • @Welbog:该语言的无限多 DFA 的存在是无关紧要的。我们正在考虑的可能性只是那些小于我们开始的可能性,其中的数量是有限的。
  • @kaya3:有许多算法可以在不最小化 DFA 的情况下测试等价性。 (一些调查是here。)。最小化不是答案的重点,所以我认为不值得修饰。至于排除其他上下文,我认为上下文已经充分建立,因为标题询问了有限自动机,问题被标记为有限自动机,答案提到了有限状态自动机。
猜你喜欢
  • 2021-08-18
  • 2016-04-28
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
相关资源
最近更新 更多