时间复杂度:程序的运行时间
n:问题的规模大小
T(n):程序的运行时间长短
T(n) = kn + b
也就是说问题规模和时间的长短大致是呈线性变化的
化简完后的函数可以近似的代表原来函数的总体趋势
简化后的式子被称为这个程序算法的时间复杂度,记为O(f(n)),f(n)就是简化后的式子,比如说:T(n)=3n + 3;化简后T(n) ~f(n) = n; 那么就将这个函数的时间复杂记为O(n)
更准确的说O代表了运行时间函数的一个渐进上界,即T(n)在数量级上小于等于f(n)
时间复杂度可以表示某个算法的运行时间的趋势,大致的度量算法效率的好坏
时间复杂度的计算:
一、得出运行时间的函数
二、对函数进行简化
(1) 、用常数1来取代运行时间中所有加法常数
(2) 、修改后的函数中、只保留最高阶项
(3) 、如果最高阶项存在且不是1,则忽略这个项的系数
O(1) :常数阶
简便看出时间复杂度的方法:
一般来说:最内层执行次数最多的语句就决定了整个算法的趋势
对数函数的趋势显然比线性函数好(对数函数随着自变量的增大因变量增长的很慢)
空间复杂度(space complexity)和时间复杂度的理解差不多:
该算法所耗费的存储空间,也是问题规模n的函数
算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间。 S(n)