zoukankan      html  css  js  c++  java
  • 字典树(Trie)的java实现

    一、定义

    字典树又称单词查找树Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。 

    字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典树里没有该单词,如果在就在该字母的孩子节点里找是不是有单词的第二个字母,没有说明没有该单词,有的话用同样的方法继续查找.字典树不仅可以用来储存字母,也可以储存数字等其它数据。

    二、java代码实现

        //字典树的java实现
        public class Trie {
            private TrieNode root;
    
            public Trie() {
                root = new TrieNode();
                root.wordEnd = false;
            }
    
            public void insert(String word) {
                TrieNode node = root;
                for (int i = 0; i < word.length(); i++) {
                    Character c = new Character(word.charAt(i));
                    if (!node.childdren.containsKey(c)) {
                        node.childdren.put(c, new TrieNode());
                    }
                    node = node.childdren.get(c);
                }
                node.wordEnd = true;
            }
    
            public boolean search(String word) {
                TrieNode node = root;
                boolean found = true;
                for (int i = 0; i < word.length(); i++) {
                    Character c = new Character(word.charAt(i));
                    if (!node.childdren.containsKey(c)) {
                        return false;
                    }
                    node = node.childdren.get(c);
                }
                return found && node.wordEnd;
            }
    
            public boolean startsWith(String prefix) {
                TrieNode node = root;
                boolean found = true;
                for (int i = 0; i < prefix.length(); i++) {
                    Character c = new Character(prefix.charAt(i));
                    if (!node.childdren.containsKey(c)) {
                        return false;
                    }
                    node = node.childdren.get(c);
                }
                return found;
            }
    
        }
    
        public class TrieNode {
            Map<Character, TrieNode> childdren;
            boolean wordEnd;
    
            public TrieNode() {
                childdren = new HashMap<Character, TrieNode>();
                wordEnd = false;
            }
        }
  • 相关阅读:
    String和StringBuffer相关
    ReactNative 2018了解一下
    发送验证码倒计时效果
    图片实际尺寸大小
    ES6(一)
    组件开发之选项卡-2
    (function(){代码})()自执行函数
    Vue组件学习之三
    Vue下拉菜单实例demo
    窗口大小左右拖动demo
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4887765.html
Copyright © 2011-2022 走看看