【问题标题】:what is the McNaughton-Yamada Algorithm?什么是 McNaughton-Yamada 算法?
【发布时间】:2011-07-12 10:06:03
【问题描述】:
我需要为 CS 类使用 McNaughton-Yamada 算法构建 DFA。问题是算法是补充材料,我不清楚它到底是什么。它是一种在给定 RegEx 的情况下找到 DFA 的方法,还是找到 DFA 并最小化它?我似乎找不到有关该主题的任何信息。
我很困惑,因为我们在课堂上发现 DFA 后我的老师展示的最小化例程似乎与 book 中描述的“标记”最小化没有任何不同。
感谢您的回复,
内森
【问题讨论】:
标签:
algorithm
computer-science
finite-automata
dfa
【解决方案2】:
"...McNaughton-Yamada 分析算法,其中找到一个正则表达式来描述有限状态机所接受的词,该有限状态机给出了转换表。未经修改的算法将产生代表 n 状态机的 4n 个项。这可以通过消除重复计算和拒绝与同一状态图中没有可能路径对应的高级表达式来减少数量。剩余的表达式存在严重的简化问题,因为算法会大量生成空表达式和空词。”
Source
【解决方案3】:
他们的算法通常不会与 Thompson 的工作分开提出。 Thompson 的原版从正则表达式变成了内存中的模拟 NFA。 Thompson-McNaughton-Yamada 算法是一个扩展,它将正则表达式转换为存储在内存中的实际 NFA,而不是瞬态模拟。
将 NFA 转换为 DFA(确定性)不是 McNaughton 或 Yamada 扩展的一部分。相反,它是通过 subset construction(又名 powerset 构造)算法完成的。
您可以使用 Compiler Construction Toolkit 的 regular expression to NFA and DFA 工具查看 Thompson-McNaughton-Yamada 算法和子集构造算法对任意正则表达式的作用。