记录学习408-数据结构(跟着王道课程去的笔记,做了一些王道书上没有的笔记)开始于2022年1/22日
一、构建初步的表达式来形容算法的时间复杂度
1、简化表示时间开销与问题规模n的关系
只考虑同等数量级的,(例如3n关系时:3000与9000都是千级别,比值为常数
)
一个表达式中去掉系数和常数项,作为时间开销与问题规模的关系:例如3n+3去掉系数3和后面的常数项3
2、各大函数的时间复杂度(谁用的时间会更久,时间最短的,对应的算法在该时间方法上表现的最优秀如图下的y=1)
所以时间复杂度的表示即时间开销与问题规模的关系跟只需关注数量级即可
二、代码不同类型的不同时间复杂度表达式(按照去常数项去系数原则表示)
1、顺序加无嵌套循环类型
2、嵌套循环类型
三、练习部分(练习不同算法类型下的时间复杂度表达式)
1、指数型
循环完还要再判断一次退出循环所以要+1,根据以上结论只需关注深层循环数量级即可
由循环次数x推出i用x代替再利用循环条件i>n, 推出问题规模n去代替循环次数
2、平均值型
例题
总结
四、空间复杂度
int类型一个变量占4个字节
数组中n个元素,因此一共4n个字节
函数递归调用带来的内存开销
1、类型1
每一次调用有n、a、b、c四个变量一共16个字节,一共调用了5次:5*16即n*16即n*k,舍去系数,即空间复杂度为S(n)=O(n)
2、类型2 递归调用里面有数组
每一次调用都有有一个数组flag[5]5个元素:5*4个字节,flag[4]4个元素: 4*4个字节.......
总结