理论知识与功能

定义

Trie(字典树),用于实现字符串的快速检索。其每个节点都含有若干个字符指针。

例如我在字典树里插入"abc","ac",那么就会生成一个这样丑陋的东西。

好吧是我的图画的丑陋

初始化

一棵空的Trie仅包含一个根节点,那么他的指针自然也指向空。

注:因为Trie运用在检索字符串,所以此处指针指代字符指针。

插入

对于需要插入的一个字符串S而言,我们令指针P指向根节点。然后依次扫描P中的每个字符c

1.若P的c字符指针指向空(即没有这个节点),则新建一个节点Q,令P的c字符指针指向Q,然后令P=Q。

2.若指向一个已存在的节点,直接让P=Q。

当S字符扫描完毕时,在当前节点P上标记他是一个字符串的末尾。

检索

对于需要检索的一个字符串S而言,我们令指针P指向根节点,然后依次扫描S中的每个字符c

1.若P的c指针指向空,则S没有被插入过Trie,返回False

2.若指向存在的节点,则P=Q

当S扫描完毕时,检查P是否被标记为一个字符的末尾。如果没有,就是False。否则为True

代码实现

int trie[Size][26],tot=1;
void insert(char* str){int len=strlen(str),p=1;for(int k=0;k<len;k++){int ch=str[k]-'a';if(trie[p][ch]==0){trie[p][ch]=++tot;}p=trie[p][ch];}end[p]=true;
}
bool search(char* str){int len=strlen(str),p=1;for(int k=0;k<len;k++){p=trie[p][str[k]-'a'];if(p==0){return false;}}return end[p];
}

题中的Show Time

前缀统计 CH1601

当笔者想去整理的时候…

唉。

好文章 2015模拟题

这道题Trie不是正解,但是可以拿到一定分数。

#include<iostream>
#include<cstring>
using namespace std;
const int Size=200100;
int trie[Size][26];
bool end[Size];
char S[Size];
int tot;
int ans;
int n,m;
bool Search(int pos){//int len=strlen(str),p=1;int len=m,p=1;for(int k=0;k<len;k++){p=trie[p][S[k+pos]-'a'];if(p==0){return false;}}return end[p];
}
void Insert(int pos){//char *str//int len=strlen(str),p=1;if(Search(pos)){//cout<<"重复"<<endl;return;}int len=m,p=1;for(int k=0;k<len;k++){int ch=S[pos+k]-'a';if(trie[p][ch]==0){trie[p][ch]=++tot;//cout<<"p "<<p<<endl;
        }p=trie[p][ch];}end[p]=true;ans++;
}
int main(){//abc bca cab aba bac acb cba//string s; //freopen("B.in","r",stdin);//freopen("B.out","w",stdout);cin>>n>>m>>S;for(int i=0;i<=n-m;i++){//cout<<"运行"<<endl;
        Insert(i);}cout<<ans;
}

50分解法。但由于用到了Trie,所以粘了过来。据题解所述,Trie最高能拿70分,但抱歉我没有看懂。

转载于:https://www.cnblogs.com/Uninstalllingyi/p/11185212.html

基本数据结构—Trie相关推荐

  1. 字符串匹配数据结构 --Trie树 高效实现搜索词提示 / IDE自动补全

    文章目录 1. 算法背景 2. Trie 树实现原理 2.1 Trie 树的构建 2.2 Trie树的查找 2.3 Trie树的遍历 2.4 Trie树的时间/空间复杂度 2.5 Trie 树 Vs ...

  2. 0x16.基本数据结构 — Trie树(字典树)+ A C 自 动 机

    目录 用TrieTrieTrie树来处理整数异或问题是真的舒服! 一.TrieTrieTrie树 TrieTrieTrie的基本操作 0.初始化 1.插入 2.检索 二.TrieTrieTrie树例题 ...

  3. 数据结构-----Trie树

    Trie树 Trie树,又称字典树,前缀树,单词查找树.是字符串算法中一个比较基础的结构.在字符串查找方面有着线性时间的查找速度,是因为查找时间与Trie中的数据总量无关,只与待查找的字符串的长度有关 ...

  4. java单词匹配算法_前端学数据结构与算法(八): 单词前缀匹配神器-Trie树的实现及其应用...

    前言 继二叉树.堆之后,接下来介绍另外一种树型的数据结构-Trie树,也可以叫它前缀树.字典树.例如我们再搜索引擎里输入几个关键字之后,后续的内容会自动续上.此时我们输入的关键词也就是前缀,而后面的就 ...

  5. 数据结构 | 30行代码,手把手带你实现Trie树

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法和数据结构专题的第28篇文章,我们一起来聊聊一个经典的字符串处理数据结构--Trie. 在之前的4篇文章当中我们介绍了关于博弈论的 ...

  6. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

  7. requestmapping里面的参数_golang web开发——参数绑定(上)之用Go实现简单的Trie

    背景 上一篇文章简单地介绍了使用golang如何完成内存中的增删改查,其实在实际工作中用处不是很大,旨在帮助大家了解一些golang的一些基本语法,和golang http包的基本使用,如何获取GET ...

  8. 数据结构知识点总结整理

    数据结构知识点总结整理 0.常考基础必知必会 A. 排序:排序有几种,各种排序的比较,哪些排序是稳定的,快排的算法: B. 查找:哈希查找.二叉树查找.折半查找的对比,哈希映射和哈希表的区别? C. ...

  9. 算法竞赛知识合集 目录(博客中转站)

    目录 0x00. 基本算法 0x01. 基本算法 - 位运算 0x02. 基本算法 - 递推与递归 0x03. 基本算法 - 前缀和与差分 0x04.基本算法 - 二分和三分 0x05.基本算法 - ...

最新文章

  1. windows ssh远程登录阿里云遇到permissions are too open的错误
  2. as3中的 override
  3. 2.C++深入理解 面向对象部分1
  4. 技巧心得:DOS学习心得(一)
  5. 单片机c语言必背代码_stm32单片机编程用库函数好还是寄存器好?
  6. android 3d翻转动画 viewpage,利用ViewPager实现3D画廊效果及其图片加载优化
  7. java 图层,图层Layers的介绍
  8. 牛客每日一题 飞扬的小鸟
  9. 创业失败的18个原因
  10. openjudge666:放苹果
  11. android 自定义抽屉,android – 动作栏抽屉切换自定义图标
  12. 谷粒学院(五)---Maven从入门到入魔
  13. 图像增强系列之图像自动去暗角算法
  14. 推荐系统-基于内容的推荐算法(Content-Based)
  15. 微型计算机相关的英文文献,★计算机系统论文参考文献_计算机系统参考资料范文_计算机系统外文参考文献...
  16. 筋膜枪全国产化电子元件推荐方案
  17. 国密算法sm3java软实现_国密算法实现
  18. HAproxy的配置详解
  19. Cesium:Indexed 3D Scene Layers (I3S)加载
  20. PS获取RGB和十六进制的颜色值

热门文章

  1. 大数据分析的重要性体现在哪里
  2. 5G大数据技术防控新型肺炎疫情
  3. 输出矩阵的左下半三角
  4. 电脑音频服务未运行怎么解决_【电脑技能】女生专属,学会这几招也可以修好你的电脑...
  5. AcWing 1978. 奶牛过马路(前缀和)
  6. C语言记录元音字母的位置,求元音字母
  7. php导入csv 进度条,php 导入导出怎么做成有进度条??
  8. Spark稀疏向量和稠密向量
  9. 文本分类 - 样本不平衡的解决思路与交叉验证CV的有效性
  10. python operator 模块