对于DFA、NFA理解

来源:互联网 发布:手机淘宝怎么举报店铺 编辑:程序博客网 时间:2024/05/22 07:08

最近在做深度包检测课题时,需要学一些新的算法:
DFA、NFA,对这两个算法进行一下小的总结:

有穷状态自动机

一听这个名字感觉很高大上,很陌生,不知道是什么意思,但是可以分开来理解。有穷,也就是说这个东西是有穷尽的,不是无限多的。状态自动机(自动机):软件工程的统一建模语言(UML)有状态图,数字逻辑中也有状态转移图。不过这些各种各样的图在本质上都跟状态机没有什么区别。总体的意思就是在有限个输入的情况下,在这些状态中转移并期望最终达到终止状态。有穷状态自动机根据确定性可以分为“确定有穷状态自动机”(DFA - Deterministic finite automaton)和“非确定有穷自动机”(NFA - Non-deterministic finite automaton)。

DFA

确定性有穷状态自动机:在输入一个状态时,只得到一个固定的状态。但往往从正则表达式翻译过来的状态机是ε-NFA,我们需要从ε-NFA通过消除ε边来转变成NFA或者DFA。关于转换在这篇文章里有提到。
例如:
这里写图片描述
当输入一个任何一个可以的字符时,都得到一个固定的状态。

NFA

这个里面还有一个小的分支ε-NFA。ε-NFA:我们用ε边来表示一个状态可以不读入字符就跳转到另一个状态 上,ε-NFA就是在NFA中存在这种边的情况,例如:
这里写图片描述
从start状态到end状态,可以不需要读入字符就进行转换。
NFA:“非确定有穷自动机”(NFA - Non-deterministic finite automaton),当输入一个字符或者条件得到一个状态机的集合。
例如:
这里写图片描述
当输入b后可能得到两种状态,构成一个状态集。

0 0
原创粉丝点击