【阅读笔记】——时间复杂度

时间复杂度

场景一:一根长10寸的面包,每3天吃掉一寸,那么吃完整个面包须要几天?
答案天然是:3×10=30天
能够记做:T(n) = 3n算法

场景二:一根16寸的面包,每5天吃掉剩余的一半,吃的只剩下1寸,须要多少天?
答案:以2为底,16的对数,简写成log16,因此为 5×log16 = 20天
能够记做: T(n) = 5logn函数

场景三:每2天吃掉一个鸡腿,那么吃掉整个鸡腿须要多少天?
答案:2天
能够记做:T(n) = 2get

场景四:一根长10寸的面包,吃掉第一个一寸须要1天,吃掉第二个1寸须要2天,吃完整个面包须要多少天?
答案:从1累加到10,共55天
能够记做:T(n) = 0.5n^2+0.5ntable

这四个场景分别是:线性式、对数式、常量式、多项式qq

渐进时间复杂度:

好比算法A的相对时间是 T(n)=100n,算法B的相对时间是T(n)=5n^2,到底哪一个运行时间长呢?这要看n的取值tab

官方定义:时间

若存在函数 f(n),使得当 n 趋近于无穷大时,T(n)/f(n) 的极限值为不等于零的常数,则称 f(n) 是 T(n) 的同数量级函数
记做 T(n)=O(f(n)) 称为O(f(n))为算法的渐进时间复杂度,简称时间复杂度,渐进时间复杂度用大写 O 表示,因此也被称为 大O表示法

如何推导出时间复杂度,有以下几个原则:co

  1. 若是运行时间是常数量级,用常数 1 表示
  2. 只保留时间函数中的最高阶项
  3. 若是最高阶项存在,则省去最高阶项前面的系数

回头看上面四个场景block

T(n) = 3n -> T(n) = O(n)
T(n) = 5logn -> T(n) = O(logn)
T(n) = 2 -> T(n) = O(1)
T(n) = 0.5n^2+0.5n -> T(n) = O(n^2)

文章:什么是时间复杂度?ps

相关文章
相关标签/搜索