算法复杂度学习总结

文章详细介绍了算法复杂度的两个主要方面——空间复杂度和时间复杂度,以及如何计算时间复杂度。通过大O表示法,阐述了不同时间复杂度量级,如常数阶、线性阶和平方阶等,并提供了单层和多层循环的时间复杂度计算实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法复杂度分为空间复杂度时间复杂度

  • 概念

        空间复杂度:是执行这个算法所需的内存空间;

        时间复杂度:是运行这个算法所需的时间;

        一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。


  • 时间复杂度的计算

        时间复杂度常用大O表示法表述,即计算时不包括这个函数的常数项和首项系数。

                T(n)=O(f(n))

                f (n) 表示每行代码执行次数之和

        常见的时间复杂度量级有:

                常数阶O(1)

                数阶O(logN)

                线性阶O(n)

                线性对数阶O(nlogN)

                平方阶O(n²)

                立方阶O(n³)

                次方阶O(n^k)

                指数阶(2^n)

O(1) < O(logn)< O(n) < O(nlogn) < O(n²) < O(n³) < O(2^n) < O(n!) < O(nn) 


(1)在一层循环中

        思路:1.列出循环趟数 t 及每轮循环的变化值

                   2.找到 t 与 i 的关系

                   3.确定循环停止条件

                   4.联立两式 解方程

                   5.计算结果


例:

i=n*n;
while(n!=1)
    i=i/2;

按照解题思路 列出 t=0 i=n*n;        t=1i=n*n/2;        t=2 i=n*n/4;        t=3i=n*n/8;

                               t=4 i=n*n/16;        t=5i=n*n/32; ............................

以此类推得 i=n*n/2^t  (a);

                   i=1 (b);

联立(a) (b) T=O(log2N);


(2)在两层循环中

        思路:1.列出外层循环 i 的变化值

                   2.列出内层语句的执行次数

                   3.求和 写结果

例:

int m=0,i,j;
for(i=1;i<=n;i++)
 for(j=1;j<=2*i;j++)
    m++;

按解题思路 列出外层循环 i 的变化         i=1;  i=2;  i=3...........

                   内存语句随 i 变化执行次数  2次  4次  6次..........

                   等差数列求和 n*(2+2*n)/2=n*(n+1)

                   f(n)=n*(n+1);

大O表示法省略常数项得 T=O(n*n);


(3)多层循环

        思路:方法 1. 抽象为计算三维体积

                   方法 2. 列式求和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值