关于AC自动机fail指针的灵感

 关于AC自动机fail指针的灵感_第1张图片

看之前先看下trie树是怎么构造的

树上的词分别是(从上到下)

{  he , hers , his , she}

按图所示分成3层

 

看到第三层

是"she"

其中,

①s指向root

 

②h先找到s的fail指针,发现是,不是h,

然后h就不高兴了,再问问s的fail指针root:“你有没有儿子是叫h的”

root说:“有,你指向他吧”

然后h就满足了

 

③e开始找了,首先问他老爸h:“你的fail指针指着谁”

h说:“图上第一行那个h啊”

然后e就屁颠屁颠地跑去问图上第一行那个h:“你有没有名字和我一样的儿子啊”

图上第一行那个h说:“有,他地址是xxx”

最后e的fail指针就指向xxx地址,也就是第一行那个e了

 

发现这样,如果一个字符串查到第三行的e才不匹配,那说明他前面应该有个‘he’

刚好e的失败指针指向的是第一行的‘he...’的那个e;

这样就不用从h开始再找一遍啦

你可能感兴趣的:(关于AC自动机fail指针的灵感)