时间复杂度与算法效率

一、时间复杂度

1.简单定义

程序执行时,耗费时间的长度
查看详细定义

2.方法

对于计算机来说,做加法比做乘除容易得多。因此,在计算时间效率时,加减运算可以忽略不计,基本上就是计算函数有多少次乘除运算。

在上一篇程序运行的时间©“两种算法计算多项式值”一例中涉及到两种算法,我们现在分别计算它们的乘法次数。

  • 第一种
double f1(int n, double a[], double x)
{
	int i;
	double p = a[0];
	for (i = 1; i <= n; i++)
		p = p + (a[i] * pow(x,i));
	return p;
}

pow(x, i) —— (i-1)次乘法;a[i] * pow —— 一次乘法,所以一次循环做了 i 次乘法。循环 n 次,函数乘法执行次数为 1 + 2 + . . . + ( n − 1 ) + n 1+2+...+(n-1)+n 1+2+...+(n1)+n n 2 + n 2 \frac{n^2+n}{2} 2n2+n
时间复杂度为 n 的函数, T ( n ) = C 1 n 2 + C 2 n T(n) = C_{1}n^2 + C_{2}n T(n)=C1n2+C2n

当 n 很大时,可以看作只有n^2在作用。

  • 第二种
double f2(int n, double a[], double x)
{
	int i;
	double p = a[n];
	for (i = n; i > 0; i--)
		p = a[i-1] + x*p;
	return p;

观察发现每轮循环只做一次乘法,因此共做 n 次乘法。
时间复杂度为 T ( n ) = C . n T(n) = C.n T(n)=C.n
常数具体为多少取决于计算机,因机而异。

3.技巧求解

本周内补充

二、算法效率

分析一般算法效率时,关注两种复杂度。

1.最坏情况复杂度 T w o r s t ( n ) T_{worst}(n) Tworst(n)

2.平均复杂度 T a v g ( n ) T_{avg}(n) Tavg(n)

二者之间的关系总有:

T a v g ( n ) < T w o r s t ( n ) T_{avg}(n) < T_{worst}(n) Tavg(n)<Tworst(n)

通常平均复杂度非常难研究,我们重点关注的是最坏情况复杂度。

三、复杂度的渐进表示法

其实在一个程序中,我们只需明确时间复杂度里的决定因素,就可以粗略知道其增长趋势。例如前面的例子:

当 n 很大时,可以看作只有n^2在作用。

未完待续… …

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值