时间复杂度和空间复杂度

本文详细介绍了时间复杂度的各种级别,包括常数时间O(1),线性时间O(n)、平方时间O(n^2)、指数时间O(2^n)、对数时间O(logn)和线性对数时间O(n*logn),同时提及了空间复杂度及其衡量标准。
摘要由CSDN通过智能技术生成

时间复杂度:
1.常数——o(1);一个常量运行特定的次数
o(1)表示该算法的执行时间,不论输入输出的数据大小,只要没有循环等复杂结构那他o(1);

2.线性——o(n);一个变量运行次数=N或n*一个数;
o(n)表示一个算法的性能会随这输入数据大小发生变化,for里代码会执行n变,所以它是随n变化的,可以用o(n);
for(int i=0;i<n;i++){cout<<"1";}

3.平方——o(n^2);一个变量运行次数=N的N次方;(嵌套)
最常见的就是对输入数据进行嵌套循环。如果嵌套层级不断深入的话,
算法的性能将会变为立方阶 三次:O(n^3)$,四次:o(n^4) k次:o(n^k);                                     
for(x=1;i<=n;x++){for(i=1;i<=n;i++){cout<<"1";}

4.指数——o(2^n);一个变量运行次数=2的N次方;
指数阶$O(2^n)$ 【斐波那契数列 暴力递归函数】
$O(2^n)$,表示一个算法的性能会随着输入数据的每次增加而增大两倍,
典型的方法就是裴波那契数列的递归计算实现
 递归函数 中递归的情况下 当前函数会被递归几次就是 几的n次方+线性 
int Fibonacci(int number){
if (number <= 1) return number;
return Fibonacci(number-2)+Fibonacci(number-1);}

5.对数——o(logn)一个变量运行次数=2的N次方=N的那个n次方;
int i=1; while(i<n)i=i*2;

6.线性对数——o(n*logn)外层线性循环,内层对数循环,一个变量运行次数=N或n*一个数;{一个变量运行次数=2的N次方=N的那个n次方;}
线性对数阶$O(nlogn) $,
就是将时间复杂度为对数阶$O(logn)$的代码循环n遍的话,
那么它的时间复杂度就是 n * O(logN),也就是了$O(nlogn)$,如下
for(m=1;m<n; m++) {int i =1;while(i<n)i=i*2;}

考虑时间复杂度,一般考虑最坏的;

//空间复杂度(Space Complexity)
//是对一个算法在运行过程中临时占用存储空间大小的一个量度,
//同样反映的是一个趋势,一个算法所需的存储空间用f(n)表示。
//S(n)=O(f(n)),其中n为问题的规模,S(n)表示空间复杂度。
常见:o(1) o(n) 
空间复杂度 $O(1)$ 【算法空间复杂度为一个常量,不随着某个变量n的大小而变化】 
如果算法执行所需要的临时空间不随着某个变量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=newint[n] for(i=1; i<=n; ++i){j=i,j++;} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小唐C++

干累了,给个吧,求求了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值