算法复杂度
时间复杂度
- 常数阶O(1):代码只执行一次
- 对数阶O(logN):每次循环都离n越来越近了
int i = 1; while(i<n) { i = i * 2; }
- 线性阶O(n):消耗的时间是随着n的变化而变化的
for(i=1; i<=n; ++i) { j = i; j++; }
- 线性对数阶O(nlogN):将时间复杂度为O(logn)的代码循环N遍的话,那么它的时间复杂度就是 n * O(logN),也就是了O(nlogN)。
for(m=1; m<n; m++) { i = 1; while(i<n) { i = i * 2; } }
- 平方阶O(n²):嵌套查询
for(x=1; i<=n; x++) { for(i=1; i<=n; i++) { j = i; j++; } }
- 立方阶O(n³):以此类推
- K次方阶O(n^k)
- 指数阶(2^n)
上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。
空间复杂度
算法所占用的存储空间主要包括:
- 程序本身所占用的空间
- 输入输出变量所占用的空间
- 动态分配的临时空间,通常指辅助变量
常数阶O(1):只要算法不依赖于n的大小而变化即此算法空间复杂度为一个常量,可表示为 O(1)
private void test1(int n) { int a = 0, b = 0, c = 0; int cnt; for (cnt = 0; cnt < n; cnt++) { a += cnt; b += a; c += b; } }
线性阶O(n):第一行new了一个数组出来,这个数据占用的大小为n
int[] m = new int[n] for(i=1; i<=n; ++i) { j = i; j++; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix