首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DFA和NFA

2.DFA和NFA 引用 理解DFA和NFA 正则表达式引擎分成两类,一类称为DFA(确定性有穷自动机),另一类称为NFA(非确定性有穷自动机)。...DFA与NFA机制上的不同带来5个影响: 1....DFA对于文本串里的每一个字符只需扫描一次,比较快,但特性较少;NFA要翻来覆去吃字符、吐字符,速度慢,但是特性丰富,所以反而应用广泛,当今主要的正则表达式引擎,如Perl、Ruby、Python的re...通过以上例子,可以理解为什么NFA是最左子式匹配,而DFA是最长左子式匹配。实际上,如果仔细分析,关于NFA和DFA的不同之处,都可以找出道理。...(大多数版本)、less、more、.NET语言、PCRE library、Perl、PHP(所有三套正则库)、Python、Ruby、set(大多数版本)、vi POSIX NFA mawk、Mortice

76920

算法-DFA算法-敏感词过滤算法(OC、Swift、Python

一般的思路可能是遍历敏感词库,然后把一段文字的敏感词过滤掉,但是针对比较大的词库时(比如我们的敏感词库10万),这样非常耗时和耗内存,在电脑上还能跑跑,但是在手机上分分钟钟被系统杀死掉,这样肯定是不行的,这里就用到一种DFA...但是使用了DFA算法,十万的敏感词库过滤一句话只需要【0.434510秒】!...2019-10-23 14:34:08.316380+0800 DFAFilterDemo[4728:4650502] 总共耗时: 0.434510 DFA算法 简介 何谓DFA,它的全称是Deterministic...但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号;DFA算法的核心是建立了以敏感词为基础的许多敏感词树。...<index1] return String(word) } } Python代码 # -*- coding: utf-8 -*- # @Author: zhangfujie

