第一次使用CSDN正式记录自己的学习收获。
学习算法的时间复杂度的渐进表达式所遇到的一个例子:计算多层for循环嵌套时的语句频度。语句频度即执行最多的语句(基本语句)重复执行的次数。
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++)
for(int k=1;k<=j;k++)
x=x+1;
误把内层循环和外层循环混淆,结果分析了一下午,思维导图如下:
用常数的求和公式表示第三层(最深层循环)求和有多少个分支就有多少次循环(如上述思维导图中蓝色元素到绿色元素的过程)。此时要注意的就是外循环一次,内循环不止循环一次,再正常运算公式就能得到结果。
数学模型:
平方求和公式:
实践测试------------将n=4带入运算:
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
int n=4;
for(int i=1;i<=n;i++)
{
cout<<i;
for(int j=1;j<=i;j++)
for(int k=1;k<=j;k++)
cout<<k<<"*";}
return 0;
}
成功解决了这个基础数学问题。(还是花了好多时间)