为什么要进行复杂度分析?
讨论数据结构和算法,必然涉及复杂度分析。包括时间复杂度分析和空间复杂度分析。研究算法和数据结构的最终目的就是为了 “快” 和 “省”,快是指速度快,省是指耗费的内存等硬件资源少。
渐进分析︰在问题规模足够大后,计算成本如何增长?
Asymptotic analysis : 当n >>2后,对于规模为n输入,算法
需执行的基本操作次数:T(n)= ?
需占用的存储单元数:s(n) = ?
时间复杂度
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作
T(n)=O(f(n))
它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度(Asymptotic analysis ),简称时间复杂度。
大O记号
大O表示法描述的是随着数据规模n增长时,算法的增长变化趋势。并不代表实际的执行时间。
大O表示法会忽略常量、低阶和系数。
多数情况下它是最深层循环的语句操作,它的执行次数和包含它的语句的频度相同。语句的频度指的是该语句重复执行的次数。
一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其时间复杂度也是Ο(1)
常见的时间复杂度和其数学特性:
复杂度量级 | 大O表示法 |
---|