Java 与 字典树(前缀树)
字典树
-
字典树又称前缀树 典型应用:统计、排序(?)和保存大量的字符串(不限于字符串),常被用于搜索引擎中:文本词频统计。 图示:
Java实现
package com; import java.util.Arrays; public class Tris { Tris[] child; boolean isEnd; public Tris(){ this.child = new Tris[26]; this.isEnd = false; } @Override public String toString() { return "Tris{" + "child=" + Arrays.toString(child) + }; } public static void main(String[] args){ Tris tris = new Tris(); tris.insert("beat"); System.out.println(tris.toString()); boolean flag = tris.search("app"); System.out.println(flag); } public void insert(String word){ /** * 要插入的单词 */ Tris node = this; // Java对象 for (int i=0;i<word.length();i++){ char ch = word.charAt(i); int index = ch - a; if (node.child[index] == null){ node.child[index] = new Tris(); } node = node.child[index]; } node.isEnd = true; } public boolean search(String word){ /** * 要查找的单词 */ Tris node = this; for (int i=0;i<word.length();i++){ // System.out.println(i); char ch = word.charAt(i); int index = ch - a; if (node.child[index] == null){ return false; } node = node.child[index]; } return node.isEnd; } }
字典树的具体存储
如代码所示,存入:beat 有图示可以看出,字典树的基本单位是:大小为26的数组,对应26个英文字母(小写)。对于不存在的字符,该位置置为NULL,反之,则new一个Trie对象(代码中写成了Tris,读者留心),置于该位置。