【基础】算法的时间复杂度分析

1、什么是时间复杂度?

  • 首先,解决一个问题肯定有许多种方式可以实现,那么如何评价一个算法的好坏?处理相同的数据量,用时更少,用的空间更少。
  • 那么如何估算一个程序的运行时间与数据量的关系,这个函数就是算法的时间复杂度。时间复杂度可被称为是渐近的,程序指令运算次数。
  • 空间复杂度是算法在运行过程中临时占用存储空间大小的量度。

2、如何计算时间复杂度?

  • 既要知道常见算法的复杂度,也要会分析自己程序的具体复杂度。
  • 常见的有
    O(n):KMP,欧拉筛法
    O(nlogn):线段树
    O(n^2):某些dp
    O(n^3):Floyd
    O(2^n):二进制枚举
    O(n!):枚举排列
  • 自己分析
    树的递归,logn
    一层循环:n
    。。。。。
  • 更多请转维基百科balabala的

2、如何在算法题中运用时间复杂度?

  • 算法竞赛一般给出1s的时间限制和256MB的空间限制。
  • 对于1s的时间,能跑多少数据
    O(logn):很大,longlong以内都行
    O(n):10的7次方,也就是1000万的数据
    O(nlogn):5*10^5,大约50万的数据
    O(n^2):1000-5000左右
    O(n^3):200-500左右
    O(2^n):20-25
    O(n!):12左右
  • 对于256MB的空间,
    一个int,32位,4个字节。256=2^28 = 67,108,864个in
    也就是6*10^7的数据,如果是long long,那么少一半就可以了。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页