您的位置:首页 > 编程语言 > Java开发

Java Trie树

2015-11-15 00:46 363 查看
Tire树,又叫字典树,主要是用来查找单词,词频统计的.

老规矩,直接上代码.

package tireTree;

public class TireTree {
TireNode root;

public TireTree(TireNode root) {
this.root = root;
}

private void insertElement(TireNode root, String word) {
if (word == null || word.isEmpty())
return;
char[] elements = word.toCharArray();
int index = elements[0] - 'a';
if (root.getNode()[index] == null) {
root.getNode()[index] = new TireNode();
root.getNode()[index].setElement(elements[0]);
}
if (word.length() == 0)
return;
insertElement(root.getNode()[index], word.substring(1));
}

private boolean searchWord(TireNode root, String word) {
if (word == null || word.isEmpty())
return false;
TireNode p = root;
int index = 0;
while (p != null && index < word.length()) {
int k = word.charAt(index) - 'a';
if (root.getNode()[k] != null) {
if (index == word.length() - 1) {
root.getNode()[k].setFreq(root.getNode()[k].getFreq() + 1);
return true;
} else {
root = root.getNode()[k];
index++;
}
} else {
return false;
}
}
return false;
}

public static void main(String[] args) {
TireNode root = new TireNode();
TireTree tree = new TireTree(root);
String context = "My Name is Tom,What is your name?My name is Jenny.";
String target = "tom";
for (String word : TireTree.transContext(context)) {
tree.insertElement(root, word);
}
System.out.println(tree.searchWord(root, target));
}

public static String[] transContext(String context) {
String c = context.toLowerCase();
c = c.replaceAll("[,?!.]", " ");
c = c.substring(0, context.length() - 1);
return c.split(" ");
}
}

class TireNode {
private TireNode[] node;
private int freq;
private char element;

public void setElement(char element) {
this.element = element;
}

public TireNode() {
node = new TireNode[26];
freq = 0;
}

public TireNode[] getNode() {
return node;
}

public int getFreq() {
return freq;
}

public char getElement() {
return element;
}

public void setNode(TireNode[] node) {
this.node = node;
}

public void setFreq(int freq) {
this.freq = freq;
}

}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: