1>为什么需要考量一个算法的复杂度?
事后统计法:就我个人而言,算法的好坏,可以考量我们应用效率,有些公司通过大量的测试去考量一个算法,通过测试监控执行的时间复杂度,空间等复杂度,这都必须经过通过数据测试来求得,这种结果相对来说还是比较准确的,毕竟是经过实践测试得到,但是是这种测试依赖集群环境,cpu处理器等影响,可以说是事后统计法,
存在的问题:a>太过于依赖环境,机器硬件,cpu 处理器等影响结果
b>相对麻烦,如果有100亿条数据,只有通过测试才能知道复杂度,需要时间消耗,时间等待,占用机器资源,从而引出通过数学知识分析时间复杂度,空间复杂度,最好,最坏,平均,均摊时间复杂度等复杂度,总体考量一个算法的执行效率,到底能做到节多少的时间,空间
2>复杂度的表示法,(大O表示法)
列1
public int sum_int(int n ){
int sum = 0;
for(int i=1;i<= n i++){
sum +=i
}
return sum;
}
解释,这段代码是从1+2+3+....+10求和运算,我们假设每行代码的执行时间都是相同的.,都是1unit_time,其中
第2行执行了一次,对应时间是1unit_time,
第3行代码执行了n次,所以对应的执行时间是n unit_time,
第3行代码执行了n次,对应的执行时间是n unit_time
总结:总的执行时间是是1unit_time+n unit_time+n unit_time = (2n+1) unit_time,即:T(n) = (2n+1) unit_time从上式子可以看出,代码的执行时间与每行代码的执行时间成正比