博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Trie树【字典树】浅谈
阅读量:4879 次
发布时间:2019-06-11

本文共 1577 字,大约阅读时间需要 5 分钟。

最近随洛谷日报看了一下Trie树,来写一篇学习笔记。

Trie树:支持字符串前缀查询等(目前我就学了这些qwq)

一般题型就是给定一个模式串,几个文本串,询问能够匹配前缀的文本串数量。

首先,来定义下Trie树:其根节点为空,定义如下数组:

 

#include
#include
#include
#include
using namespace std;int trie[500000][30],p[500000];//trie[u][x]用来表示u串中x字符所指的节点编号char ch[500000];//ch数组是字符串,每次插入,p数组是标记数组,插入完后打标记int main(){ return 0;}

 

下面给出插入代码:

#include
#include
#include
#include
using namespace std;int trie[500000][30],p[500000]tot;char ch[500000];inline void Insert(char *ch){ int u=0,len=strlen(ch+1); for(int i=1;i<=len;++i){ int x=ch[i]-'a';//具体情况具体分析 if(!trie[u][x])trie[u][x]=++tot;//编号新建 u=trie[u][x]; }p[u]=1;ch//标记 }int main(){ return 0;}

那么,如果我们要查询已知串中有没有当前文本串或前缀,如何做?

每次匹配,如果没有匹配完trie便指向0了,return 0即可。

代码:

#include
#include
#include
#include
using namespace std;int trie[500000][30],p[500000]tot;char ch[500000];inline void Insert(char *ch){ int u=0,len=strlen(ch+1); for(int i=1;i<=len;++i){ int x=ch[i]-'a';//具体情况具体分析 if(!trie[u][x])trie[u][x]=++tot;//编号新建 u=trie[u][x]; }p[u]=1;ch//标记 }inline int query(char *ch){ int u=0,len=strlen(ch+1); for(int i=1;i<=len;++i){ int x=ch[i]-'a'; if(!trie[u][x])return 0; u=trie[u][x]; } return 1;//return p[u];}int main(){ return 0;}

持续更新中。

 

转载于:https://www.cnblogs.com/h-lka/p/11027949.html

你可能感兴趣的文章
28-Ubuntu-远程管理命令-02-查看网卡的配置信息
查看>>
sublime text3---Emmet:HTML/CSS代码快速编写神器
查看>>
Android:AysncTask异步加载
查看>>
要找工作啦
查看>>
JSON for java入门总结
查看>>
OpenCV imshow无法显示图片
查看>>
js线程&定时器
查看>>
路漫漫其修远兮
查看>>
java.lang.IllegalStateException: getOutputStream() has already been cal
查看>>
作业一
查看>>
微信支付开发,开通微信免充值代金券和微信免充值立减与折扣,社交立减金
查看>>
Tree - XGBoost with parameter description
查看>>
LearnMenu
查看>>
越狱机器SSH安装与使用
查看>>
使apache解析域名到目录的方法
查看>>
PHPExcel 使用(1)
查看>>
css3: scrollLeft,scrollWidth,clientWidth,offsetWidth 的区别
查看>>
下载远程文件
查看>>
从零开始学 Java - CentOS 下安装 Nginx
查看>>
地籍信息系统介绍-转载
查看>>