数据结构-时间复杂度计算示例

1 数据结构-第一章-思维导图

  数据结构-第一章-思维导图缩略图展示如下图1所示:

请添加图片描述

图1

2 时间复杂度-简介

  在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
  ------粘百度百科

3 时间复杂度-示例

3.1 时间复杂度-常用技巧

  时间复杂度的计算满足两个规则,分别是加法规则乘法规则
  1.加法规则多项相加,只保留最高阶的项,且系数变为1):T(n) = T1(n) + T2(n) = O(f(n)) + O(g(n)) = O(max(f(n) , g(n)))
  2.乘法规则多项相乘,都保留):T(n) = T1(n) × T2(n) = O(f(n)) × O(g(n)) = O(f(n) × g(n))

  时间复杂度的计算中,常见时间复杂度之间的关系。
  所消耗的时间从小到大排序为:O(1) < O(log2n) < O(n) < O(nlog2n) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn),口诀是“常对幂指阶”。

  1、顺序执行代码中语句只会影响常数项,可以忽略;
  2、循环语句中,只需挑循环中的一个基本操作分析它的执行次数和n的关系即可;
  3、如果有多层嵌套循环,只需关注最深层循环循环了几次。

3.2 时间复杂度-示例

  以下题目均来自王道考研系列-《数据结构考研复习指导》,均为计算时间复杂度。

3.2.1 对数阶-时间复杂度计算

  1、以下算法的时间复杂度为:

void fun(int n){
	int i = 1;
	while(i <= n)
		i = i * 2;
}

  1、【解析】基本运算为i = i * 2,该语句每次执行就是i乘2,设执行次数为t,则2t≤n,即t≤log2n,因此时间复杂度T(n)=O(log2n)。

  2、设n是描述问题规模的非负整数,下面的程序片段的时间复杂度是:

x = 2;
while(x < n/2)
x = 2 * x;

  2、【解析】基本运算为x = 2 * x,该语句每次执行就是x乘2,设执行次数为t,则2t+1≤n/2,即t≤log2n-2,根据加法规则,得到时间复杂度为T(n) = T1(n) + T2(n)= O(f(log2n)) + O(g(-2)) = O(max(f(log2n) , g(-2)))=O(log2n),即T(n) = O(log2n)。

  3、下列程序段的时间复杂度是:

count = 0;
for(k=1;k<=n;k*=2)
	for(j=1;j<=n;j++)
		count++;

  3、【解析】内层循环条件j≤n与外层循环的变量无关,各自独立,每执行一次j自增1,每次内层循环都都执行n次。外层循环条件k≤n,增量定义为k*=2,设循环次数为t,则t满足2t≤n,即t≤log2n。即内层循环的时间复杂度为O(n),外层循环的时间复杂度为O(log2n)。对于嵌套循环,根据乘法规则可知,该段程序的时间复杂度为:T(n) = T1(n) × T2(n) = O(n) × O(log2n) = O(nlog2n)。

3.2.1 幂数阶-时间复杂度计算

  1、有以下算法,其时间复杂度为:

void fun(int n){
	int i = 0;
	while(i*i*i<=n)
		i++;
}

  1、【解析】基本运算为i++,该语句每次执行就是i加1,设执行次数为t,有t×t×t≤n,即t3≤n,即t≤n1/3,因此时间复杂度T(n)=O(n1/3)。

  2、下列函数的时间复杂度是:

int func(int n){
	int i=0, sum=0;
	while(sum<n) sum += ++i;
	return i;
}

  2、【解析】基本运算为sum += ++i,它等价于++i;sum=sum+i,每执行一次i自增1,i=1时,sum=0+1;i=2时,sum=0+1+2;i=3时,sum=0+1+2+3,以此类推得出sum=0+1+2+3+…+i=(i+1)*i/2,设循环次数为t,则t满足(t+1)*t/2<n,因此时间复杂度为T(n)=O(n1/2)。

  3、设n是描述问题规模的非负整数,下列程序段的时间复杂度是:

x = 0;
while(n>=(x+1)*(x+1))
x = x + 1;

  3、【解析】基本运算为x = x + 1,该语句每次执行就是x加1,假设第k次循环终止,则第k次执行时,(x+1)2>n,x的初始值为0,第k次判断时x=k-1,即k2>n,k>n1/2,因此该程序段的时间复杂度为T(n)=O(n1/2)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JAZHR

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值