algorithm - 如何在自动机上应用 Kleene 星?

标签 algorithm automata dfa nfa kleene-star

我知道如何将 Kleene 星应用于语言,但我不确定如何将其应用于 DFA 或 NFA。我很确定它需要是初始状态为最终状态的 epsilon NFA,最终状态可能需要 epsilon 转换到该初始状态?

有什么算法可以实现这一点吗?这个接受以 0 开头并以 1 结尾的单词的 DFA 在应用 Kleene 星号后会如何? enter image description here

最佳答案

在我见过的至少一个关于正则表达式和有限自动机等价性的证明中,给出了一种构造来展示如何将具有与正则表达式 s 对应的语言的 NFA 转换为具有某种语言的 NFA对应于表达式 s* 的值。我认为构造是这样的:

  1. 新的初始状态 q0' 也接受
  2. 从 q0' 到前初始状态 q0 的 lambda/epsilon/empty 转换
  3. lambda/epsilon/empty 从每个接受状态(q0' 除外)转换回 q0'

这允许:

  1. 要接受的空字符串,即使它之前不是
  2. 接受原始 NFA 语言中的任何字符串连接

关于algorithm - 如何在自动机上应用 Kleene 星?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72140110/

相关文章:

algorithm - 给定的二叉树是否完整

regex - 常规语言(是或否)

algorithm - DFA语言奇数

用于将 NFA 转换为 DFA 的 Java 库

algorithm - 集合交集的并行算法

python - 我的函数的性能从字典中删除作为其他键的子字符串的键

c++ - 存储 DFA 节点的数据结构

regex - 克林星的确定性有限自动机

java - 检查列表中的字符串是否可以通过连接同一列表中的元素形成

从 L 语言的给定正则表达式创建字符串集