[後綴自動機]小結

你問我參考什麼學習的,我只能回答說無可奉告
https://wenku.baidu.com/view/90f22eec551810a6f4248606.html

以下內容僅僅是我的一點理解,如果報道上出現了偏差,我也不會被續1s的

顯然證明法

sam上面不是有一段trans[u][x]=0的,然後就直接trans[u][x]=np,np是新建點,然後有一個q,他trans[u][x]有值了,但是你又要讓這個q識別Sx,假設p=trans[u][x],因爲又不能把trans[u][x]直接頂掉,那樣信息肯定錯了,就考慮把p和np弄一個parent關係,但是直接弄得話又可能不滿足right數上的max限制,就需要再新建一個點,讓他是np和p的parent,就重新滿足了right樹的限制了(max和right集合的子集關係),因爲p被新建的點代替了,所以再把他的父親的trans是p的改成這個點。

這個顯然證明法可以拿來背板子(霧)

腦補之後

我當時一直沒有清楚的地方就是trans。當時一直思考的問題是爲什麼parent np != ST(S),明明ST(s)是可以識別Sx的。但是其實一個點是可以識別很多東西的(字符集大小)。並且parent和trans一點關係都沒有,parent的定義是right集合包含當前點,且right集合最小的。當前串對應的那個節點的right只有 length。一個狀態對應了若干個子串,出現的末位置就是right,可以用right-min ,right - max來表示出這些子串可能的開始位置,而ST(S)雖然可以識別Sx,但他的right集合仍然不會變。考慮表示的什麼樣的串right集合會變,一是他是S的後綴,然後他的sr[right]有一個是x。這樣的話他的trans[x]就可以在right集合中增加一個length+1(顯然我們的right集合是隻會增加的),這個的話cls的ppt裏面有舉例子可以自己看。但是你直接在right集合裏面增加length+1是錯的,因爲他的max可能會變小。那你爲了維護parent樹上right集合的性質的話,就必須新建一個點,使得這個點的max仍然是滿足的,然後p和np掛到新建的點下面去。這樣就能維護好了。容易發現這樣轉移到的狀態仍然是等價的。

怎麼使用sam還沒想清楚。等做幾道題再補

發佈了169 篇原創文章 · 獲贊 7 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章