当前位置:  开发笔记 > 编程语言 > 正文

软件开发中的非确定性有限状态机?

如何解决《软件开发中的非确定性有限状态机?》经验,为你挑选了2个好方法。

最近我一直在考虑有限状态机(FSM),以及如何在软件中实现它们(编程语言并不重要).

我的理解是确定性状态机被广泛使用(解析/词法分析器,编译器等),但是非确定性状态机的问题是什么?

我知道可以所有非确定性状态机转换为确定性状态机(甚至是以编程方式).那不是我的观点.我还想象非确定性状态机实现起来要复杂得多.

总之,它使任何意义上实现非确定性状态机?有什么特别的应用我不知道吗?这可能是什么原因?也许优化和专业的非确定性状态机更快?



1> Konrad Rudol..:

大多数正则表达式引擎使用确定性自动机,因为它们提供了更大的灵活性.DFA受到更多限制.看看一些实现,你会看到这一点.微软甚至在他们的.NET Regex类文档中强调了这一事实:

.NET Framework正则表达式引擎是一种回溯正则表达式匹配器,它包含传统的非确定性有限自动机(NFA)引擎,例如Perl,Python,Emacs和Tcl使用的引擎.

匹配行为(第一段) - 本文还提供了使用NFA而不是更有效的DFA的基本原理.



2> Paul Nathan..:

如您所知,NFA和DFA在计算上是等效的.这是自动机理论中的第一个定理之一.有一些算法可以将一个转换为另一个(与Pushdown或图灵机不同).

所以.为什么一个超过另一个?因为使用NFA表示给定问题比等效DFA容易得多.

编辑:就实际计算机器而言,DFA会更快,因为它们不必回溯.但他们将需要更多的记忆来代表.(Mem与CPU权衡)

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有