算法清单

搜索

蒟蒻一般最喜欢DFS

DFS的应用真的是不要再广了……只要是搜索,蒟蒻一般都优先考虑DFS,尤其是暴力

 

BFS应用有下三:

1.无边权或边权都相等的图中求最短路

    有边权的最短路有一个近似BFS的算法叫SPFA(← 几乎无所不能!)

2. 遍历一个连通分支中的所有点(据说这叫扩散性, 也是很形象了)

3. 染色

E.G.封锁阳光大学    https://www.luogu.org/problemnew/show/P1330

 

两种搜索都可以记录路径

dfs直接用一个数组即时记录就可以了

bfs可以把父节点回溯

动态规划

背包DP

序列DP

区间DP

区间DP一般是给一些量和一些操作

问按什么样的顺序进行操作才能取到最优值

关路灯   https://www.luogu.org/problemnew/show/P1220

棋盘DP

划分DP

树型DP

用于处理树上问题(白说)

数位DP

 

期望DP(也叫概率DP)

状压DP

排序

 

冒泡1n ^ 2稳定求最大值
插入1n ^ 2稳定 
归并nn log n稳定 
快排log n ~ nn log n不稳定可以实现区间的排序
选择1n ^ 2稳定 
二叉树nn log n不一定 
1n log n不稳定 
希尔1 不稳定 

(第二列空间复杂度,第三列时间,抱歉少开一行)

其实,大多数时候不得不说STL的sort是最好用的

但是这些排序算法都有很好的思想,而且都有它们独特的用武之地(比如瑞士轮的归并排序)

数据结构

优先队列

并查集

图不连通时,判断有多少个连通的子图 或 判断两点是否连接

很棒的算法ヾ(๑╹◡╹)ノ"     蒟蒻很心水

树状数组(线段树的特殊情况)

区间减法

线段树

区间加法与区间减法

以上二者在模拟的时候可以实现快速查找和快速修改

 

常与差分(前缀和)一起用

 

treap

 

splay

 

AVL

 

主席树

 

树链剖分

 

 

树套树

 

后缀数组

LCT

最短路

SPFA(万能老大哥)ヾ(๑╹◡╹)ノ"  

适用于单源最短路,不能判断负环,但有点入队超过n次就是负环

Dijkstra

一般用它的题目会给出点和边的数量,起点和终点,边的信息(不含负边权)

不能用于负边权

可以类比于prim

Bellman-Ford

因为复杂度高基本不用的……

可判负环

Floyd

多数使用邻接矩阵(好像就是遍历了所有点的spfa)多源最短路

二分

二分答案

xx最大时求yy的最小值

 

xx最小时求xx的最大值

具有单调性 可以转为判定问题

二分查找

实现快速查找 属于基本的基本

很多算法都用它来加速

 

 

二分图

 

最大匹配

 

最佳匹配

 

最大团

 

最大独立集

最小覆盖集

字符串(比较虚)

KMP 

AC自动机

Trie(字典树

后缀数组

LCP

BST

其他

高精度

不用说啦就是要处理的值巨大的时候用

STL库 万能 但不要过度依赖

manacher 检测回文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值