hiho刷题日记——第四天Trie图

pytorch中的wheel文件 whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。 阅读详情

用和kmp相似的思路,将trie树变为trie图。以用于在长篇文章中查找是否存在字典中的单词。

在此强调本文中的‘根’和一般的树中的‘根’不一样!


1.建立trie树

①建立一个结点结构体和初始化函数

typedef struct node{
bool isEnd;//结点是否为单词的结尾
struct node* trie;//结点的根(这里的根和一般的树的根不一样,但是怎么解释呢。不知道啊。)
struct node* next[26];
}TrieNode; 

void initNode(TrieNode *p)
{
p->isEnd = 0;
for(int i=0;i<26;i++)
p->next[i]=NULL;
}

②建立一个head结点并初始化。

③建立一个headTrie结点作为head的根,并将其所有的next指向head。

④对于输入单词的处理:

输入一个字符串并扫描,只要还没结束:

并判断是否存在对应字符的子结点。

若存在,转到子结点;否者建一个子结点并转到该结点。

当单词扫描结束时,将最后一个结点的isEnd属性标为true。

void makeTrie(char *w)
{
int i=0;
TrieNode* p=&head;

while(w[i])
{
if(p->next[w[i]-97])
{
p=p->next[w[i]-97];
}
else
{
TrieNode *q=(TrieNode *)malloc(sizeof(TrieNode));
initNode(q);
p->next[w[i]-97]=q;
p=q;
}
i++;
}
p->isEnd=1;
}

2.建立trie图

用广度遍历。将&head加入遍历队列,并将head.trie赋值为&headTrie作为head的根。

只要遍历队列里还有元素,则做一下操作:

①先取出元素。

②判断是否存在对应字符的子结点。

若有,则将其子结点加入遍历队列,并将其子结点的根结点设为其根结点的对应字符的子结点。。。。。文字好绕,上代码p->next[i]->trie=p->trie->next[i];

若无,则将其对应的子结点设为其根结点的对应字符的子结点。p->next[i]=p->trie->next[i];

这里就是用的kmp的思想。

void makeTrieMap()
{
int front=0,rear=0;
queue[rear++]=&head;
head.trie=&headTrie;
while(front<rear)
{
TrieNode* p=queue[front++];
for(int i=0;i<26;i++) 
{
if(p->next[i]!=NULL)
{
queue[rear++]=p->next[i];
p->next[i]->trie=p->trie->next[i];
}
else
{
p->next[i]=p->trie->next[i];
}
}
}
}


3.使用trie图

扫描文章。

从head开始对比,一直照着next来跳转。直达有一个结点的isEnd为true。说明找到字典中的某个单词了。返回true;

否则直到扫描结束都没找到单词,返回false。

bool find(char *s)
{
int i=0;
TrieNode* p=&head;
while(s[i])
{
p=p->next[s[i]-97];
if(p->isEnd) return true;
i++;
}
return false;
} 


题目全代码:

#include<cstdio>
#include<cstdlib>
using namespace std;


typedef struct node{
bool isEnd;
struct node* trie;
struct node* next[26];
}TrieNode; 


TrieNode head;
TrieNode headTrie;
TrieNode* queue[1000000+1];


void initNode(TrieNode *p)
{
p->isEnd = 0;
for(int i=0;i<26;i++)
p->next[i]=NULL;
}


void makeTrie(char *w)
{
int i=0;
TrieNode* p=&head;

while(w[i])
{
if(p->next[w[i]-97])
{
p=p->next[w[i]-97];
}
else
{
TrieNode *q=(TrieNode *)malloc(sizeof(TrieNode));
initNode(q);
p->next[w[i]-97]=q;
p=q;
}
i++;
}
p->isEnd=1;
}


void makeTrieMap()
{
int front=0,rear=0;
queue[rear++]=&head;
head.trie=&headTrie;
while(front<rear)
{
TrieNode* p=queue[front++];
for(int i=0;i<26;i++) 
{
if(p->next[i]!=NULL)
{
queue[rear++]=p->next[i];
p->next[i]->trie=p->trie->next[i];
}
else
{
p->next[i]=p->trie->next[i];
}
}
}
}


