实用数据结构整理
1|0 实用数据结构
1 基础数据结构回顾
1.1 抽象数据类型(ADT)
基础的栈、队列……
1.2 优先队列
priority_queue;
堆优化的队列(常数是make_heap的好几倍)
1.3 并查集
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
时间复杂度:O(α(x))//α(x)<=4
2 区间信息的维护与查询
2.1 二叉索引树(树状数组)
int lowbit(int &x){
return x&-x;
}
void updata(int p,int v){
for(int i=p;i<=n;i+=lowbit(i)) c[i]+=v;
}
int query(int p){
int res=0;
for(int i=p;i;i-=lowbit(i)) res+=c[i];
return res;
}
1)单点修改,区间求和:
updata(x,y);//O(log2(n))
printf("%d\n",query(y)-query(x-1));//O(log2(n))
2)区间修改,单点查询:
updata(x,z);updata(y+1,-z);;//O(log2(n))
printf("%d\n",query(x));//O(log2(n))
2.2 RMQ问题
1)对于max/min问题:
预处理:O(nlog2(n))//log2(n)<=20
查询:O(1)
修改:等价<=>预处理
2)对于其他问题(如求和,etc):
建议不要用
2.3 线段树(1):点修改
建树:O(nlog2(n))
单次修改:O(log2(n))
单次查询:O(log2(n))
空间支撑:4*n
2.4 线段树(2):区间修改
建树:O(nlog2(n))
加上lazy-tage
单次修改:<= O(log2(n))
单次查询:<= O(log2(n))
(数据量越大,lazy-tage优化越明显)
空间支撑:4*n
3 字符串(1)
3.1 Trie
预处理:O(maxlen*kinds)//maxlen为最大字符串长度,kinds为所有字符串中字符种类数目
查询:O(logn)
3.2 KMP算法
预处理:O(n):fail[]/next[]
查询:O(n)匹配
3.3 Manacher算法
O(n):p[i]往两边扩展,更新id,mx
3.4 Aho-Corasick自动机
Trie的升级版,加了队列处理
//以下不会
4 字符串(2)
4.1 后缀数组
4.2 最长公共前缀(LCP)
4.3 基于哈希值的LCP算法
5 排序二叉树
5.1 基本概念
5.2 用Treap实现名次树
5.3 用伸展树实现可分裂与合并的序列
__EOF__

本文链接:https://www.cnblogs.com/shenben/p/6154913.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术