数据结构时间复杂度
复杂度分为时间复杂度和空间复杂度
时间复杂度
概念:
若存在函数f(n)
记作T(n)=O(f(n)) .称O(f(n)) 为时间复杂度。
T(n)为常熟操作执行次数
简单理解,时间复杂度就是把T(n)简化为一个数量级,这个数量级可能为n,n^2``````
1.常数阶
这种与问题规模的大小无关(n的多少),执行时间恒定的算法,O(1)时间复杂度,又叫常数阶。
int sum=0 ,n=100;/*执行1次*/ sum=(1+n)*n/2; /*执行一次*/ printf("%d",sum)/*执行一次*/
2.线性阶
要确定某个算法的阶次,我们需要确定某个特定语句运行的次数。
因此,我们要分析算法的复杂度,关键就是分析循环结构的某个特定语句运行情况。
它的循环的时间复杂度为O(n),因为循环体中的代码需要执行n次
for(int i=0;i<n;i++){ int sum=0;/*时间复杂度为O(1)的程序步骤序列*/ }
3.对数阶
为此count*2之后,就距离n更近了一分。也就是说,有多少个2相乘后大于n,则会退出循环。
由2^x=n 得到x=log2(n),所以这个循环的时间复杂度为O(log2(n)),可以写为O(logN)
int count=1; while(count<n){ count=count*2; /*时间复杂度为O(1)的程序步骤序列*/ }
4.平方阶
这段代码的时间复杂度为O(n^2)
int i,j; for(i=0;i<n;i++){ for(j=0;j<n;j++){ /*时间复杂度为O(1)的程序步骤序列*/ } }
推到时间复杂度的方法:
1.当运行时间只有常数时,则用1来代替。
上面执行了4次但是用O(1)表示。
2.在得到的运行次数函数中,只保留最高阶,且除去最高阶项中相乘的常数。
3.常见的时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示