bool find(char *s)
{
int i=0;
TrieNode* p=&head;
while(s[i])
{
p=p->next[s[i]-97];
if(p->isEnd) return true;
i++;
}
return false;
} 


int main()
{
int N;
char word[1000000+1];
char str[1000000+1];


initNode(&head);
for(int i=0;i<26;i++)
headTrie.next[i]=&head;

scanf("%d",&N);
while(N--)
{
scanf("%s",word);
makeTrie(word);
}
makeTrieMap();

scanf("%s",str);
if(find(str)) printf("YES");
else printf("NO");

return 0;
}


Transformer模型在语义通信中的实战应用:从信源编码到端到端优化 本文深入探讨了Transformer模型在语义通信中的实战应用,从信源编码到端到端优化。文章分析了Transformer凭借其强大的全局依赖建模能力,如何成为实现高效语义提取与传输的理想架构,并提供了构建可端到端训练系统的具体实现思路与评估方法,旨在为下一代智能通信系统提供技术参考。 阅读详情

相关推荐

告别密码本!用Windows NPS给华为/华三交换机做Radius认证,SSH登录更安全

本文详细介绍了如何利用Windows NPS实现华为/华三交换机的Radius认证,提升SSH登录安全性。通过集中化管理、精细化控制和完整审计追踪,企业可告别传统密码本,大幅提升网络设备管理效率。文章包含NPS服务部署指南、交换机配置详解及调试技巧,助力企业构建安全高效的统一认证体系。

weixin_42549723的博客 419

hiho刷题日记——第二天Trie树

建立Trie树来统计以某字符串为前缀的单词在字典中的个数。

AngcFun的博客 693

立创EDA + AI 生成 STM32 原理图教程1

AI辅助立创EDA设计STM32原理图教程摘要 本教程系统介绍如何利用AI工具(如Claude Code、DeepSeek等)与立创EDA专业版结合,实现STM32原理图的智能生成与优化。主要内容包括: 技术架构:采用分层设计,AI生成结构化网表数据,由立创EDA执行确定性绘图,确保可审查性 环境搭建:详细说明立创EDA专业版、Node.js等工具的安装配置 五种AI集成方案:包括官方AI Skill、MCP Server等不同实现方式 核心功能: 自动提取STM32引脚定义 智能元件选型与LCSC编号匹配

shihui2003的博客 1548

hiho刷题日记——第十二天刷油漆

题目一共N个结点的树(1至N编号),油漆能够涂M个结点。 将包含1号结点的一部分连通的结点进行涂漆(这里的连通指的是这一些涂漆的结点可以互相到达并且不会经过没有涂漆的结点),然后将剩下的结点拆掉!那么究竟选择哪些结点进行涂漆呢?小Ho想了想给每个结点都评上了分——他希望最后留下来,也就是涂漆了的那些结点的评分之和可以尽可能的高!输入每个测试点(输入文件)有且仅有一组测试数据。 每组测试数据的第一

AngcFun的博客 1014

stm32最小系统_完成一个最小FOC矢量控制系统所需的基本模块和功能配置

当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。首先,看一下矢量控制的基本架构:矢量控制架构如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速...

weixin_39524048的博客 1783

SAP中贸易伙伴的应用原理简析

公司也称为贸易伙伴,是出具合并报表的组织单位,可以为客户和供应商分配公司(贸易伙伴),用于识别集团内关闻公司间的业务往来,在编制合并报表时进行往来账务的计算处理。 如下图某贸易伙伴公司(关联方名称G0059)在我方公司的SAP系统中有多重身份(即是供应商,又是客户)。那么在我方公司SAP系统中建立起公司(贸易伙伴),并关联到供应商和客户主数据中。之后,就可以通过G0059这个贸易伙伴名称来识别与该贸易伙伴间的往来业务。 相应的配置设定如下: 定义公司(贸易伙伴或关联方) 会计凭证中会

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 9815

