| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1911 人关注过本帖
标题:一个简单的基础,想不明白,请高人指点。
只看楼主 加入收藏
呆毛学弟
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2021-1-15
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
一个简单的基础,想不明白,请高人指点。
求出以下算法的时间复杂度
void example(into n){
int i=1,j=100;
while(i<n){
++j;
i+=2;
}
}
答案中提到当i<n时会一直执行语句,假设i在自增m次结束,则有i=1+2m,此时有1+2m+x=n
以上不懂,而且后面还说i>n时循环结束,此处用x来将1+2m修正为n,x为常数,也不太懂
搜索更多相关主题的帖子: 结束 高人 执行 基础 语句 
2021-01-15 12:47
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:7 
时间复杂度是 O(n)

https://zh.
2021-01-15 14:30
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:7 
上下文不给,没头没脑的。
时间复杂度 针对的是 算法,而看你的文字描述,似乎讲的却又是 编译器优化。

如果说时间复杂度,那它就是 lin5161678 所言的 O(n)。

如果说编译器优化,
先看 while,不是个无副作用的死循环,OK通过;再看整个函数,无副作用,直接优化成 void example(int n){}。
假如改为 int example( int n )
{
    int i=1, j=100;
    while(i<n){
        ++j;
        i+=2;
    }
    return i 或 j;
}
如果一开始1>=n,那么最终 i==1 j==100;
如果一开始1<n,那么最终 i==n|1 j=100+n/2
也就是编译器可能直接将之优化成
int example( int n )
{
    ……
    if( n < 0 )
        i=1, j=100;
    else
        i=n|1, j=100+n/2;
    return ……
}

2021-01-15 15:36
rouwang
Rank: 2
等 级:论坛游民
帖 子:2
专家分:14
注 册:2021-1-14
收藏
得分:7 
我也是小白,一开始复制你的代码运行不了,有两个错误,第一行into应该修改成int,第二行的“,”应该是“,”然后我自己大概改了下,看起来直观了点
程序代码:
#include<stdio.h>
int main()
{
int i=1,j=100,m=0,n;  //添加m作为计数用
scanf("%d",&n);
while(i<n){
++j;
i+=2;
m++;                  //每循环一次m+1
printf("i目前的值为%d,你输入的是%d,目前i递增了%d次\n",i,n,m);
}
printf("i的最终值为%d,你输入的是%d,最终i递增了%d次\n",i,n,m);
return 0;
}

程序循环结束的时候i=1+2m不错,但循环次数和n是奇数偶数有关,n为奇数,循环(n-1)/2次,偶数则循环n/2次,至于时间复杂度,说实话,作为一个小白我确实不知道这个是什么东西,但我想既然次数都有了,应该也能算出来这个吧。
2021-01-15 15:55
快速回复:一个简单的基础,想不明白,请高人指点。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058966 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved