[入门级问题]请教一段程序的时间复杂度!

robottryer 2007-03-29 03:52:37
void fun3(int n)
{
int i=0,s=0;
while (s<n)
{
i++;
s=s+i;
}
}
具体怎么分析这段程序的复杂度.

...全文
328 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
robottryer 2007-03-30
  • 打赏
  • 举报
回复
明白了 谢谢大家指教 散分
houdy 2007-03-30
  • 打赏
  • 举报
回复
下来后我又想了一下,答案确实应该是O(N^1/2)。这里的时间复杂度是个循环的次数有关,而循环的次数又和输入的参数n有关:
设迭代的次数是K,则:
K(K+1)/2 = N
在N很大的情况下,==> K^2 = 2N
===> 这样就可以得出时间复杂度是O(N^1/2);
GetTheWorld 2007-03-29
  • 打赏
  • 举报
回复
执行次数x x^2<6n
houdy 2007-03-29
  • 打赏
  • 举报
回复
复杂度肯定小于N/2的,其实就是数列1、3、6、10...,增长速度大于数列1、3、5、6....但具体是多少还望高手解答
-----
1
3 -- 1+2
6 -- 1+2+3
10 -- 1+2+3+4
15 -- 1+2+3+4+5
naturezmt 2007-03-29
  • 打赏
  • 举报
回复
对于第一个问题,用T(n)表示S的值,用F(n)表示i的值,则它们的关系为:
T(n+1) = T(n)+F(n);
F(n+1) = F(n)+1 = (n+1);
====>
T(n+1) = T(n)+(n+1);
接下来就需要解这个递归方程式,这里使用"展开"的方法:
T(n+1) = T(n)+(n+1) = T(n-1)+n+(n+1) = T(n-2)+(n-1)+n+(n+1) = ....
= T(0)+1+2+...+(n+1)
到了这里我们就可以知道,它的时间复杂度应该是O(N^2)即"平方"的时间复杂度。
-----------------------------------------

复杂度肯定小于N/2的,其实就是数列1、3、6、10...,增长速度大于数列1、3、5、6....但具体是多少还望高手解答
houdy 2007-03-29
  • 打赏
  • 举报
回复
对于第一个问题,用T(n)表示S的值,用F(n)表示i的值,则它们的关系为:
T(n+1) = T(n)+F(n);
F(n+1) = F(n)+1 = (n+1);
====>
T(n+1) = T(n)+(n+1);
接下来就需要解这个递归方程式,这里使用"展开"的方法:
T(n+1) = T(n)+(n+1) = T(n-1)+n+(n+1) = T(n-2)+(n-1)+n+(n+1) = ....
= T(0)+1+2+...+(n+1)
到了这里我们就可以知道,它的时间复杂度应该是O(N^2)即"平方"的时间复杂度。
wth1150 2007-03-29
  • 打赏
  • 举报
回复
n
tailzhou 2007-03-29
  • 打赏
  • 举报
回复
第一个是n^(1/2);

第二个要看用什么方法,

直接建链表应该是n^2;
如果先排序,再建链表,肯定可以到nlogn;
robottryer 2007-03-29
  • 打赏
  • 举报
回复
还有一个问题
给定有n个元素的向量,建立一个有序单链表的时间复杂度是?

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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