大O表示法教程:算法复杂度分析指南

大O表示法用于描述算法的时间复杂度或空间复杂度。大O是一种表达算法时间或空间复杂度上界的方式。

  • 描述函数的渐近行为(即时间或空间相对于输入规模的增长率),而不是其具体数值。
  • 可用于比较不同算法或数据结构的效率。
  • 它提供了算法在输入规模维度上的时间上限。为了用大O表示法找到时间复杂度,我们主要考虑算法的最坏情况

!big-o-analysis-banner

大O的定义

给定两个函数 f(n)g(n),如果存在常数 c > 0n0 >= 0,使得对于所有 n >= n0,都有 f(n) <= c*g(n),那么我们说 f(n)O(g(n))

简而言之,如果 f(n) 的增长速度不超过 c*g(n)(对于所有 n >= n0,其中 c 和 n0 是常数),那么 f(n) 就是 O(g(n))

!big-o-image

快速求解表达式大O值的方法

  • 忽略低阶项,仅保留最高阶项。
  • 忽略最高阶项相关联的常数。

> 示例 1: f(n) = 3n2 + 2n + 1000Logn + 5000

> 忽略低阶项后,我们得到的最高阶项是 3n2

> 忽略常数 3 后,我们得到 n2

> 因此,该表达式的大O值为 O(n2)

>

> 示例 2 : f(n) = 3n3 + 2n2 + 5n + 1

> 主导项: 3n3

> 增长阶数: 立方 (n3)

> 大O表示法: O(n3)

大O表示法的性质

以下是大O表示法的一些重要性质:

1. 自反性

对于任何函数 f(n),f(n) = O(f(n))。

示例:

> f(n) = n2, 则 f(n) = O(n2)。

2. 传递性

如果 f(n) = O(g(n)) 且 g(n) = O(h(n)),那么 f(n) = O(h(n))。

示例:

> 如果 f(n) = n^2, g(n) = n^3, 且 h(n) = n^4, 那么 f(n) = O(g(n)) 且 g(n) = O(h(n))。

> 因此,根据传递性,f(n) = O(h(n))。

3. 常数因子

对于任何常数 c > 0 以及函数 f(n) 和 g(n),如果 f(n) = O(g(n)),那么 cf(n) = O(g(n))。

示例:

> f(n) = n, g(n) = n2。那么 f(n) = O(g(n))。因此,2f(n) = O(g(n))。

4. 求和法则

如果 f(n) = O(g(n)) 且 h(n) = O(k(n)),那么 f(n) + h(n) = O(max( g(n), k(n) )。当结合复杂度时,只有最大的项起主导作用。

示例:

> f(n) = n2, h(n) = n3。那么,f(n) + h(n) = O(max(n2 + n3) = O ( n3)

5. 乘积法则

如果 f(n) = O(g(n)) 且 h(n) = O(k(n)),那么 f(n) h(n) = O(g(n) k(n))。

示例:

> f(n) = n, g(n) = n2, h(n) = n3, k(n) = n4。那么 f(n) = O(g(n)) 且 h(n) = O(k(n))。因此,f(n) h(n) = O(g(n) k(n)) = O(n6)。

6. 复合法则

如果 f(n) = O(g(n)),那么 f(h(n)) = O(g(h(n)))。

示例:

> 如果 f(n) = n^2, g(n) = n^3 且 h(n) = log n, 那么根据复合法则 f(h(n))=O(g(h(n)))。因此,(log n)^2=O((log n)^3)。

常见的大O表示法

大O表示法是衡量算法时间和空间复杂度的一种方式。它描述了最坏情况下的复杂度上界。让我们深入了解不同类型的时间复杂度:

1. 线性时间复杂度:大O(n) 复杂度

线性时间复杂度意味着算法的运行时间与输入规模呈线性增长。

例如,考虑一个遍历数组以查找特定元素的算法:

代码片段


CODEBLOCK_30b119f2

2. 对数时间复杂度:大O(log n) 复杂度

对数时间复杂度意味着算法的运行时间与输入规模的对数成正比。

例如,二分查找算法具有对数时间复杂度:

代码片段


CODEBLOCK_53cc08b8

3. 平方时间复杂度:大O(n2) 复杂度

平方时间复杂度意味着算法的运行时间与输入规模的平方成正比。

例如,一个简单的冒泡排序算法具有平方时间复杂度:

代码片段


“python

void bubbleSort(int ar

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/42995.html
点赞
0.00 平均评分 (0% 分数) - 0