前缀树匹配
前缀树
是什么
一种有序树,用于保存关联数组,其中的键通常是字符串,且键是由节点在树中的位置决定的。
应用
敏感词过滤、搜索提示(例如输入一个网址,可以自动搜索出可能的选择)
如何实现
构建敏感词前缀树,三个指针,分别为指针1,指针2,指针3.
指针1:初始指向前缀树的根。当指针2指向的字符与其指向的前缀树中的字符想匹配时,则一起移动,当命中一个敏感词或者无法匹配下去时,则返回根。
指针2:其走到字符串尽头时说明比较结束。其用于保存当前正在比较的字符串的首个字符的位置。若匹配到某个字符不吻合,则其会移动到下一个字符位置。
指针3:每次都和指针1指向的字符比较,若温和,则与指针一一起移动,否则,则继续移动。
效果
可过滤最直接的敏感词,或者可改良,过滤中间加了特殊字符的敏感词。(在输入文本时可把特殊字符去掉)
优点
利用字符串的公共前缀减少查询时间,提高查询效率。
缺点
一旦匹配失败,又要从根开始。
改进
利用KMP算法防止字符串回溯(最大最小前缀),改进了之后其实就像AC自动机了。
DFA算法
基于状态转移来过滤敏感词,感