你问的是“把所有的算法和其概念都列举一下”——这个范围其实**无限大** 🤯,因为“算法”不仅包括基础数据结构和经典问题(排序、查找、图算法等),还包括数论、密码学、机器学习、人工智能、分布式、量子计算里的算法。严格说全列举是不可能的。 不过我可以给你一个**系统的分类目录**,把常见且重要的算法类型和它们的基本概念总结出来,这样你能有一个“地图”,以后可以往下逐步展开。 --- ## 📚 常见算法分类与概念 (从基础到进阶) ### 1. **基础算法** * **排序算法** * 冒泡排序:相邻元素交换,O(n²)。 * 插入排序:逐个插入到有序区间,O(n²)。 * 选择排序:每次选择最小元素放到前面,O(n²)。 * 归并排序:分治合并,O(n log n)。 * 快速排序:分区 + 递归,O(n log n),最坏 O(n²)。 * 堆排序:利用堆结构,O(n log n)。 * 计数/桶/基数排序:非比较排序,O(n+k)。 * **查找算法** * 顺序查找:挨个比对。 * 二分查找:有序数组,O(log n)。 * 哈希查找:哈希表平均 O(1)。 * 插值查找、斐波那契查找:二分的改进。 --- ### 2. **递归与分治** * 概念:将问题分解为规模更小的同类问题,再合并解。 * 典型:归并排序、快速排序、二分查找、矩阵乘法(Strassen)、棋盘覆盖、FFT。 --- ### 3. **动态规划(DP)** * 概念:将大问题拆成重叠子问题,保存子问题解避免重复计算。 * 典型: * 背包问题(0-1、多重、完全)。 * 最长公共子序列 LCS。 * 最长上升子序列 LIS。 * 矩阵链乘。 * 状压 DP(旅行商、集合覆盖)。 * 树形 DP。 --- ### 4. **贪心算法** * 概念:每一步都做局部最优选择,期望得到全局最优解。 * 典型: * 活动选择问题。 * Huffman 编码。 * Kruskal / Prim(最小生成树)。 * Dijkstra(单源最短路径)。 --- ### 5. **图论算法** * **最短路径** * Dijkstra(非负权)。 * Bellman-Ford(可处理负权)。 * Floyd-Warshall(任意两点)。 * A\*(启发式搜索)。 * **最小生成树** * Kruskal。 * Prim。 * **最大流 / 最小割** * Ford-Fulkerson。 * Edmonds-Karp。 * Dinic。 * **匹配 / 覆盖** * 匈牙利算法。 * Hopcroft-Karp。 --- ### 6. **数论与密码学算法** * 欧几里得算法(gcd)。 * 扩展欧几里得(ax+by=gcd)。 * 快速幂。 * 素数筛法(埃拉托斯特尼筛、线性筛)。 * RSA 加密(模幂运算)。 * 椭圆曲线加密。 --- ### 7. **搜索算法** * DFS(深度优先搜索)。 * BFS(广度优先搜索)。 * 回溯(N 皇后、数独)。 * 分支限界法。 * 启发式搜索(A\*、IDA\*)。 --- ### 8. **字符串算法** * KMP(前缀函数)。 * Rabin-Karp(哈希匹配)。 * Trie 树(字典树)。 * 后缀数组 / 后缀自动机 / 后缀树。 * AC 自动机(多模式匹配)。 * Manacher(回文子串)。 --- ### 9. **几何算法** * 凸包(Graham 扫描、Andrew 算法)。 * 线段相交判定。 * 最近点对。 * 扫描线算法。 * 计算几何中的旋转卡壳。 --- ### 10. **并行与分布式算法** * MapReduce。 * Paxos、Raft(分布式一致性)。 * 并行前缀和(scan)。 * 并行排序。 --- ### 11. **机器学习与 AI 算法** * 线性回归 / 逻辑回归。 * 决策树 / 随机森林。 * k-means 聚类。 * 支持向量机。 * 神经网络(BP 算法、梯度下降)。 * 强化学习(Q-learning)。 --- ### 12. **其他重要算法** * 并查集(Union-Find)。 * 拓扑排序。 * 位运算算法(lowbit、快速加法)。 * 蒙特卡洛 / 拉斯维加斯(随机化算法)。 * Bloom Filter。 * 哈希算法(MD5, SHA)。 --- 🔑 **总结**: * **算法的世界很大**,不同领域有成百上千种算法。 * 学习顺序建议:**排序 → 查找 → 分治/递归 → DP → 贪心 → 图论 → 高级专题(字符串/几何/数论/AI)**。 * 以后遇到具体领域(比如机器学习、密码学),再深入相关算法。 --- 要不要我帮你整理一个 **“学习路线图”**(比如第一阶段学什么,第二阶段学什么),而不是一大堆罗列?这样更方便你系统掌握。