字典树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 ... 
随机推荐
- scrapy-redis(一)
			安装scrapy-redis pip install scrapy-redis 从GitHub 上拷贝源码: clone github scrapy-redis源码文件 git clone https ... 
- 《剑指offer》总结一
			目录 1.二维数组中的查找(223ms) 2.替换空格(24ms) 3.从尾到头打印链表(22ms) 4.重建二叉树(37ms) 5.用两个栈实现队列 1.二维数组中的查找(223ms) 题目描述: ... 
- c 语言连续输入字符型数据
			#include<stdio.h> #include<stdlib.h> void Input1(char* &str){ // /* 这种情况下想要逐个输入字符串数组 ... 
- link标签实现给网页标题前加一个小图标favicon.ico
			使用方法如下:1.<link rel="shortcut icon " type="images/x-icon" href="./favicon ... 
- hbase安装部署
			hbase的安装 ①cp /mnt/hgfs/xiazai/hbase-1.2.5-bin.tar.gz /data tar -xzvf hbase-1.2.5-bin.tar.gz ②环境 sud ... 
- mybatis批量插入的方式
			批量插入数据经常是把一个集合的数据一次性插入数据库,只需要执行一次sql语句,但是批量插入通常会报框架版本号的错误,本人就遇到 com.alipay.zdal.parser.exceptions.a: ... 
- 剑指offer-调整数组内奇偶数顺序
			题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题思路 时间换 ... 
- poj-1061-exgcd
			青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 128285 Accepted: 27962 Descript ... 
- 切换JDK版本时修改JAVA_HOME环境变量不生效(转)
			当电脑上存在多个版本的JDK时,可能 会遇到想切换版本时无论你如何改JAVA_HOME的路径 进入cmd java -version 都无法得到最新设置的JDK版本 如果遇到类似以下信息 Regist ... 
- C++ Leetcode Median of Two Sorted Arrays
			坚持每天刷一道题的小可爱还没有疯,依旧很可爱! 题目:There are two sorted arrays nums1 and nums2 of size m and n respectively. ... 
