首页 > 编程知识 正文

算法的定义和特性,简述算法的定义和特征

时间:2023-05-03 13:10:04 阅读:20086 作者:870

学习敏感的单词匹配,了解DFA算法。 该算法总体难度较低,可以依靠一些数据结构知识构建代码。 在此之前,要了解DFA算法的思想。

虽然不能具体说明DFA算法名字的含义,但有能力的人可以知道它。 名字也是知道一个东西的重要手段之一。

本文表明,一般来说敏感单词匹配都有敏感词典。 词典中用“、”和空格等符号分隔,可以通过分析文本字符串轻松获得敏感单词。 现有的敏感单词如下。 (敏感的单词只是例子,不是博客的主观想法。 )

没有简单的书

简单的书不好用

简单的书和沉默的保温杯/p java是最好的

java不好用

这四个敏感单词可以作为五个字符串来处理。 五个很少,我们可以一个个匹配。 但是,如果敏感单词特别多,最坏的情况是敏感单词都不匹配。 如果匹配的文章也非常长的话,其匹配时间会直线上升,在开发中是不可取的。 才需要用更好的算法匹配。 现在说明DFA的匹配过程。

DFA算法以树为基础,根据上述敏感单词制作缩小版树。 现在,一致的字符串假设为“简单的书很难使用”。

adr表示以下节点地址,每个节点由一个或多个键-值对组成,键和值之间用“:”分隔:

1、我们匹配时,查找第一个节点匹配“简”字,获取adr匹配下一个节点。 首先检测isEnd,为0,说明各个“简”字不是敏感词。

2、阅读匹配字符串中的下一个单词“书”,在当前节点搜索,找到键“书”,根据“书”的值adr找到下一个节点。 检验isEnd为0,表明“简表”不是敏感词。

3、读取匹配字符串中的下一个单词“否”,找到当前节点中有密钥“否”,根据“否”的值adr找到下一个节点,读取isEnd为1,“简单句”表示敏感词匹配结束有读者可能会怀疑“简单的书不好用”是不是也是敏感的词语。 事实确实如此,但一般与“简单的书不同”一致表明这个一致的字符串有问题。 要匹配更完整的敏感词语,必须继续匹配,直到匹配树叶(即只有isEnd:1键和值对的节点)。

这是DFA算法的基本思路。 使用DFA算法的关键是如何构建这个树。 虽然博主也不是很深入的研究,但一个可靠的方案是将每个节点视为一个Map,java可以使用HashMap。 这样,在匹配单词时,例如,图中的第一个节点可能包含键“简单”和“j”,也可能在任何时间匹配。

DFA算法的整个查询在最坏的情况下与最长的敏感单词相匹配。 和至今为止遍历敏感单词的水平不同。 关于如何构建这棵树,我认为网上有很多答案。 而且,也可能有这个博客下面的推荐。 这篇文章虽然没有涉及DFA算法,但目的是在理解后再写代码。 这篇文章限于写作环境,字数不多,但希望对同一个初学者有帮助。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。