字典树学习

智慧楼宇解决方案-全套大合集 智慧楼宇解决方案,楼宇能耗-环境-设备统一管控解决方案。 阅读详情

字典树学习

在某一天,小蒟蒻正在愉快的用暴力解决一道水题,却没想到超时了,经大佬讲解,才知道这是经典的字典树,膜拜dalao。( •̀ ω •́ )✧ ORZ

  1. 那么想要理解字典树,那么就要从最经典的查前前缀开始讲了

如果用暴力的话,直接一个个对比就可以了,但是在求最大公共前缀的个数时,一个个进行对比,当进行检测时,避免不了过多的数据,那么超时是必不可免的了,毕竟,这是做了大量的 无用功,而前缀树是建立一个表(像个树的表)。

那么基础的前缀树是啥样的呢?(字丑见谅)

在这里插入图片描述

也许大家看出来了,字母不在球内,而是在线上。

那么过程是如何实现的呢?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是建树的大致过程

那么我们如何将这个表记录下来呢?

从图中我们可以看出

trie tree的储存方式:将字母储存在边上,边的节点连接与它相连的字母

那么我们可以这么建树

trie[rt] [x]=tot[rt]是上个节点编号,x是字母,tot是下个节点编号

代码如下。

void insert(char *w){
    int len = strlen(w);
    int p = 0;
    for(int i=0; i<len; i++){
        int c = w[i] - 'a';
        if(!trie[p][c]){
            trie[p][c] = k;
            k++;
        }
        p = trie[p][c];
    }
    color[p] = 1;
}
  1. 那么我们如何寻找前缀呢?

见下图

在这里插入图片描述

那么如何实现的呢?

上代码

int search(char *s){
    int len = strlen(s);
    int p = 0;
    for(int i=0; i<len; i++){
        int c = s[i] - 'a';  //主要经过这个定位,这也是为什么虚线出现的原因,因为这个位置没有具体值
        if(!trie[p][c]) return 0;
        p = trie[p][c];
    }
    return color[p] == 1; //判断是否有值,是的话返回1,否则为0;
}

好了,那么只差一个主函数把这些函数连起来

整体代码如下

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAX_NODE = 1000000 + 10;
const int CHARSET = 26;
int trie[MAX_NODE][CHARSET] = {0};
int color[MAX_NODE] = {0};
int k = 1;

void insert(char *w){
    int len = strlen(w);
    int p = 0;
    for(int i=0; i<len; i++){
        int c = w[i] - 'a';
        if(!trie[p][c]){
            trie[p][c] = k;
            k++;
        }
        p = trie[p][c];
    }
    color[p] = 1;
}

int search(char *s){
    int len = strlen(s);
    int p = 0;
    for(int i=0; i<len; i++){
        int c = s[i] - 'a';
        if(!trie[p][c]) return 0;
        p = trie[p][c];
    }
    return color[p] == 1;
}

int main(){
    int t,q;
    char s[20];
    scanf("%d%d", &t,&q);
    while(t--){
        scanf("%s", s);
        insert(s);
    }
    while(q--){
        scanf("%s", s);
        if(search(s)) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

抽空,再讲讲变式吧。

好像挖坑了`(>﹏<)′

17、深入分析Freebase数据集:特征、挑战与类型系统构建 本文深入分析了Freebase数据集的特征、数据建模的挑战以及类型系统的构建方法。Freebase作为知识图谱的重要资源,以RDF三元组形式提供了丰富的结构化知识。文章重点探讨了反向三元组、中介节点(CVT节点)以及非主题三元组对链接预测任务的影响,并通过实验展示了不同类型处理策略对模型性能的作用。此外,文章详细介绍了如何构建一个显式的类型系统,以提升链接预测的准确性,并展望了未来可能的研究方向。 阅读详情

相关推荐

LTE随机接入实战:如何通过PRACH前导码优化小区覆盖半径(附计算公式)

本文深入探讨了LTE网络中PRACH前导码格式对小区覆盖半径的关键影响。通过解析不同前导码格式(如Format 0-3)的物理参数与覆盖能力,提供了核心计算公式与实战Python脚本,指导网络工程师根据覆盖需求、环境多径和容量等因素,科学选择前导码格式以优化边缘用户接入成功率,实现精准的网络规划与优化。

qq_27496129的博客 575

字典树【附加Free例程】

#include #include using namespace std; #define points 26 struct node; typedef struct node *NumTree; struct node { int count; NumTree N[points]; }; NumTree init(NumTree T) { T=new struct node;

u012514377的专栏 737

S32K3双核实战:手把手教你用EB配置CAN与CANFD(附中断/轮询代码对比)

本文详细解析了NXP S32K3双核处理器在CAN/CANFD通信开发中的实战应用。通过Elektrobit配置工具链,从双核通信架构设计到EB tresos Studio配置全流程,再到中断与轮询模式的代码实现对比,全面指导开发者优化S32K3 FlexCAN模块性能,提升汽车电子系统的通信效率与可靠性。

weixin_30955617的博客 440

字典树(Trie查找单词再也不用担心超时了)

字典树(Trie查找单词再也不用担心超时了)  字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不在,说明字典树里没有该单词,如果在就在该字母的孩子节点里找是不是有单词的第二个字母,没有说明没有该单词,有的话用同样的方法继续查找.字典树不仅可以用来储存字母,也可以储存数字等其它数据。 HDU 1247 Hat’s Words

wzningjie的专栏 1082

告别虚拟机!用ZYNQ7000和PYNQ 2.6.0打造一个能实时识别人脸的“智能摄像头”

本文详细介绍了如何利用Xilinx ZYNQ7000开发板和PYNQ 2.6.0框架构建实时人脸识别系统。通过硬件加速和嵌入式开发技术,该系统实现了低延迟、低功耗的独立运行能力,适用于边缘计算和物联网应用。文章包含从环境搭建到核心功能实现的完整指南,并提供了性能优化和问题排查的实用技巧。

weixin_42543046的博客 391

LangChain面试内容整理-知识点27:LangChain性能调优

LLM应用可能面临响应慢、成本高等性能问题。LangChain提供了一些优化方法和经验来提升性能和效率。

不务正业的猿 327

字典树

字典树,顾名思义,就是一种对字母等字符串进行处理的一种特殊数据结构。说白了,就是二十六叉树。定义一个头指针,每次从头指针开始操作。 有两种常用的操作: 1.查询某个字符串的出现次数。 每个节点的count置为0,直到这个字符串结束,在末尾处count++.这样,就记录了该字符串的出现次数。 2.查询某个字符串特定序列出现的次数。 每个节点的count初始化为0,当读入一个字符,则coun...

peizhiinfo 267

如何实现在Go语言中替换程序自身

总结起来,我们可以通过将新的程序二进制文件写入磁盘,并在运行时启动这个新的程序来实现在Go语言中替换程序自身。在Go语言中,有时候我们需要在程序运行时替换程序自身,例如更新程序版本或者进行热重启。本文将介绍一种正确的方式来实现在Go语言中替换程序自身的方法,并提供相应的源代码示例。此外,替换程序自身可能会导致正在运行的程序产生意外行为或终止,请谨慎使用,并确保在合适的时机进行替换操作。实现替换程序自身的关键是将新的程序二进制文件写入到磁盘,并在运行时启动这个新的程序。函数启动新的可执行文件,并在后台运行。

HoUnix的博客 289

【6】字典树学习笔记

WFLS 2023 寒假集训 Day2大纲里字典树在数据结构里,但是个人认为应该属于字符串,就把它放到字符串里了使用数组模拟指针。

WSD3319_的博客 946

labview高低拼接的理解

计算机的一个字节由8位组成,无符号的8位整形表示的范围为0~255,范围太小了,所以用双字节,即16位整形表示更大范围的数字0 ~65535。2.labview中的高低拼接实质是高8位字节左移8位与低8位字节相加,结果是双字节整形。

qwerqwerdhr的博客 835

基于滤波反投影的图像重建算法matlab仿真

基于滤波反投影的图像重建算法是一种用于医学影像重建的计算机辅助技术。该算法可以从投影数据中重建出高质量的三维图像,被广泛应用于医学影像学、CT、PET等领域。本文将详细介绍基于滤波反投影的图像重建算法的原理、步骤和应用。一、原理介绍基于滤波反投影的图像重建算法基于X射线CT成像原理,它的主要思想是通过对投影数据进行处理,反推出被成像物体的三维形状。其核心原理是投影数据与目标物体之间的线性关系,即通过估计目标物体的吸收率来计算投影数据的变化,从而反推出目标物体的三维形状。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 386

学习NLP的第3天——字典树

通过《自然语言处理入门》(何晗)的第2章来学习一下分词的常用算法,因此以下的实现方法都是通过HanLP实现的。这里主要记录我在学习过程中整理的知识、调试的代码和心得理解,以供其他学习的朋友参考。 字符串集合常用字典树(Trie树)存储,这是一种字符串上的树形数据结构。 字典树中每条边都对应一个字,从根节点往下的路径构成一个个字符串。字典树并不直接在节点上存储字符串,而是将词典视作根节点到某...

长行 942

【教程4>第2章>第19节】 GMSK解调系统的FPGA开发与matlab对比验证

MSK(Minimum Shift Keying,最小频移键控)和GMSK(Gaussian Minimum Shift Keying,高斯最小频移键控)都是数字调制技术,主要用于无线通信系统中将数字信号转换为模拟信号进行传输。它们都是连续相位移键控(Continuous Phase Shift Keying, CPK)的一种形式,意味着相邻码元之间没有相位跳变的突变,而是连续过渡,这有助于减少信号带宽和降低邻道干扰。GMSK的解调过程与MSK类似,我们这里还是采用和MSK解调一样的1bit解调方法。

FPGA/MATLAB学习教程/源码/项目合作开发 1221

字典树实现_学习NLP的第3天——字典树

通过《自然语言处理入门》(何晗)的第2章来学习一下分词的常用算法,因此以下的实现方法都是通过HanLP实现的。这里主要记录我在学习过程中整理的知识、调试的代码和心得理解,以供其他学习的朋友参考。字符串集合常用字典树(Trie树)存储,这是一种字符串上的树形数据结构。字典树中每条边都对应一个字,从根节点往下的路径构成一个个字符串。字典树并不直接在节点上存储字符串,而是将词典视作根节点到某节点之间的一...

weixin_34501666的博客 236

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

字典树-学习笔记

字典树-学习笔记 参考文章 浅谈Trie树(字典树) 笔记 代码 #include <iostream> #include <algorithm> #include <string> #include <cstring> #define maxn 100005 using namespace std; int root; int trie[...

画船听雨眠 226

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

论学习字典树的心路历程

字典树很简单字典树很简单字典树很简单最开始是看了B站的AC自动机,才知道要用到字典树这个东西。然后,看着qsc大神的视屏就看懂了ac自动机的代码之后再然后隔了好久,遇到了统计难题这个字典树的入门题目然后就看了下字典树的思路就自己用了一上午时间摸索着,按着ac自动机手敲了字典树果不其然,第一发直接re然后数组又开大100呗,就ac了...

AC即性感 196

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

字典树学习总结

字符串的多模匹配,KMP,字典树,AC自动机,现在学习字典树; 概念: 字典树又称为单词查找树,用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频的统计。优点是利用字符串的公共前缀来减少查询时间,最大限度减少无畏字符串比较,查询效率比哈希树高。 其实字典树就是DFA!!,每层是一个状态,只不过我觉得这棵树的空间利用率不高罢了(HDU1251,G++MLE...

永远鲜红の幼月的博客 247

字典树学习笔记

字典树 英文名 Trie 字典树又称前缀树; 如图: 其特点: 1.根结点为空; 2.除根结点以外,每个结点都可以储存一个单词; 3.每个非叶子结点一般会用到多次; 4.一般是叶子结点存储附加信息; 一般操作为插入和查询;切记数组开大一点 模板: int tree[N][30],rt,val[N]; void add(string s,int p){//s为要插入的字符串,p为附加信息 in...

不知所云的博客 214

算法学习:字典树

字典树 又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 性质 根节点不包含字符,除根节点外每一个节点都只包含一个字符; 从根节点到某一节点,路径上经过的字符连接起来,为该...

weixin_44625138的博客 215

字典树 trie树 学习

一字典树 字典树,又称单词查找树,Trie树,是一种树形结构,哈希表的一个变种 二.性质 根节点不包含字符,除根节点以外的每一个节点都只包含一个字符; 从根节点到某一节点,路径上经过的字符串连接起来,为该节点对应的字符串; 每个节点的所有子节点包含的字符都不相同。 三.优势:利用字符串的公共前缀,节约存储空间和查找时间。时间复杂度O(n) 四.适用于:快速字符...

weixin_33691700的博客 1184

字典树系统学习

学习博客:https://blog.youkuaiyun.com/SongBai1997/article/details/82317259 这篇博客讲的挺好的,很详细,很好理解。 Trie树(字典树) 一、引入 字典是干啥的?查找字的。 字典树自然也是起查找作用的。查找的是啥?单词。 看以下几个题: 1、给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单词表中出现过。 答...

118
上一篇: sort函数再理解
下一篇: 字符串最小最大表示法(样题HDU-3374 String Problem)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值