Algorithm 作为N的函数的增长顺序

Algorithm 作为N的函数的增长顺序,algorithm,big-o,time-complexity,Algorithm,Big O,Time Complexity,我在练习算法的复杂性,我认为下面所有的代码都是二次增长的,但是因为我需要增长的顺序作为N的函数,我认为这会改变事情,我不知道如何计算 int sum = 0; for(int n = N; n > 0; n/=2) for(int i = 0; i < n; i++) sum++ int sum = 0; for(int i = 1; i < N; i*=2) for(int j = 0; j < i; j++) sum+

我在练习算法的复杂性,我认为下面所有的代码都是二次增长的,但是因为我需要增长的顺序作为N的函数,我认为这会改变事情,我不知道如何计算

int sum = 0;
    for(int n = N; n > 0; n/=2)
    for(int i = 0; i < n; i++)
    sum++

int sum = 0;
    for(int i = 1; i < N; i*=2)
    for(int j = 0; j < i; j++)
    sum++

int sum = 0;
    for(int i = 1; i < N; i*=2)
    for(int j = 0; j < N; j++)
    sum++
int和=0;
对于(int n=n;n>0;n/=2)
对于(int i=0;i
这与案例1非常相似,我将把它留给你们作为练习。按照我在那里做的方法,你会得到答案

int sum = 0;
    for(int i = 1; i < N; i*=2)
    for(int j = 0; j < N; j++)
    sum++
int和=0;
对于(int i=1;i
这里,主要的区别在于内循环不依赖于外循环的变量。这意味着,无论
i
的值是多少,内部循环都将重复
N次

因此,您需要了解外循环将重复多少次,并将其乘以
N


在解释了这些指导原则之后,我将其留给您作为练习。

不,它们不是二次曲线。最简单的方法是运行N=10,N=100,N=1000,然后观察总和的顺序。我得出的结论是1。代码是对数的,2。三,。线性的但还是不能确定。实际上,它们都不是二次曲线。看起来像是家庭作业问题。。。第一种情况:外部循环进行大约对数(N)次迭代,内部循环进行大约N次,N/2次,N/4次,N/8次。。。迭代,所以最后的
sum
大约是2N。第二种情况:外部循环构成到楼层(log(N))的迭代,因此最终的总和不超过2N。最后一种情况留给您。这样一来,它们都是线性的。@PRCube不,它使(1)成为线性的。没有提到第(2)、(3)项,但其中一项不是线性的。你现在在折磨我:)@PRCube我想帮助你学习,而不是给你答案。试试看,我相信你会找到答案的!
int sum = 0;
    for(int i = 1; i < N; i*=2)
    for(int j = 0; j < i; j++)
    sum++
int sum = 0;
    for(int i = 1; i < N; i*=2)
    for(int j = 0; j < N; j++)
    sum++