首页 > 其他 > 详细

1复杂度分析

时间:2019-03-01 22:36:16      阅读:238      评论:0      收藏:0      [点我收藏+]
复杂度分析是整个算法学习的精髓
 
为什么需要复杂度分析?
 
算法执行效率评估:
事后统计法:
1.测试结果非常依赖测试环境
2.测试结果受数据规模影响很大
因此需要一个不用哭啼的测试数据来测试,就可以粗略估算算法执行效率的方法
 
大O复杂度表示法
 
每行代码>cpu>读数据-运算-写数据   :unit_time
所有代码的执行时间T(n)与每行代码的执行次数称正比
 
1 int cal(int n) {
2    int sum = 0;
3    int i = 1;
4    for (; i <= n; ++i) {
5      sum = sum + i;
6    }
7    return sum;
8 }

 

 
 
T(n) = O(2n+2)
 
 1 int cal(int n) {
 2    int sum = 0;
 3    int i = 1;
 4    int j = 1;
 5    for (; i <= n; ++i) {
 6      j = 1;
 7      for (; j <= n; ++j) {
 8        sum = sum +  i * j;
 9      }
10    }
11 }
12  

 

T(n) = O(2n**2+2n+3)
 
O(n),O(n**2)即为时间复杂度:表示一个算法执行效率与数据规模增长的变化趋势。
 
时间复杂度分析:
1.只关注循环执行次数最多的那一段代码
2.加法法则:总复杂度等于量级最大的那段代码的复杂度
3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
 
 
非多项式量级:O(2**n)和O(n!)
 
多项式量级:
1.O(1)
一般情况下,只要算法中不存在循环语句、递归语句,即使代码再多,时间复杂度也是O(1)
2.O(logn),O(nlogn)
1 i=1;
2 while (i <= n)  {
3    i = i * 2;
4 }

 

 
3.O(m+n),O(m*n)
 
 1 void print(int n) {
 2   int i = 0;
 3   int[] a = new int[n];
 4   for (i; i <n; ++i) {
 5     a[i] = i * i;
 6   }
 7  
 8   for (i = n-1; i >= 0; --i) {
 9     print out a[i]
10   }
11 }

技术分享图片

 
空间复杂度分析:表示算的存储空间与数据规模之间的关系
 
 1 void print(int n) {
 2   int i = 0;
 3   int[] a = new int[n];
 4   for (i; i <n; ++i) {
 5     a[i] = i * i;
 6   }
 7  
 8   for (i = n-1; i >= 0; --i) {
 9     print out a[i]
10   }
11 }

O(n)

 

 

 
 

1复杂度分析

原文:https://www.cnblogs.com/huangguoming/p/10458912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!