(Trie)树一般用于词频统计或者前缀匹配,当然还有一些高级操作。
一棵空(Trie)仅包含一个根节点。
一般是设(trie[pos][val]),表示当前指针(pos)的(val)指针。(一定注意(val)是值,而不是枚举的下标。)
插入时,枚举(c)字符,若指针(pos)的(val)指针指向一个已经存在的节点(p0),则令(pos=p0)。若其指向空,则新建一个节点(p0),令(pos)的(val)指向(Q),然后令(pos=p0)。注意到最开始(pos=1),意思是(pos)指向空的根节点(1)。
时间复杂度:一般的(Trie)树插入是(O(|S|))的,构造是(O(sum{|S|}))的。
空间复杂度:一般的(Trie)树空间复杂度是比较大的,(pos)维要开到(sum{|S|})(因为可能没有公共前缀),(val)维要开到值域。
目前主要学的(Trie)树的用途就是字符串的处理,以及维护最大异或和等。