字典树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学习的更多相关文章

  1. 字典树(Trie)学习笔记

    目录 什么是字典树 如何存储字典树 如何查找字符串有没有出现 第一个图的那种线段树 应用 例题 1.统计难题 2.P2580 于是他错误的点名开始了 什么是字典树 上图来自luogu题解 这是一种字典 ...

  2. [POJ] #1002# 487-3279 : 桶排序/字典树(Trie树)/快速排序

    一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 ...

  3. 『字典树 trie』

    字典树 (trie) 字典树,又名\(trie\)树,是一种用于实现字符串快速检索的树形数据结构.核心思想为利用若干字符串的公共前缀来节约储存空间以及实现快速检索. \(trie\)树可以在\(O(( ...

  4. 字典树(Trie)详解

    详解字典树(Trie) 本篇随笔简单讲解一下信息学奥林匹克竞赛中的较为常用的数据结构--字典树.字典树也叫Trie树.前缀树.顾名思义,它是一种针对字符串进行维护的数据结构.并且,它的用途超级广泛.建 ...

  5. Trie字典树的学习及理解

    字典树详解见此 我这里学习时主要是看了李煜东的进阶指南里的讲解,以下是书中介绍的内容. Trie,又称字典树,是一种用于实现字符串快速检索的多叉树结构,Tire的每个节点都拥有若干个字符指针,若在插入 ...

  6. 字典树 trie树 学习

    一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种   二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...

  7. 字典树trie的学习与练习题

    博客详解: http://www.cnblogs.com/huangxincheng/archive/2012/11/25/2788268.html http://eriol.iteye.com/bl ...

  8. 字典树(Trie)的学习笔记

    按照一本通往下学,学到吐血了... 例题1 字典树模板题吗. 先讲讲字典树: 给出代码(太简单了...)! #include<cstdio> #include<cstring> ...

  9. LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串

    所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...

随机推荐

  1. gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i'

    2017-12-13 10:44:19gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i' 1.3.100 driver/char/random.cst ...

  2. android -------- Data Binding的使用(三)Observable

    解决:databinding 中 ViewModel数据发生改变,View中也要改变(实时更新) BaseObservable 在ViewModel 中可以继承 BaseObservable publ ...

  3. linux基础3

    vim编辑器 vim 操作命令 在命令模式下操作 pageup 往上翻页(重要指数****) pagedown 往下翻页(重要指数****) H 移动到屏幕首行 gg 移动光标到文档的首行(重要指数* ...

  4. Linux文件系统管理

    第九讲 文件系统管理   基础知识点:   硬盘的构成:主要由盘片.机械手臂.磁头与主轴马达所组成,实际的数据都是写在具有磁性物质上的盘片,通过主轴马达让盘片转动,机械手臂可伸展让磁头在盘片上读取数据 ...

  5. Fragment的onCreateView和onActivityCreate之间的区别(转)

    看了有关这个问题的几篇博文,几乎都是引用了stackoverflow上的一个回答: 问题: I know that a fragment’s view hierarchy has to be infl ...

  6. 『PyTorch』第四弹_通过LeNet初识pytorch神经网络_上

    总结一下相关概念: torch.Tensor - 一个近似多维数组的数据结构 autograd.Variable - 改变Tensor并且记录下来操作的历史记录.和Tensor拥有相同的API,以及b ...

  7. input type="number" 时 maxlength不起作用

    给input标签添加 oninput=“if(value.length>11) value=value.slice(0,11)”

  8. MySQL5.6复制技术(2)-主从部署以及半同步配置详细过程

    当前环境规划 主机名称 ec2t-pgtest-01 ec2t-pgtest-02 IP地址 10.189.102.118 10.189.100.195 角色 master slave 系统版本 Ce ...

  9. MSSQL索引视图(indexed view)之简述及使用

    乍一听到这个名字,可能感到有点陌生,这个对象是干嘛的呢?原理是什么?不用着急,我们看看下面的内容,慢慢就明白了.顾名思义,索引视图就是建有索引的视图,这是MSSQL提供的一项技术,用于提升某些SQL语 ...

  10. 使用MongoDB数据库(1)(三十五)

    MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有 ...