过滤敏感词汇(trie树实现敏感词过滤)

1、字符串匹配
(1)暴力解法:采用两个for循环,每次匹配的时间复杂度O(m*n)
(2)KMP:时间复杂度O(m+n)
n表示字符串的长度,m表示每个灵感词的长度
(3)trie树
字典树/单词查找树,是一种哈希树的变种。
优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无畏的字符串比较,查询效率比哈希树高(共享字符串的公共前缀)
性质:
1.根节点不包含字符,除根节点外每一个节点都只包含一个字符;
2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;
3.每个节点的所有子节点包含的字符都不相同

trie树的应用:
1.搜索时,输入关键字,待选框会列举出很多相关的信息
2.敏感词汇过滤
3.求以关键字为前缀的字符串的个数

trie树过滤敏感词汇的过程
1、时间复杂度:
如果敏感词汇的长度为m,则每个敏感词的查找时间复杂度是O(m)
字符串的长度为n,我们需要遍历n遍
所以敏感词汇查找这个过程的时间复杂度是O(nm)
如果有t个敏感词的话,构建trie树的时间复杂度是O(t
m),这个可以忽略,因为这个从一开始就要建立,之后重复使用
2、过程
准备:
1、建议一颗trie树,存放敏感词
2、使用3个指针来遍历
p1指向trie树的root
p2指向字符串的第一个字符
p3指向字符串的第一个字符
查找:-------写的不够详细,之后再更新
1、检测有没有以p2指向节点的字符作为前缀的敏感词(从p2指向的字符开始查找):
1、判断p1的孩子节点中是否存在p2指向节点的字符
1、没有:
1、把p3向右移动一格
2、把p2移到p3的位置
3、p1移到root
4、continue
2、有
1、p1指向那个孩子节点
2、p2向后移到一格
3、p3不动
4、continue

如何构造trie树

你可能感兴趣的:(trie,过滤敏感词汇)