美文网首页
时间复杂度

时间复杂度

作者: 王然Gondole | 来源:发表于2017-05-16 17:34 被阅读0次

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

这种用个大写的 O 来代表算法的时间复杂度的记法有个专业的名字叫 “大 O 阶” 记法。那么通过对上述的例子进行总结,我们给出算法的时间复杂度(大 O 阶)的计算方法。

推导 “大 O 阶” 的步骤:
1. 用常数 1 取代运行时间中的所有加法常数。
2. 在修改后的运行次数函数中,只保留最高阶项。
3. 如果最高阶项存在且不是 1 ,则去除与这个项相乘的常数。

举例:

int n = 100000;        // 执行了 1 次

for (int i = 0; i < n; i++) {        // 执行了 n + 1 次
    for (int j = 0; j < n; j++) {        // 执行了 n*(n+1) 次
        printf("i = %d, j = %d\n", i, j);        // 执行了 n*n 次
    }
}

for (int i = 0; i < n; i++) {        // 执行了 n + 1 次
    printf("i = %d", i);        // 执行了 n 次
}

printf("Done");        // 执行了 1 次

执行总次数 = 1 + (n + 1) + n(n + 1) + nn + (n + 1) + 1 = 2n^2 + 3n + 3 这里 n^2 表示 n 的 2 次方。

  1. 执行总次数 = 2n^2 + 3n + 1 这里 n^2 表示 n 的 2 次方;
  2. 执行总次数 = 2n^2 + 3n + 1 这里 n^2 表示 n 的 2 次方;
  3. 执行总次数 = n^2 这里 n^2 表示 n 的 2 次方;

最后得到上面那段代码的算法时间复杂度表示为: O(n^2) 这里 n^2 表示 n 的 2 次方。

各个时间复杂度效率高低:

O(1) 常数阶 < O(logn) 对数阶 < O(n) 线性阶 < O(nlogn) < O(n^2) 平方阶 < O(n^3) < { O(2^n) < O(n!) < O(n^n) }


时间复杂度这个东西,其实更准确点说应该是描述一个算法在问题规模不断增大时对应的时间增长曲线。所以,这些增长数量级并不是一个准确的性能评价,可以理解为一个近似值,时间的增长近似于 logN、NlogN 的曲线。

对增长数量级的常见假设的总结.jpg 二维图解.jpg

相关文章

  • 时间复杂度(下)

    时间复杂度知识点 最好时间复杂度 最坏时间复杂度 平均情况复杂度 均摊时间复杂度

  • day02 四种时间复杂度分析方法

    一、时间复杂度有哪几种? 最好时间复杂度 最坏时间复杂度 平均时间复杂度(概率) 均摊时间复杂度(特殊的平均时间复...

  • 数据结构与算法之美笔记——复杂度分析(下)

    摘要: 时间复杂度还可分为四种,分别是「最好时间复杂度」、「最坏时间复杂度」、「平均时间复杂度」和「均摊时间复杂度...

  • 算法学习笔记-浅析时间复杂度

    四种情况的维度: 最好情况时间复杂度 最坏情况时间复杂度 平均情况时间复杂度 均摊时间复杂度 最好时间复杂度 在最...

  • sort_algorithm

    排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复...

  • 归并排序图解

    平均时间复杂度:O(nlogn) 最佳时间复杂度:O(n) 最差时间复杂度:O(nlogn) 空间复杂度:O(n)...

  • 时间复杂度和空间复杂度笔记

    复杂度分析笔记 复杂度主要分为时间和空间复杂度 时间复杂度:算法(程序)执行的时间变化趋势 空间复杂度:算法(程序...

  • 归并排序 by Python

    最好时间复杂度:O(n*logn)最坏时间复杂度:O(n*logn)平均时间复杂度:O(n*logn)空间复杂度:...

  • day09-冒泡排序+优化

    排序算法(SortAlgorithm) 算法时间复杂度总结: 排序方法时间复杂度(平均)时间复杂度(最坏)时间复杂...

  • 时间复杂度和空间复杂度

    时间复杂度 如何理解算法时间复杂度 1.时间复杂度,表示形式为Big O notation 时间复杂度也可以理解为...

网友评论

      本文标题:时间复杂度

      本文链接:https://www.haomeiwen.com/subject/wnglxxtx.html