我是靠谱客的博主 认真狗,最近开发中收集的这篇文章主要介绍数据结构---三重循环的语句频度,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目

计算下列程序段种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

最后

以上就是认真狗为你收集整理的数据结构---三重循环的语句频度的全部内容,希望文章能够帮你解决数据结构---三重循环的语句频度所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部