Trie树学习1
Trie树。也称为字典数,前缀树,每一个单词的每一个字母依照顺序相应一个节点。有重合的前缀就共享节点。
理想情况下(满的情况)。假若全部的单词都是N长,则树共同拥有N层,每层都是26个子节点。
在程序上,将根节点编号为0,根节点不代表不论什么字符。
在程序的实现上,树能够用数组存储,也能够用指针实现。这里介绍简单的数组方法实现。
用一个child[i][j]保存节点i的编号为j的子节点序号,j相应26个字母。假设child[i][0] == 0,那么说明i节点以下没有a这个子节点。trie树中能够用 value[i]存储附加信息
附代码,參考刘汝佳大白书
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
using namespace std;
#define MAX_NODE 20000
#define sigma_size 26
struct Trie{
int child[MAX_NODE][sigma_size];
int value[MAX_NODE];
int size;
Trie(){
size = 1;
memset(child[0], 0, sizeof(child[0]));
}
int idx(char ch){
return ch - 'a';
}
void Insert(char *str, int val){
int u = 0, num = strlen(str);
for(int i = 0; i < num; i++){
int ch = idx(str[i]);
if(!child[u][ch]){
memset(child[size], 0, sizeof(child[size]));
value[size] = 0;
child[u][ch] = size++;
}
u = child[u][ch];
}
value[u] = val;
}
int Query(char *str){
int u = 0, num = strlen(str);
for(int i = 0; i < num; i++){
int ch = idx(str[i]);
if(child[u][ch]){
u = child[u][ch];
}
else{
return 0;
}
}
return 1;
}
};
int main(){
Trie tree;
tree.Insert("sun",0);
tree.Insert("yan",0);
tree.Insert("sin",0);
cout<<tree.Query("sun");
return 0;
}
Trie树学习1的更多相关文章
- 字典树 trie树 学习
一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种 二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符串连接起 ...
- Trie树学习
这几天在看Hadoop的排序,用到了有TotalSortPartition,其中用到了一种叫做trie树的数据结构,每次看到这种自己之前没有听过的数据结构就想去看一下原理,然后再网上看几篇博客,有时间 ...
- Trie树学习2
数组实现的Trie树 字符容量有限,能够使用链表实现更为大容量的Trie #include <iostream> #include <cstdio> #include < ...
- LeetCode 14. Longest Common Prefix字典树 trie树 学习之 公共前缀字符串
所有字符串的公共前缀最长字符串 特点:(1)公共所有字符串前缀 (好像跟没说一样...) (2)在字典树中特点:任意从根节点触发遇见第一个分支为止的字符集合即为目标串 参考问题:https://lee ...
- 标准Trie字典树学习二:Java实现方式之一
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! 系列文章: 1. 标准Trie字典树学习一:原理解析 2.标准T ...
- 标准Trie字典树学习一:原理解析
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! 系列文章: 1. 字典树Trie学习一:原理解析 2.字典树Tr ...
- 字典树trie的学习与练习题
博客详解: http://www.cnblogs.com/huangxincheng/archive/2012/11/25/2788268.html http://eriol.iteye.com/bl ...
- [学习笔记]我们追过的神奇异或(Trie树系列)
引言 刚学了\(Trie\)树,写篇博客巩固一下. 题目 首先安利一发\(Trie\)树模板 1.Phone List 2.The XOR largest pair 3.The xor-longest ...
- Trie 树进阶学习笔记
前言 没脑子选手发现自己什么都不会 ... \(\text{More and more vegetables, What should I do?}\) 正文 Trie 树简介 大概是人类的话都知道吧 ...
随机推荐
- SQL Server System.Data.SqlClient.SqlException:已成功于服务器建立连接,但是在 登录前的握手期间发生错误
一.错误描述 错误名称如上.整体错误如下: System.Data.EntityException 基础提供程序在Open上失败--> System.Data.SqlClient.SqlExce ...
- SQL优化之limit 1
在某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高查询效率. 例如下面的用户表(主键id,邮箱,密码): create table t_user( id int prim ...
- linux内核分析第四周-使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
本周作业的主要内容就是采用gcc嵌入汇编的方式调用system call.系统调用其实就是操作系统提供的服务.我们平时编写的程序,如果仅仅是数值计算,那么所有的过程都是在用户态完成的,但是我们想将变量 ...
- 关于Drupal中使用hook_schema建立数据库报错PDOException: SQLSTATE[42000]的解决办法
报错信息如下:PDOException: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too l ...
- YouCompleteMe自动补全的安装配置与使用
1 下载 git clone --recursive git://github.com/Valloric/YouCompleteMe 如果执行该命令没报错, 就ok了. 但是中途有可能会断掉, 可以 ...
- Java堆(heap)、栈(stack)和队列的区别
Java里面Stack有两种含义: 一:数据结构 Stack,即java.util.Stack import java.util.Stack; import java.util.Iterator; i ...
- Python学习札记(三十三) 面向对象编程 Object Oriented Program 4
参考:继承和多态 NOTE 著名的开闭原则: 对扩展开放:允许新增Animal子类: 对修改封闭:不需要修改依赖Animal类型的Animal_func()等函数. 1.eg. #!/usr/bin/ ...
- C++ 自定义错误类
#include <iostream> #include <exception> using namespace std; struct MyException : publi ...
- class []的用法
span[class='test'] =>匹配所有带有class类名test的span标签 span[class *='test'] =>匹配所有包含了test字符串的class类 ...
- 【Python】模块学习之matplotlib柱状图、饼状图、动态图及解决中文显示问题
前言 众所周知,通过数据绘图,我们可以将枯燥的数字转换成容易被人们接受的图表,从而让人留下更加深刻的印象.而大多数编程语言都有自己的绘图工具,matplotlib就是基于Python的绘图工具包,使用 ...