数据结构---三重循环的语句频度

题目

计算下列程序段种x = x + 1;的语句频度。

for( i = 1 ; i <= n ; i++ )
	for( j = 1 ; j <= i ; j++ )
		for( k = 1 ; k <= j ; k++)
			x = x + 1;

(出自:《数据结构——用C语言描述》(第二版) 耿国华著)

首先我们看另一个题目:执行下面程序,求语句S的执行次数。

for( i = 1 ; i <= n ; i++ )				//设为语句1
	for( j = 1 ; j <= i ; j++ )			//设为语句2
		S;

分析:我们设S执行的次数为f(n).
当n = 1时,语句1执行一次,语句二也执行一次,所以f(n) = 1;
当n = 2时,语句1执行两次,当n为1时语句2执行一次,n为2时语句2执行两次,所以f(n) = 1 + 2 = 3;
当n = 3时,语句1执行三次,当语句1执行第一次时语句2执行一次,当语句1执行第二次时语句2执行两次,当语句1执行第三次时语句2执行三次,所以f(n) = 1 + 2 + 3 = 6;

当n = n时,语句1执行n次,当语句1执行第一次时语句2执行一次,当语句1执行第二次时语句2执行两次,当语句1执行第三次时语句2执行三次,…,当语句1执行第n次时语句2执行n次,所以f(n) = 1 + 2 + 3 +…+ n = n*(n+1)/2;

现在我们再来看最开始的题目:
因为这是一个三重循环,且每一层次的循环次数都在发生改变,所以一个循环一个循环的数是不太现实的。所以我们可以采用整体法,我们可以先将

for( j = 1;j <= i; j++)
	for( k =1;k <=j;k++)
		x = x + 1;

看作一个整体,由第二题我们可知 x = x + 1;在这个整体中执行了i * ( i + 1)/2次,这是我们就可以将这个整体看作是上一题中的语句2,结果发现最后的结果还是需要累加来求出,于是我们得出如下公式:
在这里插入图片描述
所以最终得出的结果就是
f(n) = (n+2)*(n+1)*n/6

  • 10
    点赞
  • 44
    收藏
  • 打赏
    打赏
  • 2
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论 2

打赏作者

_南寻_

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值