首页
学习
活动
专区
圈层
工具
发布

DFA算法简单理解实现

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

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

    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,应用无感 支持敏感词的判断、返回、脱敏等常见操作...java 如何实现开箱即用的敏感词控台服务? 敏感词标签文件 梳理了大量的敏感词标签文件,可以让我们的敏感词更加方便。

    70300

    编译原理:NFA转DFA

    DFA 确定有限自动机(Deterministic Finite Automaton,DFA)是一种计算模型,常用于模式匹配、词法分析等领域。...定义 一个 DFA 可以用一个五元组 (Q,Σ,δ,q0,F)(Q, \Sigma, \delta, q_0, F)(Q,Σ,δ,q0​,F) 来表示,其中: QQQ 是一个有限的状态集合。...也就是说,对于当前状态和输入符号,DFA 有唯一的下一个状态。 q0q_0q0​ 是初始状态,q0∈Qq_0 \in Qq0​∈Q。 FFF 是接受状态集合,F⊆QF \subseteq QF⊆Q。...工作原理 DFA 从初始状态开始,根据输入符号和状态转移函数不断地转移状态。当输入字符串处理完毕后,如果 DFA 处于接受状态集合中的某个状态,则认为该字符串被 DFA 接受;否则,该字符串被拒绝。...: 通过以上步骤,我们成功地将 NFA 转换为了 DFA。

    60210

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

    通过对 DFA 模拟程序实验,使学生掌握词法分析的实现技术,及具体实现方法。通过本实验加深对词法分析程序的功能及实现方法的理解 。...二、实验环境 供 Windows 系统的 PC 机,可用 C++/C#/Java 等编程工具编写,语言不限。...K is in Z then return (‘yes’) else return (‘no’) 四、实验方式与要求 1、设计的自动机程序要具有通用性,上机编程实现...设计思路:我们主要是用 Java 语言实现词法分析的过程,需要处理 DFA 和 NFA 两种状态,所以在文末我们给出了测试样例以及测试截图,部分代码给出了详细的注释。...实验代码如下: package python; import java.util.List; import java.util.ArrayList; import java.util.Scanner;

    2.2K30

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

    文章目录 什么是 确定的、有穷状态、机 跟我一起看个栗子 DFA图解 DFA示例实现代码 DFA:确定的 有穷 状态机 如果 设计模式 中的状态模式比较熟的话,这个就很清楚了。...我觉得,DFA的机制很适合用于动态流程图的实现,特别是复杂的,动态流程图。当然,动态流程图是可以暴力硬写的,就是代码肥了点而已。...---- 跟我一起看个栗子 这也是我最初接触到DFA的栗子,当时我就是暴力硬写,当然,代码肥的我都没脸贴当时那篇博客里去。 请你来实现一个 atoi 函数,使其能将字符串转换成整数。...---- DFA图解 我们的程序在每个时刻有一个状态 s,每次从序列中输入一个字符 c,并根据字符 c 转移到下一个状态 s’。...---- DFA示例实现代码 #include #include using namespace std; int DFA(vector& cvec

    1K20

    算法-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算法的核心是建立了以敏感词为基础的许多敏感词树。...过滤算 ---------- import time time1 = time.time() class DFAFilter(object): """DFA过滤算法""" def __init_

    6.7K10

    经典KMP算法C++与Java实现代码

    比较流行的做法是实现一个next()函数,函数本身包含了模式串的局部匹配信息。由于next函数理解起来不太容易,本文同样是基于空间换时间的做法,但将采用另一种代码实现,希望可以更方便读者理解!...as330kdwejjl_8 jjl_ faw4etoesting tio aabacb abac 测试结果 4 9 -1 0 (注:若匹配则返回text子串的起始index;否则返回-1) 1.暴力查找的实现一...若text存在子串匹配pat,则返回text子串起始index;否则返回-1;时间复杂度:O(M*N) 2.暴力查找实现二 1 // 暴力子串查找二式:O(M*N) 2 public static...这里我们引入有穷自动机DFA对dfa[][]进行数值的初始化。...------------------ Java完整代码 1 package ch05.string.substring; 2 3 import java.io.File; 4 import java.util.Scanner

    56320

    java如何实现封装_java如何实现封装

    Java中类的封装是如何实现的封装是将对象的信息隐藏在对象内部,禁止外部程序直接访问对象内部的属性和方法。 java封装类通过三个步骤实现: (1)修改属性的可见性,限制访问。...java如何把一个已经实现某些具体功能的类封装成一第一:具体的功能方法如果是public直接就可以用import引入该类然后调用 第二:如果这功能是类似于.exe可执行文件或者打包成了.jar的可执行文件...,那么Java中有固定的代码可以内嵌运行已经实现功能的程序 第三:如果你说的其他程序。...Java中类的封装是如何实现的?封装是将对象的信息隐藏在对象内部,禁止外部程序直接访问对象内部的属性和方法。 java封装类通过三个步骤实现: (1)修改属性的可见性,限制访问。...; 为实现封装性,常将类的成员变量声明为private,再通 JAVA 中,为什么要封装?

    2K10
    领券