浅谈数据结构的算法复杂度

数据设计

算法设计的要求

1.正确性:
算法应满足具体的问题及需求
2.可读性:
算法应易于阅读和理解
3.健壮性:
输入数据非法时,算法也能适当作出放反应
4.高效性:
算法执行时间短,占用存储空间少

算法的时间复杂度

设问题的规模是n,把一个算法的时间耗费
T(n)称为该算法的时间复杂度
T(n)是问题规模n的函数

当n趋向无穷大的时候,T(n)与f(n)的比值是非零常数M,T(n)=O(f(n)),f(n)是语法中语句最大的频度
System.out。println(“Hello”);
常数级:O(1)

高斯求和:
public int sum(int n){
int sum=0; n = 100;
sum=(1+n)*n/2;
return sum;
}
常熟级:O(1)

public int sum (int n){
int i,sum=0;n=100; //执行2次
for(i=1;i<=n;i++){ //执行n+2次
sum=sum+i; //执行2n次
}
System.out.println(sum); //执行1次
}
线性级: O(n)

举例:求两个n×n数组的乘积
for(int =1;i<=;++){
for(j=1;j<=n;++j){
c[i] [j] =0;
for(k=1;k<=n;++k){
c[i] [j]+=a[i] [k]*b[k][j];
}
}
}

假设输入规模为n
(1)运算为常数级c,时间复杂度为O(1)
(2)运算量是输入规模的k倍,k为常数,时间复杂度O(n)
(3)运算量是n的平方级,时间复杂度为O(n²)
(4)运算量是k*n²,时间复杂度O(n²)
(5)运算量是O(n³),时间复杂度O(n³)

结论:O(1)<O(log2n)<O(nlog2n)<O(n²)<O(n³)<…<O(2的n次方)<O(n!)

降低算法复杂度的常用方法
(1)数学理论的方法
(2)用空间换时间

另一种衡量算法时间复杂度的方法: (计算时间)
(1)算法开始之前的时间点
(2)算法结束之后的时间点

long start = System.currentTimeMillis();
int n=0,sum=0;
while(n<100){
sum=sum+n;
n++;
}
long end =System.currentTimeMillis();
System.out.println(end-start);

延长执行时间
(1)扩大执行循环规模
(2)使用循环多次执行

若基本操作的执行次数与问题的输入数据有关,则可求算法的平均时间复杂度。

一般,当所有可能输入数据集出现概率均可知时,可求算法的平均时间复杂度,否则求算法在最坏的情况下的时间复杂度

空间复杂度是算法执行时所需的存储空间的量度,记作:S(n)=O(f(n)),其中n为问题的规模

分析算法空间复杂度时,一般只考虑执行算法所需辅助空间,若输入数据所占空间与算法本身有关,则也应计算在内

若算法执行所需空间与输入数据有关,则可求最坏情况下的空间复杂度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值