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

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

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

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

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<string>
  5. using namespace std;
  6. int trie[500000][30],p[500000];//trie[u][x]用来表示u串中x字符所指的节点编号
  7. char ch[500000];//ch数组是字符串,每次插入,p数组是标记数组,插入完后打标记
  8. int main(){
  9.  
  10. return 0;
  11. }

下面给出插入代码:

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<string>
  5. using namespace std;
  6. int trie[500000][30],p[500000]tot;
  7. char ch[500000];
  8. inline void Insert(char *ch){
  9. int u=0,len=strlen(ch+1);
  10. for(int i=1;i<=len;++i){
  11. int x=ch[i]-'a';//具体情况具体分析
  12. if(!trie[u][x])trie[u][x]=++tot;//编号新建
  13. u=trie[u][x];
  14. }p[u]=1;ch//标记
  15. }
  16. int main(){
  17.  
  18. return 0;
  19. }

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

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

代码:

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<string>
  5. using namespace std;
  6. int trie[500000][30],p[500000]tot;
  7. char ch[500000];
  8. inline void Insert(char *ch){
  9. int u=0,len=strlen(ch+1);
  10. for(int i=1;i<=len;++i){
  11. int x=ch[i]-'a';//具体情况具体分析
  12. if(!trie[u][x])trie[u][x]=++tot;//编号新建
  13. u=trie[u][x];
  14. }p[u]=1;ch//标记
  15. }inline int query(char *ch){
  16. int u=0,len=strlen(ch+1);
  17. for(int i=1;i<=len;++i){
  18. int x=ch[i]-'a';
  19. if(!trie[u][x])return 0;
  20. u=trie[u][x];
  21. } return 1;//return p[u];
  22. }
  23. int main(){
  24.  
  25. return 0;
  26. }

持续更新中。

Trie树【字典树】浅谈的更多相关文章

  1. 剑指Offer——Trie树(字典树)

    剑指Offer--Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种的单词.对于每一个单词,我们要判断他出没出现过,如果出现了,求第一次出现在第几个位 ...

  2. AC自动机——1 Trie树(字典树)介绍

    AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...

  3. Trie(字典树)

    没时间整理了,老吕又讲课了@ @ 概念 Trie即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种,典型应用是统计和排序大量的字符串(不限于字符串) Trie字典树主要用于存储字符串, ...

  4. 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第9章  查找 - Trie树/字典树/前缀树(键树) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚 ...

  5. [LintCode] Implement Trie 实现字典树

    Implement a trie with insert, search, and startsWith methods. Have you met this question in a real i ...

  6. Trie树|字典树(字符串排序)

    有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...

  7. Trie - leetcode [字典树/前缀树]

    208. Implement Trie (Prefix Tree) 字母的字典树每个节点要定义一个大小为26的子节点指针数组,然后用一个标志符用来记录到当前位置为止是否为一个词,初始化的时候讲26个子 ...

  8. Trie树/字典树题目(2017今日头条笔试题:异或)

    /* 本程序说明: [编程题] 异或 时间限制:1秒 空间限制:32768K 给定整数m以及n个数字A1,A2,..An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大 ...

  9. Trie树(字典树)的介绍及Java实现

    简介 Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也 ...

  10. Trie树 - 字典树

    1.1.什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是最大限 ...

随机推荐

  1. 记录Unity的优化tip(不断更新)

    大概记录遇到的可以优化的点.1.Mesh.UploadMeshData:预先把网格送到GPU unity是这样的,它对一个网格,先把它搞到内存,然后在第一次渲染它时把它送到GPU.但送GPU经常是个瓶 ...

  2. 关于java的二维码的生成与解析

    本文说的是通过zxing实现二维码的生成与解析,看着很简单,直接上代码 import java.io.File; import java.io.IOException; import java.nio ...

  3. HDU-Tick and Tick

    The three hands of the clock are rotating every second and meeting each other many times everyday. F ...

  4. Solon详解(二)- Solon的核心

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  5. [bash]用于查找指定格式目录的程序

    功能: 在指定目录下查找符合yyyy-MM-dd(-d)nnn模式的目录名,例如2020-03-22-b888 目标目录情况: [root@localhost testfolder]# ll tota ...

  6. 从通达信导出文件获取A股所有股票代号名称(至2020年2月24日)

    下文是讲述如何从通达信的输出文件中获得股票信息,如果想用Java爬虫从网页爬取信息请参考:https://www.cnblogs.com/xiandedanteng/p/12808381.html 要 ...

  7. java中包名命名规范

    在idea中创建package遇到的问题 发现一个问题,当我创建一个lesson-02的package时,输入这个包名后,package自动变成了文件夹 在网上搜索发下java包名一般是小写字母进行命 ...

  8. python中使用cookie进行模拟登录

    背景:使用cookie模拟登录豆瓣->我的豆瓣网页 [准备工作] 1.通过Fiddler抓取“我的豆瓣”url: 2.通过Fiddler抓取“我的豆瓣”cookie值. import urlli ...

  9. [LeetCode]322. 零钱兑换(DP)

    题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: coin ...

  10. CentOS 7安装SeaweedFS

    1.从GitHub下载编译好的SeaweedFS 地址:https://github.com/chrislusf/seaweedfs/releases 选择linux_amd64.tar.gz的压缩包 ...