xfyyzy

Daily Algorithm

每日一个算法主题,按阶段推进。

已完成

预告

阶段0 基础与思维

  • 复杂度入门:大O记号与渐进分析
  • 常见复杂度曲线:O(1) 到 O(2^n)
  • 数学基础:等比/等差、对数与阶乘估算
  • 递归思想:用自我调用描述问题
  • 递归与数学归纳法、循环不变式
  • 常见递推关系与主定理(Master Theorem)
  • 暴力枚举与剪枝的基本套路
  • 测试用例设计与边界条件思维
  • 从伪代码到实现:如何读写算法描述

阶段1 线性结构与排序

  • 数组与顺序存储:随机访问的意义
  • 链表与指针:单链表/双链表/循环链表
  • 栈与队列:表达式求值与BFS中的应用
  • 双端队列与单调队列
  • 哈希表:拉链法与开放定址
  • 集合与映射:基于哈希/树的实现差异
  • 前缀和与差分数组
  • 双指针与滑动窗口
  • 区间处理:扫描、合并与覆盖
  • 线性查找与有序表上的二分查找
  • 插入排序与选择排序
  • 冒泡排序与稳定性讨论
  • 归并排序:分治范式经典案例
  • 快速排序:随机化与三路划分
  • 堆与堆排序:优先队列视角
  • 计数排序与桶排序
  • 基数排序:多关键字/大整数排序
  • Top-K问题:快速选择与堆选择
  • 排序算法综合对比与工程实践
  • 查找表设计:从顺序表到跳表概览

阶段2 递归、搜索与回溯

  • 树的基本概念与遍历:先序/中序/后序/层序
  • 递归与栈帧:函数调用的本质
  • 分治法模板:归并排序与快速幂
  • 二分答案与判定函数设计
  • DFS 深度优先搜索基础
  • BFS 广度优先搜索基础
  • 回溯法框架:子集、排列与组合生成
  • N 皇后与约束满足问题
  • 子集和与组合搜索中的剪枝技巧
  • 搜索顺序与启发式:从暴力到优化
  • 记忆化搜索:自顶向下的动态规划视角
  • 状态空间图与搜索树:如何建模
  • 迭代加深与双向搜索
  • 博弈搜索:极大极小与α−β剪枝
  • 分支限界法:背包与旅行商的搜索求解

阶段3 图论基础

  • 图的表示:邻接矩阵与邻接表
  • 无向图连通性与连通分量
  • 有向图中的可达性问题
  • 图中的BFS/DFS实战:最短路与拓扑排序前置
  • 拓扑排序与有向无环图(DAG)
  • 图中的环检测与有向无环性判断
  • 二分图判定:BFS/DFS 染色法
  • 并查集(Union-Find)与连通块维护
  • 最小生成树:Prim 算法
  • 最小生成树:Kruskal 算法与并查集结合
  • 无权图最短路:BFS 与层次图
  • 单源最短路:Dijkstra 算法(优先队列版)
  • 含负权边最短路:Bellman-Ford 与SPFA
  • 全源最短路:Floyd-Warshall 算法
  • DAG 上的最长/最短路径 DP
  • 强连通分量:Kosaraju/Tarjan 算法
  • 割点与桥:提升图的鲁棒性分析
  • 欧拉回路与欧拉路径:Hierholzer 算法
  • 图的连通度与生成树个数(Kirchhoff 定理概览)
  • 图论建模技巧:流量、匹配与分层图初识

阶段4 动态规划专题

  • 动态规划入门:重叠子问题与最优子结构
  • 从递归到DP:记忆化搜索与自底向上转化
  • 一维DP:斐波那契数列与台阶问题
  • 背包问题 I:0/1 背包
  • 背包问题 II:完全背包与多重背包
  • 背包问题 III:分组背包与混合背包
  • 子序列问题 I:最长上升子序列(LIS)
  • 子序列问题 II:最长公共子序列(LCS)
  • 编辑距离与字符串变换
  • 区间DP:矩阵链乘与石子合并
  • 区间DP:括号匹配与最优加括号
  • 树形DP I:树的直径与重心
  • 树形DP II:换根DP与全局量计算
  • 状态压缩DP I:子集枚举与旅行商问题 TSP
  • 状态压缩DP II:状压匹配与棋盘覆盖
  • 图上DP:DAG 上计数与最长路
  • 数位DP:统计满足条件的数的个数
  • 概率DP:期望值与马尔可夫过程入门
  • DP 优化 I:单调队列优化与斜率优化引入
  • DP 优化 II:分治优化与四边形不等式
  • DP 优化 III:凸Hull Trick 与Li Chao Tree 概览
  • 多维DP:多维状态设计与降维技巧
  • 滚动数组与空间优化
  • DP 常见坑:转移顺序、初始化与无解状态
  • DP 题型综述与建模套路总结

阶段5 高级数据结构与图论进阶

  • 平衡二叉搜索树家族概览:AVL/红黑树/Splay/Treap
  • 红黑树插入与删除思想
  • Splay 树与伸展操作的摊还分析
  • Treap 与随机化平衡思想
  • 跳表(Skip List)与随机化搜索结构
  • 线段树基础:区间求和与区间最值
  • 线段树进阶:懒标记与区间更新
  • 树状数组(Fenwick Tree)与前缀操作
  • 稀疏表(Sparse Table)与RMQ问题
  • 可持久化数据结构:持久化栈/线段树概览
  • 树的重心与重链剖分(HLD)
  • 树上路径问题:LCA(二叉提升)算法
  • 离线算法:Tarjan LCA 与并查集在树上的应用
  • 莫队算法(Mo's Algorithm)与离线分块思想
  • 网络流建模:最大流与最小割定理
  • 最大流算法:Ford-Fulkerson 与 Edmonds-Karp
  • 最大流算法:Dinic 与分层网络
  • 最小费用最大流:SPFA/势能与费用流建模
  • 二分图最大匹配:匈牙利算法与Hopcroft-Karp
  • 一般图匹配与 Edmonds Blossom 算法概览

阶段6 字符串与文本算法

  • 字符串基础与字典序、前后缀概念
  • 朴素字符串匹配与改进策略
  • KMP 算法:部分匹配表与失配跳转
  • Z-Algorithm 与前缀函数
  • Rabin-Karp:滚动哈希与多模式匹配初步
  • Trie 树(前缀树)与字典储存
  • Aho-Corasick 自动机:多模式匹配
  • 后缀数组(Suffix Array)与排名/height 数组
  • 后缀数组构建算法(倍增法等)
  • 后缀自动机(Suffix Automaton)基础
  • 后缀树与Ukkonen算法概览
  • Manacher 算法:线性时间求最长回文子串
  • 最小表示法与字符串旋转最小字典序
  • 字符串哈希:单哈希与双哈希、防冲突技巧
  • 文本压缩算法:Huffman/LZ 家族概览

阶段7 数学与数论算法

  • 整除与余数:从欧几里得算法到扩展欧几里得
  • 快速幂与模运算技巧
  • 线性筛与素数表生成
  • 最小质因子筛与快速分解
  • 组合数计算:杨辉三角与预处理阶乘
  • 大数取模下的排列组合与逆元
  • 中国剩余定理(CRT)与同余方程组
  • 矩阵快速幂与线性递推
  • 离散对数问题与 Baby-step Giant-step
  • FFT 快速傅里叶变换:卷积加速乘法
  • NTT 数论变换与模意义下的卷积
  • Miller-Rabin 随机素性测试
  • Pollard-Rho 随机因数分解算法
  • 概率与期望在算法中的应用
  • 生成函数与计数问题概览

阶段8 计算几何、随机化与工程实践

  • 平面几何基础:向量、点积、叉积与夹角
  • 线段相交判定与常见几何误差坑
  • 凸包算法:Graham Scan 与单调链
  • 旋转卡壳:最远点对与直径问题
  • 多边形面积与点在多边形内判定
  • 随机化算法:随机快速排序与随机选择
  • 随机化数据结构:随机哈希与跳表再访
  • 流式/在线算法:滑动窗口与数据流采样
  • 外存与缓存友好算法概览(B+树/LSM 树)
  • 机器学习中的经典算法:K-Means 与梯度下降