【问题标题】:NFA to DFA AlgorithmNFA 到 DFA 算法
【发布时间】:2010-11-23 08:18:35
【问题描述】:

我已经阅读了一个包含符号、状态和转换的文本文件,并将其全部放在一个表格中。它看起来像这样:
符号 a, b
状态 q1、q2、q3、q4
开始状态 q4
最终状态 q2, q3

过渡状态:
q4、ε、q1
q1, a, q2
q3, a, q3
q3、b、q1

我已阅读有关如何将 NFA 转换为 DFA 的算法,但我并不真正了解该算法。我将如何创建转换方法以及我应该有什么状态类?

【问题讨论】:

  • 你读过什么算法但没看懂?
  • 将 nfa 转换为 dfa 算法。我的意思是在这种情况下应用它。如何开始?如何实现转换方法?状态类需要哪些成员?

标签: finite-automata


【解决方案1】:

如果您想自动执行此操作而无需下载 JFLAP 之类的内容,请试一下 Online NFA to DFA conversion tool

ProfBrown's "Convert NFA to DFA" video on YouTube 仔细研究了如何做到这一点,尽管在 IMO 中手动编写表格是不切实际且不必要的乏味的。当您习惯于执行该过程时,您将能够将其用于小图。对于大型图表,无论如何,您都可以使用工具来自动化它。

【讨论】:

    【解决方案2】:
    【解决方案3】:

    我在这里有一个漂亮的链接: JFLAP

    JFLAP 是一个 Java JAR,其中包含一些不错的可视化。您可以测试和转换 NFA/DFA,执行抽引引理并检查各种语法等... 你可以试试看!

    【讨论】:

      【解决方案4】:

      您有编程问题,还是 Automata 有问题?

      因为编程这看起来很简单。是的,你有一个状态类,有 4 个可能的值 q1-a4。状态类有一个构造函数将其初始化为 q4。它有一个修改状态对象的 Accept(symbol) 函数,以及一个对状态 q2 和 q3 返回 true 的 IsEndState() 函数。

      NFA/DFA 部分在 Accept() 方法的实现中发挥作用。现在可能会要求您提供一种程序解决方案来将基于 NFA 的 Accept() 实现转换为基于 DFA 的 Accept() 实现。

      【讨论】:

      • 我真的在设计它时遇到问题?像你告诉我的东西很有帮助,例如在状态类中具有 accpt 功能等。告诉我一个完整的结构会很好。过渡功能呢?
      猜你喜欢
      • 2011-01-02
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2011-04-02
      • 2014-10-23
      • 2011-08-16
      • 2013-01-28
      • 1970-01-01
      相关资源
      最近更新 更多