【问题标题】:NFA to DFA conversion for the language (111+11111)*语言的 NFA 到 DFA 转换 (111+11111)*
【发布时间】:2018-09-03 17:05:54
【问题描述】:

我已经为语言 (111+11111)* 构建了 NFA。之后我试图将其转换为 DFA,但我被卡住了。请任何人都可以提供给定 NFA 到 DFA 的逐步转换。

【问题讨论】:

  • 您确定这是该语言的正确 NFA 吗?据我所知,对于输入 11111111,自动机可以走以下路径:A->B->C->A->B->C->A->B->C 并且 C 不是最终状态。
  • 是的 NFA 对于 11111111 是正确的,路径如下:A-B-C-A-B-C-D-E-A 和 A 是最终状态
  • @Rashin NFA 对于字符串 11111111 是正确的,路径如下:A B C A B C D E A 和 A 是最终状态,因此被接受
  • 同一个输入路径可以不同。一条路径(很好)是你展示的,另一条路径是我提供的,它不被这个自动机接受但有效。
  • 那么请分享您尝试过的步骤以及您觉得哪里出了问题。 Stack Overflow 的存在是为了回答有关特定问题的特定问题。由于{A, B, C, D, E} 的子集只有有限多个这一简单事实,该算法必须结束。事实上,有 32 个这样的子集,所以你的 DFA 最多可以有 32 个状态,并且 NFA 到 DFA 算法的迭代最多有 32 次。

标签: regular-language finite-automata computation-theory dfa nfa


【解决方案1】:

为了将 NFA 转换为 DFA,您可以使用 子集构造 方法。 您需要将 NFA 中所有可能的状态组合枚举为新状态(2^|Q| 新状态)并编写它们的转换。

  1. 生成转换表

第一列表示新状态。第二行表示第一行中接受输入 1 的状态,表示它可以进入。例如,当状态 {A} 得到输入 1 时,它会进入状态 {B};当状态 {A,D} 获得输入 1 时,它将进入 {B,E},因为 t(A,1)=B 且 t(D,1)=E。

  1. 重命名新状态

为表中的第一行指定一个新的州名

  1. 删除无法访问的状态

由于我们已经有了转换表,我认为您可以轻松地在此基础上构建 DFA。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 2019-10-18
    • 2014-10-23
    • 2011-08-16
    • 2013-01-28
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多