【发布时间】:2012-10-20 01:23:22
【问题描述】:
什么是 NFA 和 epsilon NFA 的实时示例,即除了用于设计编译器之外的实际示例
【问题讨论】:
标签: automata
什么是 NFA 和 epsilon NFA 的实时示例,即除了用于设计编译器之外的实际示例
【问题讨论】:
标签: automata
任何人使用正则表达式时,他们都在使用有限自动机。如果你对正则表达式不太了解,让我告诉你它们非常普遍——在许多生态系统中,它是大多数人在面临从字符串中获取结构化数据时尝试应用的第一个工具。理解自动机是理解(和推理)正则表达式的一种方式,如果你有数学倾向的话,也是一种非常可行的方式。
实际上,今天的正则表达式引擎已经超越了这些数学概念,并增加了一些功能,允许做的事情超出了 FA 所允许的范围。然而,许多正则表达式不使用这些功能,或者以有限的方式使用它们,以至于可以通过 FA 来实现它们。
现在,我之前只谈到了一般的有限自动机。 NFA 是特定的 FA,就像 DFA 一样,两者可以相互转换(从技术上讲,任何 DFA 都已经是 NFA)。因此,虽然您可以在上面将“有限自动机”替换为“NFA”,但请注意,它不一定是引擎盖下的 NFA。
【讨论】:
就像@delnan 解释的那样,自动机通常以正则表达式的形式使用。但是,它们的用途不止于此。自动机通常用于对硬件和软件系统进行建模并验证它们的某些属性。您可以通过查看model checking 找到更多信息。在Introduction to Automata, Languages, and Computation 的介绍中可以找到一个非常简单的激励示例。
【讨论】:
我们不要忘记Markov chains,它们基本上也是基于有限自动机的。结合bellpeace提到的硬件和软件建模,一个非常强大的工具。
如果您想知道为什么 epsilon NFA 被视为 NFA 的变体,那么我认为没有充分的理由。它们的解释方式相同,除了每一步可能不再是单位时间,但 NFA 也不是真的。
【讨论】:
一个有点晦涩但有效的例子是the aho-corasick algorithm,它使用有限自动机在文本中搜索多个字符串
【讨论】: