字典树

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

字典树结构包含以下四个主要功能。

  • void insert(String word):添加word,可以重复添加。
  • void delete(String word):删除word,如果word添加过多次,仅删除一个。
  • boolean search(String word):查询word是否在字典树种。
  • int prefixNumber(String pre):返回以字符串pre为前缀的单词数量。
    代码:
//字典树节点的类型
class TrieNode{
    public int path;
    public int end;
    public TrieNode[] map;
    public TrieNode(){
        path = 0;
        end = 0;
        map = new TrieNode[26];
    }
}

public class Trie {
    private TrieNode root;

    public Trie(){
        root = new TrieNode();
    }

    public void insert(String word){
        if(wrod == null)
            return ;
        char[] chs = word.toCharArray();
        TrieNode node = root;
        int index = 0;
        for(int i = 0; i < chs.length; i++)
        {
            index = chs[i] - 'a';
            if(node.map[index] == null)
                node.map[index] = new TrieNode();
            node = node.map[index];
            node.path++;
        }
        node.end++;
    }

public boolean search(String word){
        if(wrod == null)
            return ;
        char[] chs = word.toCharArray();
        TrieNode node = root;
        int index = 0;
        for(int i = 0; i < chs.length; i++)
        {
            index = chs[i] - 'a';
            if(node.map[index] == null)
                return false;
            node = node.map[index];
        }
        return node.end != 0;
    }

}







你可能感兴趣的:(数据结构与算法,算法与数据结构)