【2023.10.02】非官方版普及组考纲

1.基础数据结构:

  1. 栈:
  • 单调栈(比较难)

  • STL-stack(栈,一般比较慢,不用,而且栈好写,没必要)


  1. 队列:
  • 队列

  • 循环队列

  • 单调队列(滑动窗口,比较难)

  • 优先队列(先懂思想,这个是拿堆实现的)

  • 双端队列(这个可以拿两个栈模拟,也可以用一个数组从中间开始)

  • STL-queue(循环队列,还行,有的时候用)

  • deque(双端队列,比较慢,一般不用)

  • priority_queue(优先队列,用的特别多,基本优先队列都用这个,因为手写比较麻烦)


  1. 链表:
  • 链表

  • 双向链表(循环链表)

  • 邻接链表/链式前向星(一般在图论存图的时候用,这两个实质上是一个,但是理解方式不一样,抽象成数学模型长得也不一样,感觉邻接链表好理解,就是一维是数组,一维是链表)

  • STL-list(链表,很慢,而且链表很好写,一般不用)


  1. Hash:
  • 哈希表(这个东西博大精深,实质上是数学的映射(就是函数),学这个的时候先学一下数学的映射)

  • 字符串哈希(这个看着办,其实也是哈希,但是是字符串算法的一种,放到后面学也可以,其实很简单,哈希的东西很多,所以说博大精深,你先学最简单的就行了)

  • STL-map(STL实现的映射表(其实也就是哈希表),这个东西用的很多,主要是因为太方便了,但是不开O2也慢,而且拓展性不是很强(除非你写类继承))


  1. Trie:
  • Trie

  • 01trie(就是从原来存自负,变成存二进制01串,这个串其实可以看成一个数,所以可以跑贪心)


  1. 堆(满足堆性质的树,支持插入,动态维护最大/最小值,删除堆顶元素(就是最大/最小值))

  1. 哈夫曼树

  1. 哈夫曼编码(实质上是贪心)

  1. 对顶堆(用于维护中位数,实际上是一个小技巧,但是可能不太好理解,比较难,可以先不学)

  1. 并查集(实质上是数学上的集合,维护的是一堆集合,每个集合有一个代表元素,支持合并两个集合,查询某个元素所在集合的代表元素)

  1. 路径压缩/按秩合并(并查集极其重要的两个优化,尤其是路径压缩,实际上很好写)

  1. 拓展域/边带权并查集(比较难,可以跳过,实质上是在并查集上进行拓展,维护了一些其他可以一起维护的东西)

学并查集的时候一定要记住一点非常非常重要的:

并查集,擅长维护一类具有传递性的关系

(传递性是一个定义在多元关系上的数学性质,多元关系就是多个元素之间的关系,比方说等于,不等于,就是二元关系,而显然等于具有传递性,因为通过a=b且b=c可知a=c,而显然不等于不具有传递性,因为若a不等于b且b不等于c,不一定a不等于c,这就是传递性(可以从图论角度理解))

2.基础算法:

  1. 前缀和与差分(一个互逆运算,可以把O(n)的区间修改变成O(1)的单点修改,还有其他很重要的应用)

  1. 排序(可以用sort,但是归并排序和基数排序要会,基数排序可以先会思像,归并排序一定要会,归并求逆序对也要会)

  1. 贪心(写一些简单的小题就可以。。。因为贪心难起来可以难死)

  1. 二分,二分答案(最重要的是注意好二分边界,不要死循环,尤其是实数域的二分,对于二分答案,开始很难理解,建议多读一下蓝皮书)

  1. DFS/BFS/floorfill,多写多练,DFS基于回溯,BFS基于队列,floorfill实际上就是BFS

3.图论:

  1. 图和树的基础定义(记熟了,别记混,像什么完全二叉树和满二叉树,高度和深度(这个先看白皮书)等等)

  1. 图和树的遍历(DFS/BFS)(最基础的基础,一定多看几遍蓝皮书第二章前两节,把定义记一记)(记熟定义,DFS树,深度,前中后序遍历,dfs序(一般指欧拉序,欧拉序有两种,蓝皮书上是第一种,你先学这个,可以去网上查查,两种的性质完全等价,但是记录的方式不一样,dfs序有很多很好的性质))

  1. 最短路(学几个名词,松弛,三角形不等式):
  • 单源多汇(Dij(实质上是贪心,一定要学堆优化,不可以处理负数权值)/Ford —(队列优化)>>SPFA(可以处理负数权值,但是在图中没有负数权值的时候一定别用,会被卡T)(Ford/SPFA判负环(可以先放放,但是也很重要)))

  • 多源单汇(反着建图跑单源多汇)

  • 多源多汇(Floyd(基础,学好了,还有一个传递闭包,看不懂可以先不看,就是数学定义比较抽象,实际上很简单,可以问我)/Jhonson(这个比较难,可以先不学))


  1. 最小生成树:
  • Prim(用来解决稠密图的最小生成树,一定学堆优化,跟dij长得很像)

  • Kruskal(在稠密图会被卡,但是不是稠密图很常用,很重要)

  • Boruvka(应用联通块的思想,思想比较重要(其实是奇特,因为你不学这个你都想不到这个思想),可以看看思想,一般不写,比较冷门的算法)


  1. 拓扑排序(其实不是排序,就是有向图的一种遍历方式,很重要,拓扑序有良好的性质)

  1. 欧拉路欧拉图(比较难,而且我估计普及组不考可以先不学)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值