美文网首页
Trie字典树(前缀树)

Trie字典树(前缀树)

作者: SeekerLinJunYu | 来源:发表于2019-03-12 13:46 被阅读0次

对字典树的理解:

a.Trie字典树又可以称为前缀树,是一种真正为字典设计的数据结构,其中的核心实现就包含了字典Map.
b.Trie专门用来处理字符串相关的问题,运行十分高效.其运算时的复杂度跟树的规模无关,只跟用于操作的目标字符串W的长度L相关,即O(L).鉴于大部分的字符串长度一般都较短(10+的很少)即字典树相对其他结构有着明显更低的时间复杂度-->例如:一个100w规模的条目,即使使用树结构,时间复杂度为logn级别,基本上为20,对比得到,在较大规模的数据背景下可以看出Trie字典树的优势.
c.Trie树的结构如图1


图1 Trie树的结构原理

从结构图中可以看出(1).Trie树结构是由一个一个节点构成
(2).每个节点代表的是一个对应的字符
(3).每个节点上都挂载有子节点.

设计代码:

设计思路:

从Trie树的结构上看,Trie也是一个一个节点node相互挂接而成,并且每个节点都包含相应的变量var信息.到这里,可以发现Trie和链表LinkedList似乎是完全一样.但进一步读图可以发现--->①Trie树并非是二叉树,而是多叉树,并且不同的父亲节点带子节点的数量也是不定的,链表的父子节点则是一一链接的.②节点表达的信息是字符,每个节点Node和字符Chararter一一对应.
综上所述的思路,可以将Trie设计为以Node节点为基本单元的数据结构,节点之间相互链接,节点相互多链接的属性体现为节点挂载节点集合,又由于节点的字符和节点本身是一一对应,那么集合选择为字典Map.

class Node{
                 public boolean isWord;
        public TreeMap<Character,Node> next;        
}
核心代码实现:
/**
 * class Trie
 * @author Administrator
 *
 */
import java.util.TreeMap;
public class Trie {
    /**
     * aim class --> connect each other
     * @author Administrator
     *
     */
    private class Node{
        public boolean isWord;
        // the TreeMap support generic
        public TreeMap<Character,Node> next;
        
        public Node(boolean isWord) {
            this.isWord = isWord;
            next = new TreeMap<>();
        }
        
        public Node() {
            this(false);
        }
    }
    private int size;
    private Node root;
    
    /**
     * constructor
     */
    public Trie() {
        size = 0;
        root = new Node();
    }
    
    public int getSize() {
        return size;
    }
    
    /**
     * add method-->add a new word into Trie tree
     * @param word
     */
    public void add(String word) {
        Node cur = root;
        for (int i = 0; i < word.length(); i++) {
            char c= word.charAt(i);
            if (cur.next.get(c) == null) {
                cur.next.put(c, new Node());
            }
            cur = cur.next.get(c);
        }
        
        if (!cur.isWord) {
            cur.isWord = true;
            size++;
        }   
    }
    
    /**
     * method contains --> determine whether the target String if in the Trie
     * @param word
     * @return
     */
    public boolean contains(String word) {
        Node cur = root;
        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            if (cur.next.get(c)==null) {
                return false;
            }
            cur = cur.next.get(c);
        }
        if (!cur.isWord) {
            cur.isWord = true;
        }
        return true;
    }
    
    public boolean isPrefix(String prefix) {
        Node cur = root;
        for (int i = 0; i < prefix.length(); i++) {
            char c = prefix.charAt(i);
            if (cur.next.get(c) == null) {
                return false;               
            }
            else {
                cur = cur.next.get(c);
            }
        }
        /**
         * determine if there are any words after the prefix
         */
        if (cur.next.keySet()!=null) {
            return true;    
        }
        else
            return false;
    }
}

相关文章

  • 前缀树(字典树/Trie)Java实现和应用

    摘要: 前缀树,字典树,插入查询逻辑,Java实现,时间复杂度分析 前缀树介绍 Trie树又被称为前缀树、字典树,...

  • AC自动机学习笔记

    先简单复习一下学习AC自动机所需要的前缀知识。 前缀知识 1-Trie树 字典树,也称Trie树,前缀树,主要用于...

  • 以太坊详解 之 Merkle Patricia Tree

    基础知识 Trie树 Trie是一种搜索树,又称字典树(digital tree)和前缀树(prefix tree...

  • 【 数据结构 & 算法 】—— 高级数据结构

    思维导图 1/3:trie树(字典树)的基础知识 trie树,又称字典树或前缀树,是一种有序的、用于统计、排序和存...

  • trie树

    文章内容来自 Trie树:应用于统计和排序Trie树 trie树又称:字典树、单词查找树、前缀树等,总之是一种树状...

  • 1:Trie树(字典树)

    1:Trie树,也可以叫字典树、前缀树 http://www.cnblogs.com/huangxincheng/...

  • 数据结构之Trie字典树

    什么是Trie字典树 Trie 树,也叫“字典树”或“前缀树”。顾名思义,它是一个树形结构。但与二分搜索树、红黑树...

  • 数据结构与算法(十一)Trie字典树

    本文主要包括以下内容: Trie字典树的基本概念 Trie字典树的基本操作插入查找前缀查询删除 基于链表的Trie...

  • 数据结构与算法(第一季):Trie

    一、概念 Trie 也叫做字典树、前缀树(Prefix Tree)、单词查找树。 Trie 搜索字符串的效率主要跟...

  • 数据结构-Trie

    ◼ Trie 也叫做字典树、前缀树(Prefix Tree)、单词查找树◼ Trie 搜索字符串的效率主要跟字符串...

网友评论

      本文标题:Trie字典树(前缀树)

      本文链接:https://www.haomeiwen.com/subject/gpugpqtx.html