Java Trie树
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;
}
}
Java Trie树的更多相关文章
- Trie树(转:http://blog.csdn.net/arhaiyun/article/details/11913501)
Trie 树, 又称字典树,单词查找树.它来源于retrieval(检索)中取中间四个字符构成(读音同try).用于存储大量的字符串以便支持快速模式匹配.主要应用在信息检索领域. Trie 有三种结构 ...
- Trie 树 及Java实现
来源于英文“retrieval”. Trie树就是字符树,其核心思想就是空间换时间. 举个简单的例子. 给你100000个长度不超过10的单词.对于每一个单词,我们要判断他出没出现过,如果出现 ...
- java实现的Trie树数据结构
近期在学习的时候,常常看到使用Trie树数据结构来解决这个问题.比方" 有一个1G大小的一个文件.里面每一行是一个词.词的大小不超过16字节,内存大小限制是1M. 返回频数最高的100个词. ...
- 双数组Trie树(DoubleArrayTrie)Java实现
http://www.hankcs.com/program/java/%E5%8F%8C%E6%95%B0%E7%BB%84trie%E6%A0%91doublearraytriejava%E5%AE ...
- Trie树的java实现
leetcode 地址: https://leetcode.com/problems/implement-trie-prefix-tree/description/ 难度:中等 描述:略 解题思路: ...
- Trie树(字典树)的介绍及Java实现
简介 Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也 ...
- Trie树-字典查找
描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题: ...
- Trie树的应用:查询IP地址的ISP
1. 问题描述 给定一个IP地址,如何查询其所属的ISP,如:中国移动(ChinaMobile),中国电信(ChinaTelecom),中国铁通(ChinaTietong)?现有ISP的IP地址区段可 ...
- 字典树(Trie树)的实现及应用
>>字典树的概念 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树.与二叉查找树不同,Trie树的 ...
随机推荐
- 【spoj LCS2】 Longest Common Substring II
http://www.spoj.com/problems/LCS2/ (题目链接) 题意 求多个串的最长公共子串 Solution 对其中一个串构造后缀自动机,然后其它串在上面跑匹配.对于每个串都可以 ...
- LVS 负载均衡解决方案 (windows IIS)
LVS 负载均衡解决方案 因为我们的产品运行的主流平台是WINDOWS+IIS+SQLSERVER(2000以上版本),而LVS+KEEPALIVED是LINUX下的四层负载均衡软件.其有如下特点: ...
- webx学习
webx框架学习指南 http://openwebx.org/docs/Webx3_Guide_Book.html webx学习(一)——初识webx webx学习(二)——Webx Framewor ...
- IOS开发缓存机制之—本地缓存机制
功能需求 这个缓存机制满足下面这些功能. 1.可以将数据缓存到本地磁盘. 2.可以判断一个资源是否已经被缓存.如果已经被缓存,在请求相同的资源,先到本地磁盘搜索. 3.可以判断文件缓存什么时候过期.这 ...
- RAC 开启gsd和oc4j服务
Oracle 11g RAC中,发现oc4j以及gsd服务都处于offline状态,这是Oracle 11g RAC默认情形.即便如此,并不影响数据库的使用,因为 oc4j 是用于WLM 的一个资源, ...
- github使用介绍
github是个比较火的分布式版本管理工具,适合多人协同工作,感觉比svn好.下面简单介绍一下github使用以及把本地代码和github同步的方法. 首先注册账号 https://github.co ...
- # C#不登录电脑启动程序
我们知道开机自启动程序如果在用户不登录的情况下是不启动的,但是服务类程序是可以跨过用户登录启动的,例如IIS服务,SQL服务.如果我们已经写好了桌面应用程序,又希望他开机自启动,那就需要借助系统服务在 ...
- MongoDB基础之十 shared分片
水平分片实例分布图: mongodb sharding 服务器架构 1. 添加mongdb两个shared实例 # mkdir -p /home/m17 //home/m18 /home/m20 ...
- Python自然语言处理学习笔记之评价(evaluationd)
对模型的评价是在test set上进行的,本文首先介绍测试集应该满足的特征,然后介绍四种评价方法. 一.测试集的选择 1.首先,测试集必须是严格独立于训练集的,否则评价结果一定很高,但是虚高,不适用于 ...
- 移动端开发(一. Viewport(视窗))
手机与浏览器 移动端开发主要针对手机,ipad等移动设备,随着地铁里的低头族越来越多,移动端开发在前端的开发任务中站的比重也越来越大.各种品牌及尺寸的手机也不尽相同.尺寸不同就算了分辨率,视网膜屏 ...