跳至主要內容

Algorithm

kangduu大约 3 分钟

数据结构与算法课程内容包括数据结构与抽象数据类型、算法特性及分类、算法效率与度量、线性结构、顺序表、链表、栈与队列、栈与递归、递归转非递归、> 字符串的存储结构、字符串运算的算法实现、字符串的快速模式匹配、二叉树的抽象数据类型、二叉树的搜索、二叉树的存储结构、树与二叉树的等价转换、树> 的抽象数据类型及树的遍历、树的链式存储结构、树的父指针表示法、树的顺序存储和 K 叉树、图的概念和抽象数据类型、图的存储结构、图的遍历、内排> > 序、检索等内容。

学习文档

算法复杂度

算法复杂度通常用来描述算法执行效率(时间复杂度)和所需存储资源(空间复杂度)。理解算法复杂度有助于我们评估算法在实际应用中的性能。

时间复杂度

时间复杂度是对算法执行时间的估计,描述了输入规模 𝑛 增大时,算法的运行时间如何变化。以下是常见的时间复杂度级别,从低到高:

  1. O(1) - 常数时间
  • 运行时间与输入规模无关,直接输出结果。
  • 示例:数组访问元素。
  1. O(log𝑛) - 对数时间
  • 每次操作将问题规模减小一半。
  • 示例:二分查找。
  1. O(n) - 线性时间
  • 运行时间与输入规模成正比。
  • 示例:遍历数组。
  1. O(n·log𝑛) - 线性对数时间
  • 常见于分治算法。
  • 示例:快速排序、归并排序。
  1. O(n^2) - 二次时间
  • 双重循环中常见。
  • 示例:冒泡排序、选择排序。
  1. O(n^k) - 多项式时间
  • 𝑘 k 次嵌套循环。
  • 示例:矩阵乘法。
  1. O(2^n) - 指数时间
  • 常见于递归解决方案,枚举所有可能。
  • 示例:解决子集问题、斐波那契数列(未优化)。
  1. O(n!) - 阶乘时间
  • 常见于排列问题。
  • 示例:旅行商问题暴力解法。

空间复杂度

空间复杂度描述了算法运行时所需的额外存储空间,通常包括临时变量、递归栈等:

  1. O(1) - 常数空间:不依赖输入规模,使用固定空间。
  2. O(n) - 线性空间:与输入规模成正比。
  3. O(n^2) - 二次空间:需要二维存储,例如矩阵操作。

算法优化

  1. 时间复杂度优化
  • 使用合适的数据结构(如哈希表、优先队列)。
  • 改进算法逻辑(如动态规划代替递归)。
  • 降低循环层数,优化条件判断。
  1. 空间复杂度优化
  • 原地操作减少额外空间需求。
  • 使用懒加载或流式处理避免整体存储。

常见排序算法与实现

Todoist