Trie图的构建、活用与改进山东省龙口一中王赟Trie树与Trie图Trie树(左)是字典的一种存储方式
红色表示单词终止的位置
Trie图(右)是由Trie树改造成的图
为方便起见,仅画出了安全图
Trie图在多模式匹配中能发挥奇效
五个模式串:a,abc,bac,bbc,ca主串:cbcbbcac匹配成功
Trie图的构建(例1)【例1】不良单词探测器【题目描述】给出一个词典,其中的单词为不良单词
单词均为小写字母
再给出一段文本,文本的每一行也由小写字母构成
判断文本中是否含有任何不良单词
例如,若rob是不良单词,那么文本problem含有不良单词
【输入】第一行为一个整数n,表示不良单词的个数
接下来n行是词典
下面一行为一个整数m,表示文本的行数
接下来m行是文本
【输出】如果文本包含不良单词,输出一行“Yes”,否则输出一行“No”
Trie图的构建(例1)【样例输入】1rob1internetproblemsolvingcontest【样例输出】Yes【备注】因本题只是用来讨论trie图的构建方法,故未给出数据范围
Trie图的构建(例1分析)判断文本是否包含不良单词可以一行一行地判断
而判断长为L的一行文本s是否含有不良单词可以这样进行:让i从1变化到L,依次判断s的前i个字符构成的字符串是否以不良单词结尾
然而,我们希望在判断s的前k个字符时,能够利用前k-1个字符的结果,即这两个状态间可以方便地进行转移
注意到trie树中的边正如一个个“方向标”,因此我们有了一个美好的设想:从根结点出发,沿着标有s[1]的边走一步,再沿标有s[2]的边走一步,一直这样走下去
Trie图的构建(例1分析)问题1:如果从当前走到的结点出发,没有需要走的边,该怎么办
“创造”一条这样的边
但我们不能同时创造一个结点,因此我们需要在已有的结点中找一个与我们想要走