hiho刷题日记——第九天状态压缩·二

hiho刷题日记——第九天天状态压缩·二题目小Hi和小Ho领到了一个大小为N*M的长方形盘子,他们可以用这个盒子来装一些大小为2*1的蛋糕。但是根据要求,他们一定要将这个盘子装的满满的,一点缝隙也不能留下来,才能够将这些蛋糕带走。这么简单的问题自然难不倒小Hi和小Ho,于是他们很快的就拿着蛋糕离开了~但小Ho却不只满足于此,于是他提出了一个问题——他们有多少种方案来装满这个N*M的盘子呢?代码#in

AngcFun的博客 971

【Qualcomm高通音频】外部Codec调试流程_ES7243E

一、 调试大纲 调试正式开始之前,想办法获取以下信息:硬件设计原理图/Codec参考驱动代码/FAE联系方式。 1. 从硬件设计原理图,我们要获取到Codec芯片和CPU通过什么接口连接,包括数据传输接口、控制接口、reset和power引脚。 2. Codec参考驱动代码,一般正规的厂商都会提供的,至少也提供对应场景的寄存器配置。 接下来开始正式调试,大致分为以下流程: a. 数据...

crow_ch的博客 8266

hiho刷题日记——第十天后序遍历

题目根据给出的二叉树的前序遍历和中序遍历输出后序遍历。输入每个测试点(输入文件)有且仅有一组测试数据。每组测试数据的第一行为一个由大写英文字母组成的字符串,表示该二叉树的前序遍历的结果。每组测试数据的第二行为一个由大写英文字母组成的字符串,表示该二叉树的中序遍历的结果。对于100%的数据,满足二叉树的节点数小于等于26。输出对于每组测试数据,输出一个由大写英文字母组成的字符串,表示还原出的二叉树的后

AngcFun的博客 609

(二)目标检测之 HOG+SVM 算法

文章目录一、概述二、方法概述三、积分图四、AdaBoost五、级联检测六、结果七、复现八、总结参考资料 一、概述   梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。论文地址:Histograms of oriented gradients for human detection HOG有个优点,提取的边缘和梯度特征能很好的抓住局部形状的特点,且因是对图像做了Gamma

天青如水的博客 1万+

ISP 芯片作为独立设备节点的驱动实现要点:多平台结构差异与工程部署策略解析

随着 ISP(Image Signal Processor)从 SoC 集成形态向独立芯片模块演进,在多摄系统、高动态场景、AI 图像前处理等需求下,ISP 作为单独设备节点进行驱动设计已成为主流趋势。尤其在多 SoC 平台(如高通、联发科、展锐、Rockchip)中,不同厂商对 ISP 的抽象方式与驱动接口处理存在显著差异。本文以实际工程为基础,从 Linux 内核下的设备注册流程、media\_entity 配置、VideoDevice 分配、数据 DMA 管理、与 sensor 的流同步控制等关键点展

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1462

hiho刷题日记——第三天KMP算法

用KMP来求模式串在原串中的出现次数.

AngcFun的博客 702

Matlab之App Designer 如何进行三维图形绘制教程

基于Matlab中的App Designer设计可视化界面并进行数据导入及3D绘图,可以直观的在可视化界面上展示分析结果,方便用户进行图形的操作。本文采用案例讲解的方式,详细介绍了如何采用Matlab App Designer建立数据3D绘图的GUI可视化界面的方法和详细的过程步骤,并介绍了导入数据进行计算时需要注意的相关事项,同时提供了详细的代码,以便读者进行学习和操作。

m0_59012156的博客 2066

hiho刷题日记——第七天完全背包

01背包的进化,完全背包。

AngcFun的博客 631

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

hiho刷题日记——第二十八天题外话·堆

题目用prim做最小生成树思路先随便从一个点开始。建立当前节点到各个节点的最短距离。到不了的设为最大值。 然后找到一个未访问的切到达距离最小的节点。将当前节点到该节点的路涵盖进来。将该节点设置为以访问。并重新计算各个节点到已经访问过的节点的最短距离。 重复N-1次。便可以求出最小生成树代码#include<cstdio> #include<cstring> using namespace std

