算法复杂度

时间复杂度

  • 常数阶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)

上面从上至下依次的时间复杂度越来越大,执行的效率越来越低。

空间复杂度

算法所占用的存储空间主要包括:

  1. 程序本身所占用的空间
  2. 输入输出变量所占用的空间
  3. 动态分配的临时空间,通常指辅助变量

常数阶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++;
}
posted @   猫长寿  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示