字典树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 ...
随机推荐
- 流水的新技术,铁打的Linux
关注嘉为科技,获取运维新知 这一年人工智能火了,凡是带电的专业都往AI上靠,实在靠不上的还可以看AlphaGo下棋,探讨AI能否取代人类.这种全民跟风,比前两年的“云计算”.“大数据”热度还高.就算你 ...
- linux中ping IP可以通但是主机名不通
在/etc/hosts中配置要ping的主机名称映射 例如: ping test1不通 在/etc/hosts中配置 ip地址 test1
- 【洛谷p2669】【一本通p1100】金币
(今天高产) 金币[传送门] 洛谷上的算法标签 自我感觉主要靠循环 这道题是2015年NOIp普及组的题,其实还是很简单的.但为什么写这道题呢? 这道题第一次接触是在一本通刷题的时候,当时学循环结构, ...
- 标准化数据-StandardScaler
StandardScaler----计算训练集的平均值和标准差,以便测试数据集使用相同的变换 官方文档: class sklearn.preprocessing.StandardScaler(copy ...
- Entertainment Box(可多执行的区间问题)
本题出自: Nordic Collegiate Programming Contest 2015 Ada, Bertrand and Charles often argue over which T ...
- 『TensorFlow Internals』笔记_源码结构
零.资料集合 知乎专栏:Bob学步 知乎提问:如何高效的学习 TensorFlow 代码?. 大佬刘光聪(Github,简书) 开源书:TensorFlow Internals,强烈推荐(本博客参考书 ...
- MVC实战之排球计分(一)—— 需求分析与数据库设计
此系列博客目的是制作一款排球计分程序.这系列博客讲讲述此软件的 各个功能的设计与实现. 一.需求分析: 这个程序是排球计分程序,其业务非常简单,具体如下: 1.本程序可以选择用户身份,通过不同角度记录 ...
- linux指令统计日志出现的次数
cat XXX.log|grep ''|grep '条件'| wc -l 单个条件统计 cat XXX.log|grep ''|grep '条件1'|grep '条件2'|grep '条件3' ...
- 把xml转成javabean的工具类
import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import javax.x ...
- IDEA 错误:找不到或无法加载主类
下的java核心编程的源码,只有java文件,没有idea或者eclipse的项目结构信息. 分别用eclipse和idea打开了一遍,方便学习调试. 项目文件夹:E:\学习资料\Java\语法\ja ...