AngcFun的博客 560

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

2018.3.14 训练日记--备战省赛

到现在为止hiho上已经做了29道题了。进度有点慢、听说某队已经A了100多道题了。。膜拜大佬!!明天继续做题,加快速度,跟着大佬,先刷水题吧,因为这个平台的难度排序真的是假的。。还是按着A题人数顺序做题吧...

AAAAAAAC的博客 449

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

hiho刷题日记——第十五最近公共祖先·二

题目与最近公共祖先·一 将设置关系数量和查询关系数量的数量级都从100提升到100000。思路用邻接表,将家族关系建树,查询情况建图。 使用离线算法的方式,通过一次深度优先遍历家族树,得出所有查询的答案。 遍历时,第一次访问结点,将该节点做个标记1。访问完结点的所有子结点时,标记为2。 在遍历到一个节点时,在查询图中扫描所有该节点的边,检查边的另一个端点的标记。若标记为0,无视;若标记为1,

AngcFun的博客 694

hiho刷题日记——第六天01背包

简单的01背包问题,简单的说就是将已有的资源发挥出最大的价值。

AngcFun的博客 743

hiho刷题日记——第五天数字三角形

一道简单题。

AngcFun的博客 509

hiho刷题日记——第一天最长回文子串

求个最长回文子串

AngcFun的博客 636

hiho刷题日记——第十七天最近公共祖先·三

问题还是最近公共祖先问题。思路之前用了Tarjan算法来做。但是这里遇到一个问题就是如果只有一个询问,那么将很难决定到底是针对这个询问就直接进行计算还是等待一定数量的询问一起计算。毕竟无论是一个询问还是很多个询问,使用离线算法都是只需要做一次深度优先搜索就可以了的。 所以这一次改用一个在线算法。 先根据输入建立一棵家族树。 建立好家族树之后,深度遍历该树。使用一个数组来记录走过的路径(无论是从

AngcFun的博客 601

hiho刷题日记——第十六天RMQ-ST算法

这两天有事停了两天。这道题也是调了不少时间。好累呀。真想就直接贴代码。ST定义ST[Len][L]表示左边界为L,长度为2^Len的区间中的最小值。则有 ST[Len][L]=min(ST[Len-1][L],ST[Len-1][L+2^(Len-1)]; 然后就可以循环求出所有的ST。答案取小于这个区间长度的最大的2的非负整数次幂T,则答案为min(ST[Len][L],ST[Len][R+1

AngcFun的博客 888

hiho刷题日记——第一天 A+B

非常简单,无营养。开个头。

AngcFun的博客 398

hiho刷题日记——第二十天线段树的区间修改

题目假设货架上从左到右摆放了N种商品,并且依次标号为1到N,其中标号为i的商品的价格为Pi。小Hi的每次操作分为两种可能,第一种是修改价格——小Hi给出一段区间[L, R]和一个新的价格NewP,所有标号在这段区间中的商品的价格都变成NewP。第二种操作是询问——小Hi给出一段区间[L, R],而小Ho要做的便是计算出所有标号在这段区间中的商品的总价格。 由于题目的数据规模是十万级。直接朴素算法就

AngcFun的博客 566

hiho刷题日记——第十八天RMQ问题再临

题目就是RMQ的题目,只是增加了询问中途修改值得可能性。 但是数量级降到了万级。思路直接就是找最小值了。用最朴素的方法都能过。代码#include<cstdio> using namespace std;const int MAXN=10000+5; int N,w[MAXN]; int a,b,c; int main() { scanf("%d",&N); for(int i=

AngcFun的博客 565

hiho刷题日记——第八天状态压缩·一

当状态转移方程中状态过多时,进行压缩

AngcFun的博客 701
上一篇: hiho刷题日记——第三天KMP算法
下一篇: hiho刷题日记——第五天数字三角形
昂村饭
博客等级 码龄12年 5粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值