rokevin
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
  • 算法复杂度

  • 复杂度
  • 推导大O阶方法
  • 常见的时间复杂度
  • 分析分类
  • 算法要求
    • 时间复杂度确定原则
  • 资料

算法复杂度

时间复杂度所耗时间的大小排列

O(1)O(1)O(1) < O(㏒n)O(㏒n)O(㏒n) < O(n)O(n)O(n) < O(n㏒n)O(n㏒n)O(n㏒n) < O(n2)O(n²)O(n2) < O(n3)O(n³)O(n3) < O(2n)O(2^n)O(2n) < O(n!)O(n!)O(n!) < O(nn)O(n^n)O(nn)

复杂度

  1. 在进行算法分析时,语句总的执行次数T(n)

  2. 是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记住:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数

  3. 用大写O()来体现算法时间复杂度的记法,我们称之为大O记法

  4. 一般情况下,随着n的增大,T(n)增长最慢的算法为最优算法。

推导大O阶方法

  • 用常数1取代运行时间中的所有加法常数。
  • 在修改后的运行次数函数中,只保留最高阶项。
  • 如果最高阶项存在且不是1,则去除与这个项相乘的常数。

得到的结果就是大O阶。

常见的时间复杂度

$O(1)$ 常数复杂度

$O(㏒n)$ 对数复杂度

$O(n)$ 线性复杂度

$O(n㏒n)$ n倍对数复杂度

$O(n²)$ 平方复杂度

$O(n³)$ 立方复杂度

$O(2^n)$ 指数复杂度

$O(n!)$ 阶乘复杂度

$O(n^n)$ 指数复杂度
执行次数函数阶非正式术语
12O(1)常数阶
2n + 30O(n)线性阶
3n² + 2n + 1O(n²)平方阶
5log₂n + 20O(log n)对数阶
2ⁿ(2 的 n 次方)O(2ⁿ)指数阶

分析分类

  • 最好复杂度
  • 最差复杂度
  • 平均复杂度
  • 均摊复杂度

算法要求

  • 正确性
  • 可行性
  • 健硕性
  • 时间效率
  • 空间效率
  • 简单性

时间复杂度确定原则

  • 用常数1来取代运行时间中所有加法常数

  • 修改后的函数中,只保留最高阶项

  • 如果最高阶项存在且不是1,则忽略这个项的系数

  • 常系数可忽略

  • 低次项可忽略

资料

算法分析神器—时间复杂度

一文弄懂算法的时间和空间复杂度分析

例子

算法分析神器—时间复杂度

最近更新:: 2025/9/27 00:43
Contributors: luokaiwen