答案是该程序的语句执次数f(n)=n+1+n(n+1)+n*n=2n*n+2n+1,时间复杂度为T(n)=O(f(n))=O(n*n)(注n*n表示n乘以n)。请问语句执行次数和时间复杂度是怎么算出来的?
首先这个程序最占用时间的3条语句是:i++,j++,s++。(本来i=0;i<n;j=0;j<n;这4条都是语句,但是估计考虑到这四条执行的时间很快,所以忽略不计了)。
接下来说上面3条语句的执行时间,你的程序等价于下面这种格式:
for(i=0;i<n;i++)这个一个双重循环,处于循环最里面的s++执行了n*n次,这个应该不难理解吧。
j++执行了n*(n+1)次:因为外层i执行了n次,j执行了n+1次。
i++执行了n+1次。
T(n)=O(f(n)) = O(2n*n+2*n+1)。但是我们说的是复杂度,复杂度的表示一般都只要把表示数据增长的性质表达出来就行了,而且是影响数据增长最主要的性质。何为数据增长的性质,比如说n,那就是线性增长;n*n,那就是平方增长,n*n*n,那就是3次方增长;log(n),那就是对数增长。以上综合,影响2n*n+2*n+1最主要的增长性质是n*n。所以复杂度就是O(n*n)。
...for(i=0;i<n;i++) ,for(j=0;j<n;j++), s++。
for(i=0;i<n;i++){ for(j=0;j<n;j++) { s++; }}这个一个双重循环,处于循环最里面的s++执行了n*n次,这个应该不难理解吧。j++执行了n*(n+1)次:因为外层i执行了n次,j执行了n+1次。i++执行了n+1次。T(n)=O(f(n)) = O(2n*n+2*n+1)。但是我们...
...for(i=0;i<n;i++) ,for(j=i;j<n;j++), s++。
第二层循环从i运行到n-1 循环执行的内容是一个s自增 那么循环就是从0开始 第一次s自增n次 第2次自增n-1次 依次类推 则一直到最后s自增的执行次数即为n+(n-1)+(n-2)+...+2+1 按照等差求和公式 此式=n(n+1)\/2
有一道数据额结构的题目不是很明白,for(i=0;i<n;i++) s+=i。
for循环中循环n次 执行s+=i n次 故n+1次的i++ n次的s+=i 共2n+1次 时间复杂度是n (一般情况这个时间复杂度是n的多次幂,2n+1是n的一次幂 故时间复杂度是n 如果程序执行2n*n+1 那么时间复杂度是n*n 。如果再不懂,建议看时间复杂度的定义)记得要采纳 ...
哈夫曼编\/译码器问题:C语言版的数据结构,我急啊!那位朋友帮帮忙,结果必 ...
for(p=HT+1,i=1;i<=n;++i,++p,++character,++w){p->ch=*character;p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;}for(;i<=m;++i,++p) {p->ch=0;p->weight=0;p->parent=0;p->lchild=0;p->rchild=0;}for(i=n+1;i<=m;++i){ select(HT,i-1,&s1,&s2); HT[s1...
...for(i=0;i<N-1;i++)和for(j=i;j<N;j++)不懂,尤其是为什么j=i?_百 ...
i前面的元素都已经排好序了,还管它们干嘛,所以for(j=i;j<n;j++),是让j从i 循环到n,接着找最大的 至于你说的,当j==i时比较array[i]和array[j]没什么用,确实是,但是电脑是不计较这点浪费的,所以如果这样能让你写起来更顺手,大家一般是不会在意多浪费几次的。反正浪费的次数加...
for(i=0;i<n;i++)和for(i=0;i<n-1;i++),下面这两种有什么区别嘛,第二种...
不仅仅是少比较一个,上题中在嵌套循环结构中,第一层循环少一次,第二层循环则少一次,共少 (n-1)*2次循环。
java for循环 for(int i=0,j=0;i<10;i++){}报错,找不到符号,指向j。 f...
将临时变量j 写到大括号里面去。for(i=0;i<10;i++){int j=0;...},i 是循环控制变量,i从0到9,循环10次,每次循环进入之后,首先定一个临时变量,将变量初始化为0.
for(i=0;i=0;i++)为什么不是死循环?循环里一条语句都不能执行啊?
循环一次都不执行。因为在for(i=0;i=0;i++)中,第二个表达式i=0表示赋值,不是判断,表达式i=0的值为0,而0表示假,因此不会执行循环体的。
for(i=0;i<0;i++)如果事先得到i的值为0。这个for语句会不会执行?
这个for循环根本就不能执行。不管你事先i是什么值,for初始条件i=0都让i等于0,不满足for执行条件i<0,因此for语句不可能执行。
C语言求助,哪位大佬帮我看看这道题?一直搞不清楚
void ShowLine(int n) { int i; for(i = 0; i < n; ++i) printf("*"); printf("\\n");}void ShowData(pNode p) { printf("%-16s",p->name); printf("%-16s",p->telephone); printf("%-24s",p->email); printf("%-24s",p->address); printf("%-8d\\n",p->postcode);}void ...