复杂度计算示例

目录

时间复杂度计算实例

示例一

示例二

示例三

示例四

示例五

示例六

示例七

空间复杂度计算实例

示例一

示例二

示例三


时间复杂度计算实例

示例一

在Func2函数中通过for循环和while循环可得时间复杂度函数T(N) = 2N + 10,根据推导大O规则得到O(N)

示例二

在Func3函数中通过两个for循环可得时间复杂度函数T(N) = M + N,根据推导大O规则得到O(M + N)

此时如果M >> N,则为O(M)

此时如果M << N,则为O(N)

此时如果M == N,则为O(M + N)

示例三

在Func4函数中通过for循环可得时间复杂度函数T(N) = 100,根据推导大O规则得到O(1)

注意:这里的1不是运行一次,而是代表的常数。

示例四

strchr执⾏的基本操作次数:

①若要查找的字符在字符串第⼀个位置,则:T (N) = 1

②若要查找的字符在字符串最后的⼀个位置,则:T (N) = N

③若要查找的字符在字符串中间位置,则:T (N) = N / 2

所以我们可以看出T(N)取决于查找的位置

因此:strchr的时间复杂度分为:

最好情况: O(1)

最坏情况: O(N)

平均情况: O(N / 2)

另外特别要注意的一点是:大O通常关注的是最差的情况,因此strchr的时间复杂度:O(N)

通过上⾯我们会发现,有些算法的时间复杂度存在最好、平均和最坏情况。

(1)最坏情况:任意输⼊规模的最⼤运⾏次数(上界)

(2)平均情况:任意输⼊规模的期望运⾏次数

(3)最好情况:任意输⼊规模的最⼩运⾏次数(下界)

⼤O的渐进表⽰法在实际中⼀般情况关注的是算法的上界,也就是最坏运⾏情况。

示例五

(1)若数组有序,则:T (N) = N

(2)若数组有序且为降序,则:T (N) = N ∗ (N + 1) / 2

因此:BubbleSort的时间复杂度取最差情况为: O(N^2)

示例六

我们可以先假设几个数

当n=2时,执⾏次数为1;当n=4时,执⾏次数为2;当n=16时,执⾏次数为4

假设执⾏次数为 x ,则 2x = n

因此执⾏次数:x = log n

因此:func5的时间复杂度取最差情况为:O(log n)

这几种写法都是正确的,但是一般建议使用log n(其实也有一个原因是因为键盘输入不了底数)

另外要注意的一点是:当n接近⽆穷⼤时,底数的⼤⼩对结果影响不⼤。因此,⼀般情况下不管底数是多少都可以省略不写,即可以表⽰为 log n

示例七

调⽤⼀次Fac函数的时间复杂度为 O(1)⽽在Fac函数中,存在n次递归调⽤Fac函数

因此:阶乘递归的时间复杂度为: O(n)

空间复杂度计算实例

因为如今内存的存储量已经很大,满足我们正常使用,所以我们一般不会去要求空间复杂度。但这不意味着我们使用空间时就可以随便浪费,只能说相对没有过多的限制。

示例一

函数栈帧在编译期间已经确定好了,只需要关注函数在运⾏时额外申请的空间。

BubbleSort额外申请的空间有exchange等有限个局部变量,使⽤了常数个额外空间

因此空间复杂度为 O(1)

示例二

Fac递归调⽤了N次,额外开辟了N个函数栈帧,每个栈帧使⽤了常数个空间

因此空间复杂度为: O(N)

示例三

通过动态申请内容也会涉及到空间复杂度的计算

空间复杂度为: O(N)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值