Trie树【字典树】浅谈
最近随洛谷日报看了一下Trie树,来写一篇学习笔记。
Trie树:支持字符串前缀查询等(目前我就学了这些qwq)
一般题型就是给定一个模式串,几个文本串,询问能够匹配前缀的文本串数量。
首先,来定义下Trie树:其根节点为空,定义如下数组:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int trie[500000][30],p[500000];//trie[u][x]用来表示u串中x字符所指的节点编号
char ch[500000];//ch数组是字符串,每次插入,p数组是标记数组,插入完后打标记
int main(){ return 0;
}
下面给出插入代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
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<cstdio>
#include<iostream>
#include<cstring>
#include<string>
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;
}
持续更新中。
Trie树【字典树】浅谈的更多相关文章
- 剑指Offer——Trie树(字典树)
剑指Offer--Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种的单词.对于每一个单词,我们要判断他出没出现过,如果出现了,求第一次出现在第几个位 ...
- AC自动机——1 Trie树(字典树)介绍
AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...
- Trie(字典树)
没时间整理了,老吕又讲课了@ @ 概念 Trie即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种,典型应用是统计和排序大量的字符串(不限于字符串) Trie字典树主要用于存储字符串, ...
- 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第9章 查找 - Trie树/字典树/前缀树(键树) ——<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚 ...
- [LintCode] Implement Trie 实现字典树
Implement a trie with insert, search, and startsWith methods. Have you met this question in a real i ...
- Trie树|字典树(字符串排序)
有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...
- Trie - leetcode [字典树/前缀树]
208. Implement Trie (Prefix Tree) 字母的字典树每个节点要定义一个大小为26的子节点指针数组,然后用一个标志符用来记录到当前位置为止是否为一个词,初始化的时候讲26个子 ...
- Trie树/字典树题目(2017今日头条笔试题:异或)
/* 本程序说明: [编程题] 异或 时间限制:1秒 空间限制:32768K 给定整数m以及n个数字A1,A2,..An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大 ...
- Trie树(字典树)的介绍及Java实现
简介 Trie树,又称为前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定.一个节点的所有子孙都有相同的前缀,也 ...
- Trie树 - 字典树
1.1.什么是Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是最大限 ...
随机推荐
- JS深浅拷贝及其实现
基本数据类型和引用数据类型 JS数据分为基本数据类型和引用数据类型.基本数据类型的变量存储在栈中,引用数据类型则存储在堆中,引用数据类型的存储地址则保存在栈中. 下面来看一个小例子 // 基本数据类型 ...
- Google谷歌在根据流量统计分析当年的2008年汶川大地震
这是一张2008年的老图,Google当时的博文说道:"当我们依照惯例整理和分析谷歌搜索引擎的流量数据时,一条从未见过的曲线出现在我们面前.当意识到发生了什么事情时,我们的眼睛湿润了.&qu ...
- jsBridge
jsBridge https://www.dazhuanlan.com/2019/12/05/5de7eb50739df/ JSBridge的原理 https://juejin.im/post/5ab ...
- Unity双开
open -n /Applications/Unity/Unity.app
- java的方法详解和总结
一.什么是方法 在日常生活中,我们所说的方法就是为了解决某件事情,而采取的解决办法 java中的方法可以理解为语句的集合,用来完成解决某件事情或实现某个功能的办法 方法的优点: 程序变得更加简短而清晰 ...
- 跟着尚硅谷系统学习Docker-【day01】
day01-20200710 p1.基础知识 鲸鱼背上有一些集装箱 学习docker得基础知识 1.强制:熟悉Linux命令和相关背景知识 2.建议有maven和git的相关知识 ...
- JQuery生成图片列表
<!DOCTYPE html> <html> <head> <title>生成图片列表</title> <style type=&qu ...
- 教务管理系统(node+express+mysql)
模块拆分 现在将教务系统拆分成九个模块: 教务系统教师业务:师资管理.教学计划管理.排课管理 教务系统学生业务:考试管理.毕业生管理.学生综合测评 信息查询:自习室查询.课程表查询 考试系统:实现学生 ...
- CTF-BugKu-杂项-29-33
2020.09.15 今天换个新壁纸,换个新背景音乐,燃起来 做题 第二十九题 论剑 https://ctf.bugku.com/challenges#论剑 图片详情没啥信息,不是正方形,考虑改成正方 ...
- [LeetCode]322. 零钱兑换(DP)
题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: coin ...