首页 > 其他分享 >DFA和NFA引擎的区别

DFA和NFA引擎的区别

时间:2024-07-27 15:53:37浏览次数:12  
标签:匹配 NFA 引擎 回溯 文本 DFA

DFA(确定性有穷自动机)和NFA(非确定性有穷自动机)引擎在正则表达式的处理中有着不同的特性和行为。以下是它们之间的主要区别:

1、工作原理:

DFA引擎是文本主导的,它会先看文本,再看正则表达式。它执行的方式是线性的,整个匹配过程中,字符串只看一遍,不会发生回溯,相同的字符不会被测试两次。
NFA引擎是表达式主导的,它先看正则,再看文本,而且以正则为主导。在匹配过程中,NFA引擎可能会进行回溯,即对字符串中的同一部分进行多次对比和测试。

2、执行速度:

一般来说,DFA引擎在“正常”情况下的简单文本匹配测试中,速度与NFA引擎相近。但由于DFA引擎在匹配过程中不会发生回溯,因此它在处理某些复杂的正则表达式时可能会更快。
NFA引擎由于可能进行大量的回溯操作,在最坏情况下,其执行速度可能会非常慢。

3、匹配结果:

DFA引擎可以确保匹配到可能的最长字符串,并返回最左边的最长的匹配文本。
NFA引擎可能会因为回溯而返回不同的匹配结果,尤其是在使用贪婪匹配回溯算法时,它可能会急于报告匹配结果,导致还有更长的匹配未被发现。

4、功能特性:

DFA引擎因为只包含有限的状态,所以没有反向引用功能,也不支持捕获子组。
NFA引擎通过构造特定扩展,支持子组和反向引用。同时,NFA引擎还能提供一些DFA不支持的功能,如捕获括号内的子表达式匹配的文本、环视、非匹配优先的量词,以及有序的多选结构等。

5、优化和复杂性:

DFA引擎在预编译阶段所作的工作提供的优化效果要好于大多数NFA引擎复杂的优化措施。DFA引擎不需要做太多的优化,因为它的匹配速度很快。
NFA引擎的编译过程通常要快一些,需要的内存要少一些,但其匹配速度受正则表达式的影响较大。

6、POSIX NFA:

POSIX NFA是NFA引擎的一个变体,它主要在Unix/Linux中的某些工具中使用。POSIX NFA在找到可能的最长匹配之前会继续回溯,也就是说它会尽可能找最长的,如果分支一样长,以最左边的为准(“The Longest-Leftmost”)。

标签:匹配,NFA,引擎,回溯,文本,DFA
From: https://blog.csdn.net/qq_39311377/article/details/140252042

相关文章

  • Unity 物理动画:利用物理引擎创造逼真动作
    在Unity中,物理动画是一种利用物理引擎来模拟真实世界物理效果的动画技术。通过物理动画,开发者可以创造出更加逼真和自然的动画效果,如重力、碰撞、布料摆动等。本文将介绍Unity物理动画的基本概念、实现方法以及一些实用的技巧。Unity物理动画简介Unity的物理动画主要依赖......
  • Chrome 版本 127 需要选择默认搜索引擎
    Chrome更新到版本127后,我的所有Selenium脚本都会引发错误,因为在启动浏览器时我总是必须选择默认搜索引擎。我使用ChromeDriver127.0.6533.72。有人遇到同样的问题吗?是的,Chrome127及其对应的ChromeDriver版本在首次启动时引入了选择默认搜索引擎的提示,这可......
  • Kylin查询优化器深度解析:大数据查询性能的加速引擎
    Kylin查询优化器深度解析:大数据查询性能的加速引擎ApacheKylin是一个开源的分布式分析引擎,专为Hadoop和Spark平台上的大数据集提供快速的SQL查询能力。Kylin的核心优势之一是其强大的查询优化器,它能够智能地优化查询计划,显著提高查询性能。本文将深入探讨Kylin的查询优化......
  • 字节跳动推出端到端同声传译智能体;OpenAI 搜索引擎 SearchGPT 登场丨 RTE 开发者日报
        开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代......
  • MySQL 学习笔记 进阶(存储引擎,索引上)
    存储引擎 存储引擎-MySQL体系结构连接层服务层引擎层存储层 存储引擎-简介简介:存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被成为表类型。在创建表时,指定存储引擎CREATETABLE表名(......
  • 将 PyTorch ONNX 模型转换为 TensorRT 引擎 - Jetson Orin Nano
    我正在尝试从JetsonOrinNano上的ViT-B/32UNICOM存储库转换VisionTransformer模型。该模型的VisionTransformer类和源代码在此处我使用以下代码将模型转换为ONNX:importtorchimportonnximportonnxruntimefromunicom.vision_trans......
  • 三分钟追踪工作流表单引擎几大优势
    众所周知,企业都希望能实现开源节流。那么,如何实现这一目标是很多人都在思考的重要问题。低代码技术平台可操作性强、可视化界面丰富而简洁高效、灵活可靠,在推动企业流程化办公的过程中发挥了重要的市场价值和作用。本文将给大家介绍清楚低代码技术平台、工作流表单引擎几个备受瞩......
  • 聚焦IOC容器刷新环节prepareBeanFactory专项
    目录一、IOC容器的刷新环节快速回顾二、prepareBeanFactory源码展示分析三、设置基本属性深入分析(一)设置类加载器(二)设置表达式解析器(三)设置属性编辑器(四)设计目的分析四、忽略自动装配深入分析(一)详细分析和说明EnvironmentAwareEmbeddedValueResolverAwareResourceL......
  • mybatisPlus3.4 自定义sqlSessionFactory sql注入器失效、mybatis-plus批量插入报错In
    文章目录一、报错背景二、解决方法在mybatis-plus项目中集成自定义批量插入方法后报错。以下整理一下报错及解决方法。一、报错背景mybatis-plus是不提供insertList批量插入方法的,本人在自定义批量插入方法后,启动时正常,但是执行到insertList时报错。org.apache.i......
  • Spring | BeanFactory与ApplicationContext的关系
    BeanFactory是Spring的早期接口,称为Spring的Bean工厂,ApplicationContext是后期更高级接口,称之为Spring容器ApplicationContext在BeanFactory基础上对功能进行了扩展,例如:监听功能、国际化功能等。BeanFactory的API更偏向底层,ApplicationContext的API大多数是对这些底层API的封装......