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 树简介 大概是人类的话都知道吧 ...
随机推荐
- bzoj1620 / P2920 [USACO08NOV]时间管理Time Management
P2920 [USACO08NOV]时间管理Time Management 显然的贪心. 按deadline从大到小排序,然后依次填充时间. 最后时间为负的话那么就是无解 #include<io ...
- Python3基础 print %d 输出整数
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- Object.getOwnPropertyNames和Object.keys
返回对象自己(非原型继承的属性)的属性名称,包括函数. 方法: Object.getOwnPropertyNames(object); Object.keys(object); 参数: object, ...
- c#pdf查看器
Free Spire.PDF for .NET is a Community Edition of the Spire.PDF for .NET, which is a totally free PD ...
- haskell简明入门(一)
本文的主要内容参考自<Haskell趣学指南> 1. What is Haskell? 以下内容引用自Haskell官网: Haskell是一个先进的,纯粹的函数式编程语言.一个典 ...
- 关于 Flutter的Button按钮没有高度设置
flutter 里面 RaisedButton.FloatingActionButton.FlatButton.OutlineButton 中四个button都无高度设置,如下用RaisedButto ...
- 详解java中CAS机制所导致的问题以及解决——内存顺序冲突
[CAS机制] 指的是CompareAndSwap或CompareAndSet,是一个原子操作,实现此机制的原子类记录着当前值的在内存中存储的偏移地址,将内存中的真实值V与旧的预期值A做比较,如果不一 ...
- ng-grid
请查看官网:http://angular-ui.github.io/ui-grid/ 简单的使用: 总的来说我们 1.需要引入ng-grid-1.3.2.js 2.在html页面需要加入 class ...
- Java 数组如何转成List集合
问题描述:对于给定的如下数组,如何转换成List集合? String[] array = {"a","b","c"}; 参考stackove ...
- python socket 编程(TCP与UDP)
实验环境:python2 一.TCP编程 1.建立TCP服务器 ①创建TCPServer.py文件 ②编写服务器代码 1)创建socket对象,调用socket构造函数 2)绑定ip端口(IP号和端口 ...