回文自動機

2022-07-13 19:57:10 字數 1278 閱讀 8834

回文自動機也叫做回文樹

由名字可知:它是一棵樹

樹有什麼性質?

節點個數為n,乙個點只有一條出邊(乙個父親);

我們把符合樹的性質的回文字典樹叫做回文自動機;

由樹的性質大致可以推出:回文自動機的時間複雜度是線性的!(廢話,不然要你有何用?)

首先,由於回文串的性質,回文自動機的最大的乙個特點就是他的起始節點有兩個,本質是分開考慮奇串和偶串。

在回文自動機的上面,存在著兩種邊:轉移邊和字尾邊;

若回文串 s有一條 ch的轉移邊到 s′ ,說明存在乙個回文串 s兩端各增加1個字元 ch,將形成回文串 s′。

特殊的,對於 −1根的轉移邊,表示單個字元表示的回文串,如 a。

若回文串 s有一條字尾邊連線到 s′,說明 s′是 s的最大回文串字尾(不含 s自身)。

對於 0

根和 −1

根,其字尾邊都連向-1根,為的是統一奇串和偶串。

構造回文自動機的方法採用增量法;

在有些題目中,我們呢要快速知道乙個字串的某個特殊fail指標(就是這個fail指標的字串的長度要小於等於該字串的一半),叫做trans,trans可以通過找fail的時候得到,具體的實現可以參考下面的**;

char s[600010

];int

n;class

node1pam[

600010

];int

last,size,root1,root2;

int cnt[600010

];class

node

void add(char c,int

pos)

else

pam[neww].trans=pam[tmp].ch[c-'a'

]; }

}last=pam[u].ch[c-'a'

]; }

}pam;

回文自動機

回文自動機,又叫回文樹,是由俄羅斯人 mikhailrubinchik於2014年夏發明的 這是一種比較新的資料結構,在原文中已有詳細介紹與 實現。回文樹其實不是嚴格的樹形結構,因為它有是兩棵樹,分別是偶數長度的回文樹和奇數長度的回文樹,樹中每個節點代表乙個回文串。為了方便,第一棵樹的根是乙個長度為...

回文自動機

乙個節點表示乙個回文串。tot 節點個數,即不同回文串的個數。兩棵樹,節點為0,1,所以最後計數時從2開始 n 新增的字元個數 last 新新增乙個字母後所形成的最長回文串表示的節點 nxt i c 節點i表示的回文串在兩邊新增字元c後變成的回文串編號 兒子 cnt i 節點i表示的本質不同的串的個...

回文自動機

小小總結 別忘了寫上初始化!當字串下標從0 00開始時,pos pospo s初始化為 1 1 1 若從1 11開始,則pos pospo s初始化為0 00 最終的pos pospo s代表最後乙個字元的下標 前者為n 1 n 1n 1,後者為n nn 根據本質不同的回文子串數量不超過 s s s...