Leetcode---208.实现Trie前缀树 - Go语言中文社区

Leetcode---208.实现Trie前缀树


Java非递归版

class Trie {
    private class Node{
        boolean isTrie;
        Map<Character, Node> children = new HashMap<>();
    }
    
    private Node root = new Node();
    /** Initialize your data structure here. */
    public Trie() {
        
    }
    
    /** Inserts a word into the trie. */
    public void insert(String word) {
        Node node = root;
        for(int i=0; i<word.length(); i++){
            char c = word.charAt(i);
            if(!node.children.containsKey(c)){
                node.children.put(c, new Node());
            }
            node = node.children.get(c);
        }
        node.isTrie = true;
        return;
        
    }
    
    /** Returns if the word is in the trie. */
    public boolean search(String word) {
        Node node = root;
        for(int i=0; i<word.length(); i++){
            char c = word.charAt(i);
            Node temp = node.children.get(c);
            if(temp == null)
                return false;
            node  = temp;
        }
        return node.isTrie;
    }
    
    /** Returns if there is any word in the trie that starts with the given prefix. */
    public boolean startsWith(String prefix) {
        Node node = root;
        for(int i=0; i<prefix.length(); i++){
            char c = prefix.charAt(i);
            Node temp = node.children.get(c);
            if(temp == null)
                return false;
            node  = temp;
        }
        return node!=null;
    }
}

关于Trie

  • 核心思想:空间换取时间

  • Trie 树又叫又叫字典树、前缀树、单词查找树,它是一颗多叉查找树。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。

  • 如果海量数据是字符串数据,那么就可以用很小的空间开销构建一颗 Trie 树,空间开销和树高有关。

    {“a”, “to”, “tea”, “ted”, “ten”, “i”, “in”, “inn”}
    在这里插入图片描述

  • 基本性质:

    • 根节点不包含字符,除根节点外的每一个子节点都包含一个字符。
    • 从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串。
    • 每个节点的所有子节点包含的字符互不相同。
  • 优点

    • 插入和查询效率很高,都是O(m),m是待插入/查询字符串长度;(关于查询,会有人认为hash表时间复杂度O(1)不是更快?确实,但是哈希搜索的效率通常取决于hash函数的好坏,因为这决定着冲突的概率)。
    • Trie树中不同关键字不会冲突;
    • 可以对关键字按字典排序。
  • 缺点

    • 当hash函数很好时,Trie树的查找效率会低于哈希查找;
    • 空间消耗比较大。
  • 主要应用:字符串检索、词频统计、字符串排序、前缀匹配等

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40005950/article/details/88079131
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