版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/datadev_sh/article/details/79109211
算法效率的度量方法
1、事后统计方法:缺陷多。
1)需要耗时耗力编制程序
2)程序执行受环境影响大
3)测试数据的设计困难
2、事前分析估算方法。
看下几个算法
第一种算法,执行次数为: 1+(n+1)+ n + 1 = 2n + 2
第二种算法,执行次数为:1 + 1 + 1 = 3
第三种算法,执行次数为: 1 + n * n + 1 =n² + 2
如果n足够大,那么每个算法的首尾的那次执行可以忽略,则可分为记为:
f(n) = 2n
f(n) = 1
f(n) = n²
算法时间复杂度
算法的时间度量,记作:T(n)= O(f(n))。像这样用大写的O( )来体现算法时间复杂度的记法,称之为大O记法。
推导大O阶方法
如何对 f(n) = n² + 2 进行推导?
1、用常数1取代所有加法常数。
2、只保留最高阶。
3、去除与这个项相乘的常数。
那么,上文的可以记作:
O(f(n)) = 2n 即 O(n) 线性阶
O(f(n)) = 1 即 O(1) 常数阶
O(f(n)) = n² 即 O(n²) 平方阶
常见的时间复杂度
算法空间复杂度
算法空间复杂度的计算公式记作(Space Complexity):S(n) = O(f(n)),其中n是问题规模,f(n)为语句关于n所占存储空间的函数。
如当一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为0(10g2n);当一个算法的空I司复杂度与n成线性比例关系时,可表示为0(n)。