Time complexity 他们如何计算这个问题的时间复杂度
问题6:找出以下程序的复杂性:Time complexity 他们如何计算这个问题的时间复杂度,time-complexity,big-o,Time Complexity,Big O,问题6:找出以下程序的复杂性: void function(int n) { int i = 1, s =1; while (s <= n) { i++; s += i; printf("*"); } } void函数(int n) { int i=1,s=1; 而(snsok=O(√n) 上述函数的时间复杂度O(√n) 发件人: 一遍又一遍地看 显然,他们说时间复杂性是O(√n)
void function(int n)
{
int i = 1, s =1;
while (s <= n)
{
i++;
s += i;
printf("*");
}
}
void函数(int n)
{
int i=1,s=1;
而(snsok=O(√n)
上述函数的时间复杂度O(√n)
发件人:
一遍又一遍地看
显然,他们说时间复杂性是O(√n) .我不明白他们是如何得出这个结果的,我已经试着反复研究这个问题。有人能把它分解成细节吗?在循环的开始,当循环时,我们有s=1;I=1
,而n
是一些(大)数字。在循环的每一步中,都会执行以下操作:
取当前的i
,并将其递增1
将i
的新值添加到s
的总和中
不难看出,i
的连续更新形成了序列1,2,3,
,而s
序列1,1+2,1+2+3,
。通过,第一个k
自然数1+2+3+…+k
的和是k(k+1)/2
。您应该认识到序列s
符合此描述,其中k
表示迭代次数
while
-循环在s>n
时终止,这相当于找到最低迭代次数k
,从而(k(k+1)/2)>n
。对于渐近情况,简化后的结果是k^2>n
,我们可以将k
简化为k>sqrt(n)
。因此,该算法在与sqrt(n)
成比例的时间内运行。很明显,k
是第一个整数,因此k(k+1)/2>n
(否则循环会提前停止)
然后k-1
不能有相同的属性,这意味着(k-1)((k-1)+1)/2谢谢你的回答。我现在明白了。看起来我需要复习一些东西,忘记了高斯的公式。
(k-1)k/2 <= n → (k-1)k <= 2n
→ (k-1)^2 < 2n ; k-1 < k
→ k <= sqrt(2n) + 1 ; solve for k
<= sqrt(2n) + sqrt(2n) ; 1 < sqrt(2n)
= 2sqrt(2)sqrt(n)
= O(sqrt(n))