欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 算法初识-时间复杂度空间复杂度

算法初识-时间复杂度空间复杂度

2025/5/6 1:00:21 来源:https://blog.csdn.net/qq_47840823/article/details/146352801  浏览:    关键词:算法初识-时间复杂度空间复杂度

注:观看Adbul Bari算法视频

算法概念

 算法:先验分析,不依托于硬件,无语言限制,逻辑。
 程序:后验测试,依托硬件,语言限制,实现。

特点:

  • 输入-0或多个
  • 输出-至少一个
  • 确定性-人能理解
  • 有限性-有限集,时间集,必须有停止的时候
  • 有效性-没必要的语句不要写

准则:

  1. 时间:要高效-时间函数    f(n)=n  每行语句占一个单位时间
  2. 空间:占用内存                s(n)=n  每个参数占一个字
  3. 数据传输,宽带消耗(有必要传输很多数据吗,有优化空间吗)
  4. 设备消耗的功率
  5. CPU寄存器的消耗

频率计数法

1.一维数组之和
f(n) = 2n+3    s(n) = n+3     时间和空间复杂度都是O(n)

s=0                  ---1
for(i=0;i<n;i++){    --- 1,n+1,ns=s+A[i];         --- n
}
return s;            --- 1
s,i,n,A[i]           --- 1,1,1,n

2.二维数组之和
f(n) = 2n2+2n+1    s(n) = 3n2+3    时间和空间都是O(n2)

for(i=0;i<n;i++){               ---n+1for(j=0;j<n;j++){            ---nx(n+1)C[i,j] = A[i,j]+B[i,j];   ---nxn}
}
C,B,A,i,j,n                     ---nxn,nxn,nxn,1,1,1

3.二维矩阵之积
f(n) = 2n3+2n2+2n+1    s(n) = 3n2+4     时间复杂度O(n3),空间复杂度O(n2)

for(i=0;i<n;i++){for(j=0;j<n;j++){for(k=0;k<n;k++){C[i,j] = C[i,j] + A[i,k]*B[k,j];}}
}

4.总结规律:只关心循环里面的语句执行多少次,只关心最高次方!(因为是加法,并不会叠加次方,所以只关心循环里面就可以。换句话说只关心最高次方的那一条语句就可以)
请添加图片描述
请添加图片描述

时间函数的追踪分析法(举例)

for循环为例

例1:
请添加图片描述
例2:请添加图片描述
例3:
请添加图片描述
请添加图片描述
例4:请添加图片描述
例5:请添加图片描述
例6:请添加图片描述
总结:i自增或自减的情况都是O(n);i是乘法或者除法自增或自减的情况都是O(logn);其余情况用追踪分析法。

while循环为例

while循环一定要分析,规律性较小
请添加图片描述
请添加图片描述

渐进符号

定义

三种渐进符号随便用哪个都可以,但是在用O和omega时,尽量使用接近theta否则没有意义!
请添加图片描述

函数比较方法

1.可以直接带入数值,来直观的看出谁大谁小(用很大数值代入会更直观)
2.可以用log比较法
请添加图片描述
请添加图片描述
请添加图片描述

应用

请添加图片描述

函数的best/worst/avg情况

这种最好最坏情况无论使用哪种渐进符号都可以,函数的好坏情况不取决于渐进符号,渐进符号只是个表示方式而已。
一般平均情况接近于最坏情况。
请添加图片描述
二叉搜索树特点:左边的元素小于右边的元素。普通二叉树就是无序的。
其中关于w(n)=树高,minW(n) = logn,maxW(n)=n
请添加图片描述
任何形式的数据都可以通过寻找/合并形成二叉搜索树以此来看时间复杂度请添加图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词