Algorithm sqrt级数的算法复杂性

Algorithm sqrt级数的算法复杂性,algorithm,asymptotic-complexity,Algorithm,Asymptotic Complexity,在以下算法中: for i=1 to n for j=1 to sqrt(i) //some code here 它的复杂性是什么 我得到的是j值的以下系列: 1,1,1,2,2,2,2,2,3,3,3,3,3 所以当我从1到3时,j只执行1次 当我从4到8时,j只执行2次 最后,我得到了以下总结: pow(1,0.5)+pow(2,0.5)+pow(3,0.5)... 所以我想这大约小于^2 是这样吗 谢谢你的总结是正确的,但问题比这更简单: 运行时间为^1.5,即

在以下算法中:

for i=1 to n
    for j=1 to sqrt(i)
        //some code here
它的复杂性是什么

我得到的是j值的以下系列: 1,1,1,2,2,2,2,2,3,3,3,3,3

所以当我从1到3时,j只执行1次 当我从4到8时,j只执行2次

最后,我得到了以下总结:

pow(1,0.5)+pow(2,0.5)+pow(3,0.5)...
所以我想这大约小于^2

是这样吗


谢谢你的总结是正确的,但问题比这更简单:

运行时间为^1.5,即*sqrtn,您知道这一点,因为内部循环中的代码运行少于n*sqrtn次


此外,您知道边界很紧,因为当我从n/2到n时,内部循环中的代码运行的次数超过了n/2*sqrtn/2倍,并且n/2*sqrtn/2=n*sqrtn/2*sqrt2。

您在问题中所说的似乎是正确的。内部循环的执行次数为fn=sqrt1+sqrt2+…+sqrtn。我们可以显示这是Thetan sqrtn。首先,通过选择c=1,很明显f在sqrtn上。对于另一个方向,注意正a,b的sqrta+sqrtb>sqrta+b;然后,将求和的元素sqrt1+sqrtn>sqrt1+n、sqrt2+sqrtn-1>sqrtn+1配对,依此类推;因此,当n为偶数时,总和大于n/2sqrtn+1。因此,选择c=2或其左右应该适用于这个方向:求和的两倍,或奇数n的两倍,应该总是大于n sqrtn。

On*sqrtn并不完全正确,因为内部循环一直运行到sqrti,而不是sqrtnIt完全正确。sqrti=n/2,然后sqrti>=sqrtn/2,所以它的运行次数超过了n*sqrtn/2*sqrt2次。@MattTimmermans Oswald说你的上限可能比你的答案实际说的更紧。你应该避免使用正确的词语,因为这样,通常有不止一种方法来做某事。FWWW,我认为这个答案是正确的,不理解奥斯瓦尔德和提姆试图做出的区别,如果有的话。你的界限很紧。更重要的是,你给出的解释比我的更直接和直观,我的解释说明了同样的事情。继续努力。答案有时可能是准确的。我手动检查了序列,它看起来确实是On*sqrtn的上界,但是,大多数术语的性能都比这个好。