6.4K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基于DFA的敏感词过滤

    在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机。...对于一个给定的属于该自动机的状态和一个属于该自动机字母表{\displaystyle \Sigma }Σ的字符,它都能根据事先给定的转移函数转移到下一个状态 DFA算法 DFA((Deterministic...利用DFA匹配关键词 上面开始的几个关键词匹配可以用下图来表示: dfa_2.png 0是开始状态,输入日、本、人会最终到达结束状态5,输入日、本、鬼、子最终到达结束状态8,输入中、国、人到达结束状态...代码(Python3 非原创代码): from collections import defaultdict import re __all__ = ['NaiveFilter', 'BSFilter...print(gfw.is_contain_sensi_key_word('习大大')) test_first_character() Github: https://github.com/obaby/dfa-python-filter

    1.3K20

    DFA算法简单理解实现

    背景:因为最近项目要使用到敏感词过滤服务,在网上了解到dfa实现这个功能性能还不错,特此学习了一下 1....什么是DFA算法 引用 简书作者:浪人与酒丶的解释 原文链接:https://www.jianshu.com/p/c67f917c9363 DFA全称为:Deterministic Finite...但不同于不确定的有限自动机,DFA中不会有从同一状态出发的两条边标志有相同的符号。 确定:状态以及引起状态转换的事件都是可确定的,不存在“意外”。 有穷:状态以及事件的数量都是可穷举的。...DFA算法模型 state_event_dict = { "匹": { "配": { "算": {...通过java程序加载敏感词库,构建一个DFA算法模型 private static void addSensitiveWordToHashMap(Set keyWordSet) {

    1.7K11

    简单的词法设计——DFA模拟程序

    实验一、简单的词法设计——DFA模拟程序 一、实验目的 通过实验教学,加深学生对所学的关于编译的理论知识的理解,增强学生对所学知识的综合应用能力,并通过实践达到对所学的知识进行验证。...通过对 DFA 模拟程序实验,使学生掌握词法分析的实现技术,及具体实现方法。通过本实验加深对词法分析程序的功能及实现方法的理解 。...三、实验内容 1、自己定义一个 DFA 或者一个右线性正规文法 示例如(仅供参考) G[S]:S→aU|bV U→bV|aQ V→aU|bQ Q→aQ|bQ|e 2、利用合适数据结构存储自动机,如 ?...设计思路:我们主要是用 Java 语言实现词法分析的过程,需要处理 DFA 和 NFA 两种状态,所以在文末我们给出了测试样例以及测试截图,部分代码给出了详细的注释。...实验代码如下: package python; import java.util.List; import java.util.ArrayList; import java.util.Scanner;

    2K30

    找回消失的密钥 --- DFA分析白盒AES算法

    AES算法的介绍请参照 http://91fans.com.cn/post/ilikeaes/ DFA(Differential Fault Analysis) 的原理和算法推导过程,请参照文末的链接。...我们今天用一个源码实例来操作一下,还原白盒AES算法的密钥 二、步骤 构造缺陷数据 DFA攻击简单来说就是在倒数第一轮列混合和倒数第二轮列混合之间(在AES-128中也就是第8轮和第9轮之间,因为最后第...今天我们主要走一遍DFA还原白盒密钥的流程,所以,我们找了一个AES的源码来做演示,这份源码的AES加密流程一目了然,最适合学习AES算法了。...三、总结 1、DFA的原理和数学推导请参考下列资料,还有白龙写的 白盒 AES 密码学系列 也非常棒。...他做了一些等价运算来合并了一些操作,这时候就要记口诀了 结果全部不同,说明时机太早了; 只有一个不同则说明时机太晚了 3、AES-128可以从一组轮密钥来还原原始密钥,AES-256就需要两组密钥了,AES-256下如何进行DFA

    1.7K20

    【C++】算法集锦(11):敏感词过滤算法(DFA

    文章目录 什么是 确定的、有穷状态、机 跟我一起看个栗子 DFA图解 DFA示例实现代码 DFA:确定的 有穷 状态机 如果 设计模式 中的状态模式比较熟的话,这个就很清楚了。...DFA常用于敏感词过滤。 ---- 什么是 确定的、有穷状态、机 啊,看这个名字,就通俗易懂了嘛。首先它是个机,干嘛用的机我说一下:模式串筛选用的机。...我觉得,DFA的机制很适合用于动态流程图的实现,特别是复杂的,动态流程图。当然,动态流程图是可以暴力硬写的,就是代码肥了点而已。...---- DFA图解 我们的程序在每个时刻有一个状态 s,每次从序列中输入一个字符 c,并根据字符 c 转移到下一个状态 s’。...---- DFA示例实现代码 #include #include using namespace std; int DFA(vector& cvec

    82020

    OpenSource - 基于 DFA 算法实现的高性能 java 敏感词过滤工具框架

    sensitive-word sensitive-word 基于 DFA 算法实现的高性能敏感词工具。 The sensitive word tool for java....基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。请勿发布涉及政治、广告、营销、翻墙、违反国家法律法规等内容。...基于 DFA 算法实现,目前敏感词库内容收录 6W+(源文件 18W+,经过一次删减)。 后期将进行持续优化和补充敏感词库,并进一步提升算法的性能。...特性 6W+ 词库,且不断优化更新 基于 fluent-api 实现,使用优雅简洁 基于 DFA 算法,性能为 7W+ QPS,应用无感 支持敏感词的判断、返回、脱敏等常见操作...; Assert.assertTrue(wordBs.contains(text)); 备注:init() 对于敏感词 DFA 的构建是比较耗时的,一般建议在应用初始化的时候只初始化一次。

    13200

    ReDoS:正则也许会让你的系统更脆弱

    引 Evil Regex 大敌当前 知己知彼,百战不殆 NFA vs DFA Thompson NFA 构造 vs DFA 为什么主流编程语言这么慢?...正面对抗 Evil Regex pyre2 regex 总结 引 这里有一段看起来稀松平常、人畜无害的 Python 代码,你可以试着执行一下: import re import time value...time.time() re.match(strange_regex, value) end = time.time() print(end - start) 不知道大家执行了多久,在我开发机上使用 Python...图片 当前主流的语言(Perl, PCRE, Python, Ruby等)采用了递归来实现深度优先回溯,相较于 Thompson NFA,最终实现的效果都是惊人的糟糕。...以 Python 举例,我们也找到了一些替换库: pyre2 pip install pyre2 来自 Google re2 模块的 Python 封装 pyre2,使用了 DFA 的构造方式。

    1.2K40

    详解DAF算法

    DFA(确定性有限自动机)的原理 DFA的历史 DFA在计算机科学和数学领域,特别是在形式语言理论中扮演着重要角色。...Python代码详解 class DFAFilter: def __init__(self): self.keyword_chains = {} self.delimit...无论你是初学者还是经验丰富的开发者,掌握DFA都会为你的工具箱增添一把强大的工具。 DFA的优势 DFA可以在一次扫描中检测多个关键词。...✨ DFA的运行时间是线性的,时间复杂度为O(n),n是输入字符串的长度。⏱ DFA的所有计算都是预处理的,这使得运行时非常快。 DFA的局限 DFA可能需要更大的存储空间。...文章目录 DFA(确定性有限自动机)的原理 DFA的历史 Python代码详解 关键词链(Keyword Chains) 构建关键词链 关键词检测 处理多种语言 DFA算法的主要应用 文本搜索和过滤 语法分析

    58010
    领券