请教数据结构时间复杂度的问题

ldchbest 2002-07-13 01:02:15
下面程序段的时间复杂度是多少?
i=s=0;
while(s<n)
{i++; s+=i;}
本题出自李春葆的《数据结构(C语言篇)习题与解析》,上面给出的答案是O(n),但我觉得应该是O(n的平方根)。
望指教,多谢了!
...全文
524 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
qhgary 2002-09-16
  • 打赏
  • 举报
回复
首先我要说O的定义中有一个“最接近”的上限问题,所以n虽然肯定满足,但显然不是O(n),其次我要说复杂度是什么可能都有,但是一般来说只看级别就可以。常用的是n n^2 n^3 n^(1/2) n^(1/3) n^(2/3) log(n) nlog(n)
1 知道属于哪个级就行了,没有必要算的那么精确的。
对于这个题目,我觉得应该是O(sqrt(n))级
sandrowjw 2002-09-16
  • 打赏
  • 举报
回复
后面那个答案是一样的吧,因为对于步长做线性变化不会影响算法的复杂度的。
sandrowjw 2002-09-16
  • 打赏
  • 举报
回复
我觉得楼主对,别全信书。
gscool 2002-09-16
  • 打赏
  • 举报
回复
我现在也在学数据结构,一起研究吧
我觉得应该是o(n),如果里面再嵌套一层循环得话才应该是o(n^2)吧
ldchbest 2002-09-15
  • 打赏
  • 举报
回复
再次感谢大家的帮助
ldchbest 2002-07-28
  • 打赏
  • 举报
回复
To fatalerror99
这确实应该属于算法的范畴,不过该题目就是从数据结构的书上拿下来的。
谢谢大家的踊跃发言,让我受益很深。好象可以给大家加分,可是我不会用。
fatalerror99 2002-07-22
  • 打赏
  • 举报
回复
纠正一下楼主的说法,时间复杂度是算法的概念,不是数据结构的概念。
lizhongkun 2002-07-22
  • 打赏
  • 举报
回复
1, o(sqrt(N))
2,
for(i=s=0;s<n;s=s+2*(i++));O(sqrt(n- ??? ))
if (n=(2 6 12 20 30 42 56 72 90 110*************)O(n
1 2 3 4 5 6 7 8 9 10

songbin21 2002-07-22
  • 打赏
  • 举报
回复
上两楼的程序,循环应该满足条件:0+2+4+……<n,则当0+2+4……==n时结束。
即:(1+m)m/2 = n/2 ps: m:循环次数
解方程,得m=(1+sqrt(1+4n))/2
即为时间复杂度。
我是这样认为的,不知道对不对。
atlantis13579 2002-07-21
  • 打赏
  • 举报
回复
呵呵,复杂度什么级都有
yuying 2002-07-21
  • 打赏
  • 举报
回复
不好意思,看错题目了。
复杂度是O(n),复杂度应该没有平方根级。
yuying 2002-07-21
  • 打赏
  • 举报
回复
复杂度当然是O(n).
只有一个循环, i++ , s+=i;是线性的,并没有嵌套循环,怎么会是O(n平方)呢。
atlantis13579 2002-07-21
  • 打赏
  • 举报
回复
yes,是O(n的平方根)
abcpanpeng 2002-07-21
  • 打赏
  • 举报
回复
是0(n)。
redleaves 2002-07-21
  • 打赏
  • 举报
回复
TO liangyan82(琰):
我想问一下,你这个n是什么?
如果是程序中的n的话,这个循环只有在n=1,2时为O(n),当n大于2时是无法循环到n次的,2n>i(i+1),i是这个循环运行的次数.怎么可能和n接近呢?
难道你的O(n)中的n是程序中的其它控制条件吗?
redleaves 2002-07-21
  • 打赏
  • 举报
回复
那么如果我把程序改为如下:
i=s=0;
while(s<n)
{i++; s+=2*i;}
这个程序的复杂度是多少?
怎么比较这个程序为原程序?
liangyan82 2002-07-21
  • 打赏
  • 举报
回复
我也有算过这个,应该是o(n)
tigerfox 2002-07-21
  • 打赏
  • 举报
回复
0(n) 对呀,你是怎么想的!
LeeMaRS 2002-07-20
  • 打赏
  • 举报
回复
i=s=0;
while(s<n)
{i++; s+=i;}

to 楼上 : 注意判断的条件是s这个累加器.
qchen 2002-07-20
  • 打赏
  • 举报
回复
按此程序,应执行:i=i+1,s=s+i,简单操作次数为n次
在下认为应该是O(n)
加载更多回复(10)

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