Trie

Posted youngao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Trie相关的知识,希望对你有一定的参考价值。

目录

 

1 什么是Trie

Trie:字典树、前缀树;其特点不再是普通树中的二叉结构而是多叉结构。

Trie优点:

适合处理类似通讯录问题,当有n个条目时,使用树结构其查询的时间复杂度为O(logn),使用字典树查询每个条目的复杂度和字典中条目的数量无关只与每个条目的长度相关,其时间复杂度为O(w),w为查询的条目(字符串)的长度。

Trie结构:

技术图片

每个节点有若干(具体数目根据不同语境得出)个指向下个节点的指针,其构造代码如下:

class Node{
    //每个节点装载字符
    char c;
    //利用map映射,便可以不用固定一个节点到底会有多少子节点
    Map<Character,Node> next;
}

对上面的进行优化:

(1)考虑搜索过程,当我们来到根节点要向下寻找时其实本质上我们已经知道了下一个字母所在的节点位置;

 

(2)英文中有些单词可能是长单词的前缀,比如pan和panda这样还需要标记一下当前节点是不是单词

技术图片

 

class Node{
    //是否是单词的标记
    boolean isWorld;
    //不需要额外存储节点
    Map<Character,Node> next;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

以上是关于Trie的主要内容,如果未能解决你的问题,请参考以下文章

天天数据结构和算法PHP中trie数据结构的使用场景和代码实例

trie树

trie树

java刷题--208Trie前缀树

java刷题--208Trie前缀树

Trie树题目模板及java代码