Theory 你怎么知道一个有限自动机需要多少状态?

Theory 你怎么知道一个有限自动机需要多少状态?,theory,finite-automata,Theory,Finite Automata,我已经附上了一张关于我的问题的图片。所以对于这个问题,它说制作一个接受以aa或bb开头/结尾的字符串的FA。我的问题是,你如何知道何时停止添加状态?比如说,为什么5个州不够,而不是9个州 给出语言的正式描述,我们可以从算法上将其转换为有限状态自动机,并且必须有一种算法可以找到最小的自动机(如果没有其他方法,则通过枚举,因为可能性是有限的)。然而,给定一个自然语言描述,我们还没有算法将其转换为自动机或其他形式描述 然而,在这种情况下,我们可以推理: 看到“a”和“b”后的状态必须是不同的,因为它

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


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

然而,在这种情况下,我们可以推理:

  • 看到“a”和“b”后的状态必须是不同的,因为它们的后果取决于下一个字符是“a”还是“b”。(“a”后接“a”表示接受,而“b”后接“a”表示尚未接受,而“a”后接“a”表示接受,而“a”后接“a”表示尚未接受,依此类推。)
  • “aa”和“bb”达到的两个状态是相同的,可以合并,将自动机减少到八个状态
  • 否则,在最初看到“ab”或“ba”之后,我们必须有以下不同的状态:
    • 最后看到的字符是“aa”。(如果该状态是结束状态,则必须接受该状态;如果接收到“a”,则该状态必须导致自身[或同构状态];如果接收到“b”,则该状态必须导致不同的状态。)
    • 最后看到的字符是“bb”。(与上述类似,但交换接收到“a”或“b”时发生的情况。)
    • 最后看到的字符是“ab”。(如果收到“b”,则此状态必须导致“bb”-上次看到的状态,但如果收到“a”,则不会。)
    • 最后看到的字符是“巴”。(与上面类似,但已交换。)
  • 这四个国家也必须与最初的四个国家不同:
    • 无论收到其他什么,初始“a”状态和初始“b”状态都必须导致接受,而后四个状态中没有一个可以这样做
    • 最初的“”状态不能导致在收到一封信后接受,而如果收到适当的信,后面的四个状态都会接受
    • 开始时看到“aa”或“bb”的状态只能导致接受,而后面四个状态中的任何一个都不能导致无条件接受

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

“必须有一种算法可以找到最小的自动机(如果没有其他方法,则通过枚举,因为可能性是有限的)”有一种算法可以检查两个DFA是否识别同一种语言,但它使用一种算法将DFA最小化为一个子例程,因此,除非您有另一种方法可以检查两个DFA是否识别同一种语言,否则您将无法使用前者作为子例程来构造后者h并不是从最小化它们开始的。在其他情况下,通过穷举搜索无法找到具有特定行为的最小程序,因为无法确定两个程序是否具有相同的行为。因此引用的句子并不完全错误,但它可能会误导人,因为它没有明确说明它依赖于eq对于DFA来说,单价问题是可判定的。除了@kaya3的优点外,“因为可能性是有限的”也是错误的,因为任何给定的无限语言都有无限可能通过扩展循环来接受DFA。在OP的示例中,终端、自循环接受状态(表示以“aa”和“bb”开头的字符串)可以无限扩展为任意长的接受状态链(或循环!)。这适用于任何具有最小DFA特征的语言(即无限规则语言)@Welbog:语言中存在无限多个DFA是不相关的。我们正在考虑的可能性只是那些比我们开始考虑的更小的可能性,其中有一个有限的数字。@kaya3:有许多算法在不最小化DFA的情况下测试等价性。(对一些算法的调查)。最小化不是答案的重点,因此我认为它不值得修饰。至于排除其他上下文,我认为上下文已经足够确定,因为标题询问了有限自动机,问题被标记为有限自动机,答案提到了有限状态自动机。你试过构建DFA吗对于这种有五种状态的语言,如果你认为这是可能的,那么首先要做的就是尝试一下。