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; } }
相关文章推荐
- spring注入静态成员变量提示invalid setter method
- java多线程笔记
- 学习基数排序之前首先学习计数排序
- Timer和TimerTask
- 阿里云 Ubuntu 14.04 JavaWeb 应用部署
- JAVA连接数据库的方式有多种
- JAVA异常处理
- 2011蓝桥杯java试题及部分参考答案
- java技能
- JAVA基础之接口与内部类
- Java PinBall 简单弹球小游戏【3】球拍左右移动和场景的监听器
- 10012---JavaWeb基础---JSP的9个隐含对象
- EnumSet源码解析
- Java再学习——synchronized与volatile
- javax.net.ssl.SSLException: hostname in certificate didn't match:
- 学习Spring .net(2)--开发环境配置
- 线程池
- JAVA设计模式(23) —<行为型>解释器模式(Interpreter)
- 搭建maven+spring+freemaker+mybatis环境之三
- javac / java