算法记录-后期会有代码基础示例

后期会逐步上传算法的代码实现、实际开发中的使用介绍

1. 分治算法 (Divide and Conquer)

分治算法将一个复杂的问题分解为若干个规模较小的相同问题,递归地解决这些子问题,然后将子问题的解合并得到原问题的解。

经典算法示例:

  • 归并排序 (Merge Sort):将数组分成两半,分别排序后再合并
  • 快速排序 (Quick Sort):选择一个基准元素,将数组分为两部分,再递归排序
  • 二分查找 (Binary Search):在有序数组中查找特定元素
  • 大整数乘法:如 Karatsuba 算法

2. 动态规划 (Dynamic Programming)

动态规划通过把原问题分解为相对简单的子问题的方式求解复杂问题,通常用于求解具有重叠子问题和最优子结构性质的问题。

经典算法示例:

  • 斐波那契数列:通过存储已计算的值避免重复计算
  • 背包问题:0-1 背包、完全背包等
  • 最长公共子序列 (LCS)
  • 最长递增子序列 (LIS)
  • 编辑距离 (Edit Distance)

3. 贪心算法 (Greedy Algorithm)

贪心算法在每一步选择中都采取在当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法。

经典算法示例:

  • 活动选择问题:选择最多的不重叠活动
  • 霍夫曼编码:用于数据压缩
  • 最小生成树:如 Prim 算法和 Kruskal 算法
  • 单源最短路径:Dijkstra 算法

4. 图算法 (Graph Algorithms)

图算法专门用于解决图结构相关的问题,图在计算机科学中应用广泛。

经典算法示例:

  • 图遍历:深度优先搜索 (DFS) 和广度优先搜索 (BFS)
  • 最短路径算法
    • Dijkstra 算法(单源最短路径)
    • Floyd-Warshall 算法(所有节点对最短路径)
    • Bellman-Ford 算法(含负权边的单源最短路径)
  • 最小生成树
    • Prim 算法
    • Kruskal 算法
  • 拓扑排序:用于有向无环图 (DAG)
  • 强连通分量:如 Kosaraju 算法

5. 搜索算法 (Search Algorithms)

搜索算法用于在数据结构中查找特定元素或满足特定条件的解。

经典算法示例:

  • 线性搜索:逐个检查元素
  • 二分搜索:在有序数据中快速查找
  • 插值搜索:改进的二分搜索,适用于均匀分布的数据
  • 指数搜索:先确定范围再使用二分搜索
  • 跳跃搜索:在有序数组中跳跃式查找

6. 排序算法 (Sorting Algorithms)

排序算法用于将数据按特定顺序排列。

经典算法示例:

  • 比较排序
    • 冒泡排序 (Bubble Sort)
    • 选择排序 (Selection Sort)
    • 插入排序 (Insertion Sort)
    • 归并排序 (Merge Sort)
    • 快速排序 (Quick Sort)
    • 堆排序 (Heap Sort)
  • 非比较排序
    • 计数排序 (Counting Sort)
    • 桶排序 (Bucket Sort)
    • 基数排序 (Radix Sort)

7. 字符串算法 (String Algorithms)

字符串算法专门用于处理字符串相关的操作和问题。

经典算法示例:

  • 字符串匹配
    • KMP 算法 (Knuth-Morris-Pratt)
    • Boyer-Moore 算法
    • Rabin-Karp 算法
  • 字符串编辑
    • 编辑距离 (Levenshtein 距离)
  • 字典树 (Trie):用于高效存储和检索字符串集合

8. 数论算法 (Number Theory Algorithms)

数论算法处理数学中的整数和它们的性质。

经典算法示例:

  • 欧几里得算法:计算最大公约数 (GCD)
  • 扩展欧几里得算法:求解线性丢番图方程
  • 素数测试:如 Miller-Rabin 素性测试
  • 快速幂算法:高效计算大数幂
  • 中国剩余定理:求解同余方程组

9. 几何算法 (Geometric Algorithms)

几何算法处理几何对象(点、线、面等)相关的计算问题。

经典算法示例:

  • 凸包算法:如 Graham 扫描算法
  • 最近点对问题:分治法求解
  • 线段相交检测
  • 多边形三角剖分

10. 随机化算法 (Randomized Algorithms)

随机化算法在执行过程中使用随机数来指导计算过程。

经典算法示例:

  • 快速排序的随机化版本
  • 随机化选择算法:在线性时间内找到第 k 小的元素
  • 蒙特卡洛算法:通过随机采样求解问题
  • 拉斯维加斯算法:可能找不到解但找到的解一定正确

11. 近似算法 (Approximation Algorithms)

近似算法用于解决 NP-hard 问题,虽然不能保证得到最优解,但能在多项式时间内得到接近最优的解。

经典算法示例:

  • 旅行商问题 (TSP) 的近似算法
  • 顶点覆盖问题的近似算法
  • 集合覆盖问题的贪心近似算法

12. 并行算法 (Parallel Algorithms)

并行算法设计用于在多处理器或多核系统上并行执行,以提高计算效率。

经典算法示例:

  • 并行归并排序
  • 并行快速排序
  • 并行前缀和 (Parallel Prefix Sum)
  • 并行图算法

总结

不同类型的算法适用于解决不同类型的问题:

  1. 分治算法适用于可以分解为独立子问题的情况
  2. 动态规划适用于具有重叠子问题和最优子结构的问题
  3. 贪心算法适用于具有贪心选择性质的问题
  4. 图算法适用于网络、路径、连接关系相关的问题
  5. 搜索和排序算法是处理数据的基础工具
  6. 字符串算法专门处理文本和模式匹配问题
  7. 数论算法处理数学计算问题
  8. 几何算法处理空间和图形问题
  9. 随机化算法通过引入随机性提高效率或处理复杂问题
  10. 近似算法用于处理难以精确求解的复杂问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香蕉可乐荷包蛋

努力写有用的code

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值