- 博客(6)
- 收藏
- 关注
原创 倍增与RMQ(详细版)
本文介绍了倍增思想及其在算法中的应用。倍增法通过每次将处理范围扩大一倍,将线性时间复杂度优化为对数级,常用于RMQ问题和LCA求解。文章通过砝码称重和前缀和查询两个例子说明倍增思想,并详细讲解了ST表实现RMQ问题的过程:预处理阶段使用DP+倍增思想构建查询表,查询阶段通过预处理的对数表实现O(1)时间复杂度的区间最值查询。最后给出了使用ST表解决RMQ问题的C++代码实现,包含预处理、建表和查询处理的全过程。
2025-07-29 13:12:53
951
原创 线段树(详解c++)
c. 线段树的叶节点即为原序列,内部节点除了左右儿子之外,还保存着其分管的某段 区间信息,如区间和、区间最值。a. 线段树是:利用分治思想处理对一段序列进行大量区间操作(区间修改、区间查询) 的数据结构;使用线段树的问题,必须符合区间加法: 也就是通过合并区间的解, 一定能得到问题的解。b. 最长连续出现的字母:无法根据左右区间的最长连续出现的字母,得知总区间的解;c. 通过对子区间的修改或统计,来实现快速对[L,R] 区间的修改、统计。b. 线段树可以在。的时间复杂度内,完成。
2025-07-18 15:21:04
1215
原创 树状数组详解(简单超基础超详细c++)
树状数组原理与应用 树状数组是一种高效处理动态区间操作的数据结构,支持单点修改和区间查询,时间复杂度均为O(log n)。其核心思想是将前缀和拆分为多个子序列的和,利用lowbit函数(x&-x)快速定位子区间。树状数组的每个节点c[x]维护长度为lowbit(x)的区间和,通过父节点x+lowbit(x)形成树状结构。典型操作包括:单点修改(向上更新父节点)和前缀查询(向下累加子区间)。适用于频繁修改与求和的场景,如例题中动态维护数组区间和。实际应用中需注意下标从1开始以避免死循环。
2025-07-16 17:38:15
1318
原创 AC自动机详解(c++超详细版)
摘要: AC自动机是高效的多模式串匹配算法,结合了字典树(Trie)和KMP算法的思想。其核心步骤包括:1) 构建字典树存储模式串;2) 通过BFS为每个节点计算next指针(类似KMP的失败跳转);3) 扫描主串时利用next指针优化匹配。例题展示了如何统计文章中出现的单词数,实现时需注意初始化、Trie构建、next求解及匹配逻辑。AC自动机的时间复杂度为线性,适用于大规模文本匹配场景。
2025-07-15 11:47:00
415
原创 Trie字典树
本文介绍了Trie树(字典树)的实现原理及代码模板。通过图示解释了Trie树的构建过程,其中cnt数组记录字符串数量,邻接矩阵表示字符间的连接关系。提供的C++模板代码包含插入和查询两个核心功能:插入通过遍历字符建立节点并标记结尾,查询则沿着字符路径检查是否存在目标字符串。该模板适用于字符串的存储和快速查找,时间复杂度为O(L),其中L为字符串长度。代码简洁高效,可作为字符串处理的基础工具。
2025-07-14 20:50:13
200
原创 KMP字符串匹配(超详细c++版)
给定父串s和子串p,判断p在s中出现的起始位置(或p在s中出现的次数)遍历s和p,通过一个个字符的匹配进行判断(速度太慢)通过跳过一定相同的部分来加快判断。s为 abcabcde。
2025-07-14 20:37:04
366
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