字串演算法模板 Trie樹 AC自動機

2021-10-05 06:47:28 字數 1382 閱讀 9247

trie樹

為ac自動機做鋪墊的乙個資料結構,trie用來找一段字串中字首出現在trie樹上的單詞,還有經典的xor問題

時間複雜度:o(n

)o(n)

o(n)

#include

#include

using

namespace std;

const

int max =

1e6+10;

int trie[max][26

], end[max]

, idx;

char s[max]

;void

insert

(char s)

end[p]++;

//某個單詞數量

}int

query

(char s)

return ans;

}int

main()

int m;

scanf

("%d"

,&m)

;while

(m--

)return0;

}

ac自動機

需要知道失配指標的概念,以及上面的trie樹。用bfs建fail樹。

時間複雜度:o(n

+m

)o(n+m)

o(n+m)

#include

#include

#include

using

namespace std;

const

int max =

1e6+10;

int trie[max][26

], fail[max]

, end[max]

;int idx;

char s[max]

;void

insert

(char s)

end[p]++;

}void

build()

else trie[now]

[i]= trie[fail[now]

][i];}

}}intquery

(char s)

}return ans;

}int

main()

build()

;//建fail樹

scanf

("%s"

, s)

;printf

("%d\n"

,query

(s))

;return0;

}

字串演算法 字典樹Trie入門

顧名思義,字典樹 也叫字首樹 就是可以像字典那樣來儲存一些單詞的集合。如圖所示 來自oiwiki 設根節點的標號為 0 然後其餘結點依次編號 我們用陣列來存每個節點的所有子節點 更具體地,設陣列 ch maxnode sigmasize 其中 maxnode 表示最大可能的節點個數,sigmasiz...

Trie樹與AC演算法

在我的前一篇博文 ac演算法 多模式匹配 解析版 中介紹了ac演算法的實現原理,但是並沒有給出ac演算法的具體實現。ac演算法的實現必須首先解決幾個問題。首先需要解決的是goto表的實現問題。由前面的分析可知,goto表本質上是乙個有限狀態機。儲存goto表的方式有很多,例如用二維陣列和鍊錶等。但是...

字串 Trie樹(字典樹)

關於這個字串的資料結構我就不多說什麼了,不知道的可以戳這裡.trie樹在oi中應用廣泛,時間優秀,缺點就是空間占用大。下文中我們將字符集大小稱為 k,模式串長度為p trie支援o np 建樹,o p 插入,查詢,刪除。可是如果二維陣列儲存的話,就要耗費kn 的空間,基本無法承受。空間上我們可以用指...