计算语句频度

这些数据结构题集(严蔚敏)书上的题,这些是我做题的笔记


语句频度 T(n),又被称为时间频度,指的是该语句重复执行的次数

第一题

int i = 1;
int k = 0;
int n = 10;
while(i <= n-1){
	k += 10 * i;  /*计算该语句频度*/
	i++;
}

while 循环了多少次,就是该语句的频度
while 执行一次 i 自增 1 ,当 i>n-1 时退出,就是当 i=n 时退出 while ,i 一开始为 1,所以 while 总共循环了 n-1 次;
频度 :n-1


第二题

int i = 1;
int k = 0;
int n = 10;
do{
	k += 10 * i;  /*计算该语句频度*/
	i++;
}while(i <= n-1);

循环了多少次,就是该语句的频度
循环体执行一次 i 自增 1 ,当 i>n-1 时退出,就是当 i=n 时退出循环体,i 一开始为 1 ,所以循环体总共循环了 n-1 次;
频度 :n-1


第三题

int i = 1;
int k = 0;
int n = 10;
while(i <= n-1){
	i++;
	k += 10 * i;  /*计算该语句频度*/
}

循环了多少次,就是该语句的频度
循环体执行一次 i 自增 1 ,当 i>n-1 时退出,就是当 i=n 时退出循环体,i 一开始为 1 ,所以循环体总共循环了 n-1 次;
频度 :n-1


第四题

int k = 0;
int n = 10;
for(int i = 1; i <= n; i++){
	for(int j = i; j<=n; j++){
		k++;    /*计算该语句频度*/
	}
}

第一层循环 n 次
第二层循环 n+(n-1)+(n-2)+…+2+1 = n(n+1)/2 ,所以 k++ 执行了 n(n+1)/2 次
频度 :n(n+1)/2


第五题

int n = 100;
int i = 0;
while(n >= (i+1)*(i+1)){
	i++;    	/*计算该语句频度*/
}

循环体执行 floor(sqrt(n)) 次
频度: ⌊ n ⌋ \lfloor \sqrt{n}\rfloor n


第六题

int x = 0;
int i,j,k;
int n = 10;
for(i = 1; i <= n; i++) {
	for(j = 1; j <= i ; j++) {
		for(k = 1; k <= j; k++) {
			x += 1;   /*计算该语句频度*/
		}
	}
}

第一层 n
第二层 1+2+3+4+…+n
第三层 1+(1+2)+(1+2+3)+(1+2+3+4)+…+(1+2+3+4+…+n) = n(n+1)(2n+4)/12 = n(n+1)(n+2)/6
频度:n(n+1)(n+2)/6


第七题

int i = 1;
int j = 0;
int n = 10;
while(i+j <= n){
	if(i > j)/*计算该语句频度*/ j++;
	else i++;
}

注意:if 语句不管真假都会判断一次,所以循环了多少次就判断了多少次 if 语句
当 i+j=n+1 时退出循环
所以循环次数为 (n+1)-1 = n
所以频度为 n


第八题

int x = 91;
int y = 100;
while(y > 0){
	if(x > 100){  /*计算该判断语句频度*/
		x -= 10;
		y--;
	}else{
		x++;
	}
}

看 while 循环体中的 if 语句频度就看 while 循环次数
开始 x=91 ,循环了 10 次,每次都执行 else ,直到 x=101
当 x=101,循环了 1 次,if 条件成立,x 又变成了 91 ,而 y=99;
while 循环还没退出之前都是按照这规律循环,直到 y=0 退出 while ,一共重复了 100 遍上面的规律,每次 11 次循环,
所以该语句频度为 100*11 = 1100


注意

int k = 1;
for(int i = 1; i <= n ;i++){  //(1)
	k++;     //(2)
}
(1)语句频度是n+1

i 变量在第一个 for 循环中,从取 i = 0 开始执行,直到i=n时为止,至此,i 执行了n次。加上最后i=n+1跳出循环的判断,故,频度共n+1 次;

(2)语句频度是n

当 i = n+1时跳出循环,所以里面的循环体一共执行了 n 次0


时间复杂度

简单的说,就是保留语句频度的最高次幂,并且把系数去掉。 如 T ( n ) = 2 n 2 + n + 1 = O ( n 2 ) T(n)=2n^2+n+1=O(n^2) T(n)=2n2+n+1=O(n2)

你可能感兴趣的:(数据结构,c语言,数据结构)