什么是算法中的大 O 符号?

开发 前端
•衡量算法的运行时间如何随着输入大小的变化而变化。例如,时间复杂度为 O(n) 的算法表示其运行时间随着输入大小的线性增长。

大 O 符号是一种数学符号,用于计算机科学中描述算法的效率,特别是时间复杂度和空间复杂度。

它提供了一个上限,描述了随着输入数据大小增加,算法的运行时间或内存使用量的增长速度。

大 O 符号主要用于表达以下内容:

  • 时间复杂度:衡量算法的运行时间如何随着输入大小的变化而变化。例如,时间复杂度为 O(n) 的算法表示其运行时间随着输入大小的线性增长。
  • 空间复杂度:衡量算法的内存使用量如何随着输入大小的变化而变化。例如,空间复杂度为 O(n) 的算法表示其内存使用量随着输入大小的线性增长。

图片图片

01 O(1) - 恒定时间

运行时间恒定,不随输入大小变化。

典型应用

  • 通过索引访问数组中的元素。
  • 插入或删除哈希表中的一个元素(平均)。

02 O(n) - 线性时间

运行时间随输入大小线性增加。

典型应用

  • 遍历列表或数组。
  • 查找未排序数组中的最大或最小元素。
  • 检查未排序数组中是否存在元素。

03 O(log n) - 对数时间

运行时间随输入大小的增加而对数增加。

典型应用

  • 排序数组上的二进制搜索。
  • 平衡二叉搜索树(如 AVL 树、红黑树)上的操作。
  • 查找二进制堆中最大或最小的元素。

04 O(n^2) - 二次方时间

运行时间随输入的大小呈二次方增长。

典型应用

  • 简单的排序算法,如冒泡排序、选择排序和插入排序。
  • 涉及输入内容嵌套循环的算法(例如,比较所有元素对)。
  • 解决某些动态编程问题,如矩阵链式乘法的 native 实现。

05 O(n^3) - 立方时间

运行时间随输入的大小呈立方增长。

典型应用

  • 更复杂的动态编程问题,如 Floyd-Warshall 最短路径算法的天真实现。
  • 使用 native 算法计算两个密集矩阵的乘法。

06 O(n log n) - 线性时间

运行时间以线性对数方式增长,结合了线性增长和对数增长。

典型应用

  • 高效排序算法,如合并排序、快速排序(平均情况)和堆排序。
  • 从排序数组构建二叉搜索树。

07 O(2^n) - 指数时间

输入每增加一个元素,运行时间就增加一倍。

典型应用

  • 将问题分成多个子问题来解决的递归算法,例如旅行推销员问题的 native 解法。
  • 利用递归解决子集和问题。
  • 生成集合的所有子集。

08 O(n!) - 因式分解时间

运行时间随输入大小的因子增长。

典型应用

  • 排列生成问题。
  • 旅行推销员问题的暴力解法。
  • 解决涉及生成集合所有可能排序的问题。

09 O(sqrt(n)) - 平方根时间

运行时间与输入大小的平方根成比例增长。

典型应用

  • 涉及在一定范围内搜索的算法,如查找 n 以内所有素数的 Eratosthenes 筛法。
  • 计算几何中的某些算法。
责任编辑:武晓燕 来源: ByteByteGo
相关推荐

2020-09-29 10:20:02

Java编程语言

2013-01-15 13:28:24

盈利模式移动互联网O2O

2020-10-08 09:44:44

大O符号代码效率代码

2009-01-16 09:42:19

SQL Server算法IO成本

2014-05-09 15:01:37

2020-11-30 06:26:31

算法时间表示法

2020-08-31 06:41:52

RSA算法

2024-01-30 17:48:43

算法字符串性能

2013-01-15 13:59:14

2013O2O细分领域

2013-12-03 10:25:59

平台O2O地图行业

2018-03-29 11:34:54

WOT算法美团

2023-04-14 15:44:20

TypeScrip函数重载

2023-12-29 12:02:44

Python​LEGBLocal

2022-08-21 16:27:36

LinuxShell

2021-10-11 14:27:06

TCP拥塞控制

2014-08-28 15:55:02

2015-11-03 11:10:01

畅享网

2015-11-13 16:25:45

电商

2021-04-29 21:06:49

有序数组算法

2023-09-18 18:52:22

点赞
收藏

51CTO技术栈公众号