trie树

简而言之,trie树就是把字符当做点的树。

一般而言,我们建trie树都是在树上插入很多个字符串,再利用trie树的性质来做题。

对于任意一个字符串,我们的插入规则如下:(此处默认所有字符串都只有小写字母)

  一开始我们在根节点0.  假设当前所在的点为x,当前遍历到的字符为c。

  1,我们先检测x这个节点有没有第c - 'a'个儿子,如果没有,就新建一个儿子分配给它。

  2,跳转到x这个节点的第c - 'a'个儿子,即x = son[x][c - 'a'].当前字符变为当前串的下一个字符,例如abcde我们本来遍历到了d,那么下一个字符就是e。

  3,重复以上步骤直到这个字符串被遍历完。

  插入完成后将遍历到的最后一个节点标志为一个终止节点,表示这个点是某个串的结尾

此处建议画图理解。

 

那么我们建出了这个树有什么用?

  例如,我们可以快速的判断一个串是否在一个字符串集中出现过。

  我们可以先建出这个字符串集对应的trie树。然后用跟建trie树类似的遍历方法,一步步遍历相对应的链。不同的是,这个时候如果我们遇到x这个节点没有第c - 'a'个儿子时,因为我们是查询,不是插入,所以就可以直接判断这个字符不存在了。反之如果我们遍历完了整个串,并且最终停留的这个节点是某个串的终止节点,我们就可以判断这个串出现过了。

  当然还有其他用处,这个就要自己挖掘了(其实是因为我对字符串一无所知)

posted @ 2018-11-19 21:37  ww3113306  阅读(160)  评论(0编辑  收藏  举报
知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。