1. 程式人生 > >AC自動機fail樹小結

AC自動機fail樹小結

建議大家學過AC自動機之後再來看這篇小結

fail樹就是講fail指標看做一條邊連成的樹形結構

fail指標在AC自動機中的含義是指以x為結尾的字尾在其他模式串中所能匹配的最長字首的長度

所以在模式串中一定有sq[1~fa[x]]為sk[1~x]的子串

這個性質可以解決一些問題:

單詞

顯然,我們在插入時在沿著tire樹走時,將遍歷到的所有節點的val++

最後我們的答案就是這個單詞的結尾在fail樹中的所有子樹的val之和,因為之前的性質,

這個單詞的fail樹的子樹節點中的所有節點,都意味著該串在其他模式串中的出現

我們並不用將fail樹都建出來,然後統計

因為我們其實在求fail指標的過程中就已經有了fail樹的dfs序,即每個節點入隊(出隊)的序列

沿著這個序列反向遍歷統計一下答案就好了

未完(...)