Skip to content

算法学习

算法分类与路线

暴力算法

  • 简单模拟
  • 简单递推
  • 线性枚举

基础排序

  1. 冒泡排序
  2. 选择排序
  3. 插入排序
  4. 计数排序
  5. 接口调用(sort函数)
  6. 比较函数
  7. 结构体排序

5. 接口调用(sort函数)示例(C++)

#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
bool cmp(int a, int b) {
    return a < b; // 升序排序
}
int main() {
    vector<int> arr = {5, 2, 9, 1, 5, 6};
    sort(arr.begin(), arr.end(), cmp);
    for (int num : arr) {
        cout << num << " ";
    }
    return 0;
}

基础数据结构

  • 顺序表(数组)
  • 单链表
  • 双链表
  • 队列
  • 二叉树

基本搜索算法

  • DFS(深度优先搜索)
  • BFS(广度优先搜索)

基础动态规划(DP)

  • 线性DP
  • 记忆化搜索
  • 最大连续子序列
  • 最长单调子序列
  • 最长公共子序列
  • 二维DP
  • 多维DP

先穷举,后剪枝,之后再迭代

基础优化算法

  • 贪心
  • 哈希
  • 前缀和与差分
  • 双指针
  • 滑动窗口
  • 二分查找

进阶排序

  • 快速排序
  • 归并排序

进阶数据结构

  • 哈希表
  • 字符串哈希
  • 并查集
  • 树状数组
  • ST表
  • 线段树
  • 字典树

进阶动态规划

  • 01背包
  • 完全背包
  • 多重背包
  • 分组背包
  • 书上分组背包
  • 基础树形背包
  • 树的重心
  • 区间DP
  • 数位DP
  • 状态压缩DP
  • 博弈论

数学

  • 初等数论
  • 容斥原理
  • 二项式定理

图论算法

  • 最短路
  • 最小生成树
  • 拓扑排序
  • 网络流
  • 欧拉回路
  • 强连通与双连通分析

字符串算法

  • KMP