简单理解时间复杂度和空间复杂度
一、时间复杂度
执行当前算法所消耗的时间,我们通常用时间复杂度来描述。
常见的时间复杂度量级
常数阶O(1)
对数阶O(logN)
int i=1; while(i<n) { i=i*2; }
线性阶O(n)
for(int i=0;i<=n;i++) { j=i; j++; }
线性对数阶O(nlogN)
for(m=1;m<n;m++) { i=1; while(i<n) { i=i*2; } }
平方阶O(n^2),比如冒泡排序
for (int i = 0; i < arrLength; i++) { for (int j = 0; j < arrLength-i-1; j++) { if (arr[j] > arr[j + 1]) { //交换arr[j]和arr[j + 1]的值 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }
立方阶O(n^3)
K次方阶O(n^k)
指数阶(2^n)
二、空间复杂度
空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用 S(n) 来定义。
常见的空间复杂度
空间复杂度比较常用的有:O(1)、O(n)、O(n²)
空间复杂度O(1)
如果算法执行所需要的临时空间不随着某个变量n的大小而变化,即此算法空间复杂度为一个常量,可表示为 O(1)
int i=1; int j=2; ++i; j++; int m=i+j;
代码中的 i、j、m 所分配的空间都不随着处理数据量变化,因此它的空间复杂度 S(n) = O(1)
空间复杂度O(n)
int[] m=new int[n]; for(i=1;i<n;i++) { j=i; j++; }
new一个数组,这个数据占用的大小为n,下面虽然有循环,但没有再分配新的空间,因此,这段代码的空间复杂度主要看第一行即可,即 S(n) = O(n)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix