算法学习——走在放弃的路上
- 算法笔记
- 一、入门算法
-
- 1.算法必备知识
-
- 2.五大常用算法思想
-
- 2.1递归&分治
- 2.2动态规划
- 2.3贪心
- 2.4回溯
- 2.5分支界定
- 3.基础算法
-
- 3.1暴力求解
-
- 模拟
- 记忆化搜索
- 前缀和&差分
- DFS&BFS
- 排序
- 二分
- 倍增
- 构造
- 算法入门
-
- 高精度计算
- 组合数学
- 字符串哈希
- 字符串匹配
-
- 复数
- 位运算
- 快速幂
- 进位制
- 筛法
- 排列组合
- 二、进阶算法
-
- Manacher
- 背包DP
- 容斥定理
- 抽屉原理
- 哈希表
- 并查集
- 堆
- 树
-
- 图论
-
- 单调栈
- 单调队列
- 三、入土算法
-
- 费马小定理
- 乘法逆元
- 线性同余方程
- 组合数学
- 排列组合
- 概率初步
- 波那契数列
- 块状数组
- ST表
- 拓扑学
算法笔记
一、入门算法
1.算法必备知识
数据结构
数据结构笔记
STL
STL C++
数论
2.五大常用算法思想
2.1递归&分治
2.2动态规划
从暴力到动态规划
2.3贪心
2.4回溯
常用模板
void dfs(int k){//k代表递归层数,或者要填几个空
if(所有空都填完了){
判断最优解/记录答案;
return ;
}
for(枚举这个空能填的选项)
if(这个选项是合法的){
记录下这个空(保存现场);
dfs(k+1);
取消这个空(恢复现场);
}
}
应用:
BFS找最短路径
2.5分支界定
3.基础算法
3.1暴力求解
枚举
样例1:
除法
输入正整数n,按从小到大的顺序输出形如abcde/fghij=n的表达式,其中a~ j恰好为数字0~9的一个排列(可以有前导0),2<=n<=79
样例输入:
62
样例输出:
79546 / 01283 = 62
94736 / 01528 = 62
思路:枚举fghij(可以避免通过除法计算另一个数),通过n*fghij来计算得到abcde,再判断是否每个数字出现一次。
模拟
记忆化搜索
前缀和&差分
前缀和与差分
DFS&BFS
排序
二分
倍增
构造
算法入门
高精度计算
组合数学
字符串哈希
字符串匹配
KMP
KMP算法
复数
位运算
快速幂
进位制
筛法
排列组合
二、进阶算法
Manacher
背包DP
容斥定理
抽屉原理
哈希表
并查集
堆
树
字典树
线段树
树状数组
树上问题
树基础
图论
图的存储
DFS
BFS
BFS找最短路径
单调栈
单调队列
三、入土算法
费马小定理
乘法逆元
线性同余方程
组合数学
排列组合
概率初步
波那契数列
块状数组
ST表
拓扑学