时间复杂度

本文介绍了时间复杂度的概念,通过举例说明T(n)表示程序执行次数,并阐述了如何从T(n)简化为O(n)的大O表示法。讨论了不同时间复杂度级别,如O(1),O(logn),O(n),O(nlogn),O(n^2)等,并通过代码示例解释了如何推导时间复杂度。
摘要由CSDN通过智能技术生成

首先了解T(.)

我们所看到的时间复杂度一般是O(.)这样表示,但O(.)是一种粗略的表示。
T(.)表示当前程序执行的次数。如:

for(int i=0,i<3,i++){
	printf("yyds");
}

那么这段程序的执行次数是11次。我们可以写为T(11)。


再看下面这个代码:

for(int i=0,i<n,i++){
	printf("yyds");
}

那么这段程序的执行次数是3n+2次。我们可以写为T(3n+2)。


使用程序语句执行时间的次数来表示代码块的时间复杂度,计算起来太繁琐,不利于粗略评估;那么就提出使用O(.)来粗略的表示代码的时间复杂度


则有:
T(n)=11 --> 常数 --> O(1)
T(n)=3n+2 --> 常数 *n + 常数 --> O(n)
T(n)=3n2+2 --> 常数 *n2 + 常数 --> O(n2)
T(n)~~f(n)~~O(n)

这相当于数学中求极限时的一种近似。即可忽略系数项、低次方项、常数项

关于O(.)

再看下面这个代码:

for(int i=1,i<n,i*=2){
	printf("yyds");
}

关于这个函数的时间复杂度时O(logn)。具体推导如下:
我们使用8,16这个两个数进行推算一下 T(.):
T(8)=3+3+(3+1)+1=3X(3)+2 --> 3
T(16) = 4+4+(4+1)+1=3X(4)+2–>4
23=8
24=16

2T(n)=n

T(n)=O(logn)


名称时间复杂度
常数时间O(1)
对数时间O(logn)
线性时间O(n)
线性对数时间O(nlogn)
二次时间O(n2)
指数时间O(2n)

图示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值