字典树trie学习
字典树trie的思想就是利用节点来记录单词,这样重复的单词可以很快速统计,单词也可以快速的索引。缺点是内存消耗大
http://blog.csdn.net/chenleixing/article/details/44708533 这个是学习资料来源。
附上个人代码实践操作
package ShuJujieGou;
import javax.swing.tree.TreeNode;
public class Tries {
private int deepLength;
private int nodeNumber;
private final int SIZE = 26;
private treeNode root;
public Tries() {
deepLength = 0;
nodeNumber = 0;
root = new treeNode();
}
private class treeNode {
public int passNumeber;// 从这里进过的节点单词数量
private int endNumber;// 相同单词有几个
private boolean isEnd;// 是否结束
private treeNode[] son;
private char word;
public treeNode() {
this.passNumeber = 0;
this.endNumber = 0;
this.isEnd = false;
son = new treeNode[SIZE];
}
}
private boolean isWord(String str) {
if (str == null || !str.matches("[0-9a-zA-Z]*")) {
return false;
}
return true;
}
public void insertWord(String str) {
if (!isWord(str)) {
System.out.println("请输入正确字符");
return;
}
treeNode node = this.root;
String s = str.toLowerCase();
char[] word = s.toCharArray();
for (char c : word) {
int cn = c - 'a';
if (node.son[cn] == null) {
node.son[cn] = new treeNode();
node=node.son[cn];
node.word = c;
this.nodeNumber++;
node.passNumeber=1;
} else {
node = node.son[cn];
node.passNumeber++;
}
}
node.isEnd = true;
node.endNumber++;
if (this.deepLength < word.length) {
this.deepLength = word.length;
}
}
public void sayMyself() {
System.out.println("length:" + this.deepLength);
System.out.println("nodenumber:" + this.nodeNumber);
}
public void getWord(treeNode node,String str){
for (int x=0;x<SIZE;x++){
if(!(node.son[x]==null)){
String s= str+node.son[x].word;
getWord(node.son[x],s);
if(node.son[x].isEnd){
System.out.println("单词:"+s);
}
}
}
}
public void getAllWord(){//这里添加上面文章没有的把所有单词全部索引出来
String s = "";
getWord(root,s);
}
}
//测试代码
package ShuJujieGou;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Tries tree = new Tries();
tree.insertWord("car");
tree.insertWord("bus");
tree.insertWord("chicken");
tree.insertWord("cook");
tree.insertWord("rock");
tree.insertWord("hard");
tree.insertWord("good");
tree.insertWord("bad");
tree.sayMyself();
tree.getAllWord();
}
}
/*
输出
length:7
nodenumber:29
单词:bad
单词:bus
单词:car
单词:chicken
单词:cook
单词:good
单词:hard
单词:rock
*/
字典树trie学习的更多相关文章
- 字典树(Trie)学习笔记
目录 什么是字典树 如何存储字典树 如何查找字符串有没有出现 第一个图的那种线段树 应用 例题 1.统计难题 2.P2580 于是他错误的点名开始了 什么是字典树 上图来自luogu题解 这是一种字典 ...
- [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序
一. 题目 487-3279 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 274040 Accepted: 48891 ...
- 『字典树 trie』
字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...
- 字典树(Trie)详解
详解字典树(Trie) 本篇随笔简单讲解一下信息学奥林匹克竞赛中的较为常用的数据结构--字典树.字典树也叫Trie树.前缀树.顾名思义,它是一种针对字符串进行维护的数据结构.并且,它的用途超级广泛.建 ...
- Trie字典树的学习及理解
字典树详解见此 我这里学习时主要是看了李煜东的进阶指南里的讲解,以下是书中介绍的内容. Trie,又称字典树,是一种用于实现字符串快速检索的多叉树结构,Tire的每个节点都拥有若干个字符指针,若在插入 ...
- 字典树 trie树 学习
一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种 二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...
- 字典树trie的学习与练习题
博客详解: http://www.cnblogs.com/huangxincheng/archive/2012/11/25/2788268.html http://eriol.iteye.com/bl ...
- 字典树(Trie)的学习笔记
按照一本通往下学,学到吐血了... 例题1 字典树模板题吗. 先讲讲字典树: 给出代码(太简单了...)! #include<cstdio> #include<cstring> ...
- LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串
所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...
随机推荐
- hadoop挂载多硬盘,ZZ-- multiple disks per node
hadoop挂载多硬盘 ...multiple disks per node multiple disks per node Read more at: http://www.queryhome.c ...
- Android--------内存泄露工具LeakCanary
什么是内存泄露 一些对象有着有限的生命周期.当这些对象所要做的事情完成了,我们希望他们会被回收掉.但是如果有一系列对这个对象的引用,那么在我们期待这个对象生命周期结束的时候被收回的时候,它是不会被回收 ...
- 58Ajax
Ajax 1 .客户端浏览器通过执行一段JS代码向服务器发送请求,服务器路由对应的视图函数返回一个json字符串作为响应, 浏览器接受响应后会触发该ajax请求的回调函数success,参数为响 ...
- PHP引用赋值
<?php/** * 在PHP 中引用的意思是用不同的名字访问同一个变量内容 * 只有有名字的变量才可以引用赋值,否则会报错 * 引用赋值 不是在内存上同体,只是把各自的值关联起来 * unse ...
- Symmetric Tree leetcode java
问题描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...
- 5月17 利用AJAX查询数据库
利用AJAX查询数据 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- 解决spring-boot启动异常Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean
第一种: 需要在主类头加上 @EnableAutoConfiguration 第二种: pom文件是否加了 <dependency> <groupId>org.mybatis ...
- MySql习题和答案
MySQL测试题 一.表关系请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号.ps:针对的是自己的生物成绩比物理成绩高,再把符合 ...
- WPF客户端实现.net升级
客户端.net版本由3.5升级到4.5,首先把.net4.5的离线安装包添加到资源,程序运行的时候,从资源中生成离线安装包,并通过传递参数的方式执行静默安装命令,具体代码如下: private sta ...
- POJ 1001 Exponentiation(大数运算)
POJ 1001 Exponentiation 时限:500 ms 内存限制:10000 K 提交材料共计: 179923 接受: 43369 描述:求得数R( 0.0 < R < ...