快捷搜索: 王者荣耀 脱发

数据结构----效率问题

数据结构----效率问题

一.衡量效率

1.衡量效率的两个维度

1.时间维度:时间复杂度:Time Complexity

时间复杂度是代码总的运行次数(粗糙)

2.空间维度:空间复杂度:Space Complexity

空间复杂度是额外申请的空间

3.注意:

1.复杂度表示方法为 O()

2.如果时间和空间不能同时达到一个理想状态,时间优先,用空间换时间 。一些特殊的应用场合会用空间换时间

3.一般算循环的时间复杂度,看循环体执行几次就可以,也可以看代码总执行次数是看总共执行了多少条语句

2.复杂度要求

1.多项级的运算结果,只保留最大项(最高次幂)

2.常系数省舍去

3.如果程序在有限棵树的资源消耗内即可完成(与n无关),那么复杂度为O(1)

3.看下面代码判断时间复杂度

//时间复杂度为 O(n)
for(int i=0;i<n;i++){
	cout<<i<<endl;
}

//时间复杂度为 O(log2的n次方)
for(int i=1;i<=n;i*=2){
	cout<<i<<endl;
}

//时间复杂度为 O(n的平方)
for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        cout<<i<<"  "<<j<<endl;
    }
}

//时间复杂度为 O(n的立方)
for(int i=1;i<=n;i++){
    for(int j=1;j<=i;j++){
        for(int k=1;k<=j;k++){
       	    cout<<i<<"  "<<j<<endl;
        }
    }
}

6.关于复杂度计算的一些经验性结论

1.单纯的顺序和选择结构,时间复杂度为O(1)

2.一般的一层循环时间复杂度为O(n)

3.两个并列的循环,时间复杂度max(O(m),O(n))

4.一般的两层循环嵌套,时间复杂度是O(n的平方)

5.一般会选择递归、分治、动态规划等方法提升时间效率(空间换时间)

经验分享 程序员 微信小程序 职场和发展