zoukankan      html  css  js  c++  java
  • 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'个儿子时,因为我们是查询,不是插入,所以就可以直接判断这个字符不存在了。反之如果我们遍历完了整个串,并且最终停留的这个节点是某个串的终止节点,我们就可以判断这个串出现过了。

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

  • 相关阅读:
    诡异的Integer
    你已经创建了多少个对象?
    静态方法中使用非静态化数据
    静态化初始块的执行顺序
    java中的多构造函数以及类字段的初始化顺序
    java中类的构造方法出错点
    程序员修炼之道读后感
    纯随机数发生器,以及函数重载的问题
    递归判断回文
    使用jQuery操作DOM元素
  • 原文地址:https://www.cnblogs.com/ww3113306/p/9985912.html
Copyright © 2011-2022 走看看