简单理解时间复杂度和空间复杂度

一、时间复杂度

执行当前算法所消耗的时间,我们通常用时间复杂度来描述。

常见的时间复杂度量级

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

posted on   御行所  阅读(31)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示

目录导航