dfa和nfa的基本概念及其区别?

基本概念:

1. 确定有限自动机(Deterministic Finite Automaton) 简称DFA。dfa是匹配速度,是确定的。

2. 非确定有限自动机(Nondeterministic Finite Automaton) 简称NFA,nfa是匹配结果,是不确定的。

1. DFA比较快,但不提供Backtrack(回溯)功能,NFA比较慢,但提供了Backtrack功能。

2. NFA是基于表达式的(Regex-Directed),而DFA是基于文本的(Text-Directed)。

3. DFA引擎在任意时刻必定处于某个确定的状态,而NFA引擎可能处于一组状态之中的任何一个,所以,NFA引擎必须记录所有的可能路径(trace multiple possible routes through the NFA),NFA之所以能够提供Backtrack的功能,原因就在这里。dfa或nfa是对计算机程序的行为的抽象模型。你编写的程序其实就对应了一个自动机。简单举例来说,如果a,b可以取值0或1; 程序: if(a==1) b=1;这个程序对应了一个自动机。

对应的自动机就有状态 (0,0), (0,1), (1,1), (1, 0)

比如你自动机的初始状态是 (1,0)即a=1,b=0时,运行程序的下一个状态就是(1,1)。

画图出来就是 这4个状态作为顶点,并且有下面几条边

(0,0) --> (0,0)(自环),(1,0)-->(1,1),(1,1)-->(1,1)(自环), (0,1)-->(0,1)自环

存在的意义就是一种理论模型,也可以认为是一种编程思想。词法分析系也离不开 if else, 这一系列的if else和条件也就组成自动机。。。

最经典体现自动机思想的算法就是kmp算法,你肯定学过,字符串子串匹配的算法。 回忆这个算法的过程:算法第一步构造的next表(数据结构教材的说法)其实就是根据子串的内容构造了一个自动机! 算法第二步将原串作为自动机输入,自动机的输出就是匹配到的子串位置或者无匹配。

dfa和nfa的基本概念及其区别?

基本概念:

1. 确定有限自动机(Deterministic Finite Automaton) 简称DFA。dfa是匹配速度,是确定的。

2. 非确定有限自动机(Nondeterministic Finite Automaton) 简称NFA,nfa是匹配结果,是不确定的。

1. DFA比较快,但不提供Backtrack(回溯)功能,NFA比较慢,但提供了Backtrack功能。

2. NFA是基于表达式的(Regex-Directed),而DFA是基于文本的(Text-Directed)。

3. DFA引擎在任意时刻必定处于某个确定的状态,而NFA引擎可能处于一组状态之中的任何一个,所以,NFA引擎必须记录所有的可能路径(trace multiple possible routes through the NFA),NFA之所以能够提供Backtrack的功能,原因就在这里。dfa或nfa是对计算机程序的行为的抽象模型。你编写的程序其实就对应了一个自动机。简单举例来说,如果a,b可以取值0或1; 程序: if(a==1) b=1;这个程序对应了一个自动机。

对应的自动机就有状态 (0,0), (0,1), (1,1), (1, 0)

比如你自动机的初始状态是 (1,0)即a=1,b=0时,运行程序的下一个状态就是(1,1)。

画图出来就是 这4个状态作为顶点,并且有下面几条边

(0,0) --> (0,0)(自环),(1,0)-->(1,1),(1,1)-->(1,1)(自环), (0,1)-->(0,1)自环

存在的意义就是一种理论模型,也可以认为是一种编程思想。词法分析系也离不开 if else, 这一系列的if else和条件也就组成自动机。。。

最经典体现自动机思想的算法就是kmp算法,你肯定学过,字符串子串匹配的算法。 回忆这个算法的过程:算法第一步构造的next表(数据结构教材的说法)其实就是根据子串的内容构造了一个自动机! 算法第二步将原串作为自动机输入,自动机的输出就是匹配到的子串位置或者无匹配。

dfa算法(dfa算法)相关推荐

  1. python实现dfa过滤算法_Hopcroft算法DFA最小化Python实现

    DFA最小化原理 所谓自动机的化简问题即是对任何一个确定有限自动机DFA M,构造另一个确定有限自动机DFA M',有L(M)=L(M'),并且M'的状态个数不多于M的状态个数,而且可以肯定地说,能够 ...

  2. python实现dfa过滤算法_DFA 算法实现敏感词过滤(python 实现)

    敏感词过滤的经典算法DFA ,看完相关资料后,自己实现了一下,同时做了评估实验 先上代码 #!/usr/bin/python2.6 # -*- coding: utf-8 -*- import tim ...

  3. 记录一次敏感词过滤算法DFA的应用案例

    目录 0. DFA是什么? 1.为什么要用DFA 2.DFA工具类实现 3.性能对比效果 3.1 普通关键字过滤 3.2 DFA关键字过滤 0. DFA是什么? 参考文档:敏感词过滤的算法原理之DFA ...

  4. NFA转DFA与DFA简化

    NFA转DFA的算法在编译原理的课本上都有,只不过课本上的算法太拗口,不好记!我在这里边说的都很通俗,只要看得懂字的都会懂.在本篇文章里用一个例子来说明怎么实现NFA转DFA与DFA简化,NFA转DF ...

  5. NFA、DFA模拟、正则表达式转NFA、NFA转DFA、DFA转正则、DFA最小化的python实现项目

    各类自动机模拟实现 项目地址: https://github.com/HuiyuanYan/automaton_simulation 注:这个github链接必须复制重新在浏览器打开,不能通过CSDN ...

  6. 算法总结---最常用的五大算法(算法题思路)

    算法总结---最常用的五大算法(算法题思路) 一.总结 一句话总结: [明确所求:dijkstra是求点到点的距离,辅助数组就是源点到目标点的数组] [最简实例分析:比如思考dijkstra:假设先只 ...

  7. 生成树的概念,最小生成树Prim算法 Kruskal算法

    求解最小生成树可以用Prim算法 Kruskal算法

  8. 期望最大化算法(Expectation-Maximum,简称EM)算法+EM算法+EM的应用

    期望最大化算法(Expectation-Maximum,简称EM)算法+EM算法+EM的应用 EM的应用 EM算法有很多的应用,最广泛的就是GMM混合高斯模型.聚类.HMM等等.具体可以参考Jerry ...

  9. 数据结构与算法:算法简介

    数据结构与算法:算法简介 雪柯 大工生物信息 提笔为写给奋进之人 已关注 你说呢 . shenwei356 等 70 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国 ...

最新文章

  1. 共享可写节包含重定位_PE结构学习01-DOS头-NT头-节表头
  2. exchange揭开拨号音还原法的神秘面纱
  3. c++面试题【转】 面经
  4. 利用python进行统计及分析第7章,构建电影分类的dummies
  5. is not allowed to connect to this MySql
  6. Python精通-Python字符串格式化操作
  7. python将word文档转换为txt
  8. matlab负反馈传函,已知负反馈系统开环传函求阶跃传函
  9. Problem C: 车牌限行
  10. SpringBoot 错误:Field userService in com.lyh.Controller.UserController required a bean of...
  11. JS获取当天23时59分59秒
  12. 913_emacs中使用restart-emacs
  13. 运动耳机品牌排行榜有哪些,排行前五的运动耳机推荐
  14. reactos操作系统实现(119)
  15. .net 根据接口获取数据并序列化
  16. 掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法。
  17. 透过“最牛”年报,聊聊优然牧业的“最佳养牛模式”
  18. YOLOV3 网络结构学习笔记
  19. BIOS设置 硬盘热插拔功能
  20. 拿高分文章,还得是Synaptic Systems 微管蛋白抗体

热门文章

  1. 中国ABC干粉灭火剂市场调研与前景预测分析报告2022-2028年
  2. WdatePicker 日期控件- 功能及示例
  3. python-web自动化测试-断言
  4. 华为鸿蒙11公测版,华为EMUI 11公测开启,首批10款机型,可优先尝鲜鸿蒙
  5. 学习QT的阶段性总结
  6. 新手遇到的问题之charles代理
  7. 商城电商day07 商品详情页面优化
  8. c语言long型数组怎么初始化,C语言中数组初始化的三种方式是什么?
  9. 750-连接一个 IP 不存在的主机时,握手过程是怎样的?
  10. JS的ES5和ES6新增的方法(重点)