场景一:一根长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
回头看上面四个场景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