Time complexity 计算以下代码段的时间复杂度

Time complexity 计算以下代码段的时间复杂度,time-complexity,Time Complexity,有人能计算出执行上述代码所需的步骤数吗 并使用一些输入值n验证解决方案 (发现一些相关问题,但没有帮助) int count=0; 对于(int i=1;i我们可以制作一个表格: i = 1: j = 1 --> 1 count i = 2: j = 1,2 --> 2 counts i = 4: j = 1,2,4 --> 3 counts i = 8: j = 1,2,4,8 --> 4 counts 从这里开始,模式应该很清楚。我们可以重新

有人能计算出执行上述代码所需的步骤数吗

并使用一些输入值n验证解决方案

(发现一些相关问题,但没有帮助)

int count=0;
对于(int i=1;i我们可以制作一个表格:

i = 1: j = 1       --> 1 count
i = 2: j = 1,2     --> 2 counts
i = 4: j = 1,2,4   --> 3 counts
i = 8: j = 1,2,4,8 --> 4 counts
从这里开始,模式应该很清楚。我们可以重新想象模式,使i=1,2,3,4,…,而不是从1到n,让我们说它是从1到logn。这意味着总计数应该是i=1到logn的总和。i=1到x的总和就是x(x+1)/2,如果x=logu 2(n),那么这个和就是(log_2(n)*log_2(n)+1)/2

编辑:似乎我在某个地方犯了一个错误,我所写的实际上是基于经验测试的f(n/2)。因此,正确的答案实际上是(log_2(2n)*log_2(2n)+1)/2。然而,这是我解决此类问题所遵循的逻辑

编辑2:发现了我的错误。与其说“让我们说它从1到对数n”,不如说“让我们说它从0到对数n”(即,我需要记录序列中的每个数字)

这是工作量,当
i
点击
n
时,它将在日志(n)迭代后停止

1 + 2 + 3 + 4 +...+ log(n) = [(1+log(n))*log(n)]/2 = O(log^2(n))

我计算了步骤logn(logn-1)/2,但没有给出正确的结果,因为I=1内部循环运行一次。@Deven,这个额外的1操作不会改变最后的复杂性,即I=1内部循环运行一次的复杂性是
O(log^2(n))
。因此顺序应该是:I=1(2提升功率0)-->1 I=2(2提升功率1)--->2 i=4(2提升功率2)--->3 i=8(2提升功率3)--->4 i=16(2提升功率4)--->5…..i=(2提升功率k-1)--->k总迭代次数---->1+2+3+….k-1=k(k+1)/2循环将在2提升功率k=n时结束,即k=log(n),因此总迭代次数=log(n)(log(n)+1)/2(log^2(n)+log(n))/2是的,但我正试图找到一个几乎完全相同的。但是谢谢,你的解决方案给了我提示。(无法向上投票!!)
         inner-loop
i = 1 --> log(1)  = 0
i = 2 --> log(2)  = 1
i = 4 --> log(4)  = 2
i = 8 --> log(8)  = 3
i = 16 -> log(16) = 4
i = 32 -> log(32) = 5
i = 64 -> log(64) = 6
.
.
.
i = n -> log(n) = log(n)
1 + 2 + 3 + 4 +...+ log(n) = [(1+log(n))*log(n)]/2 = O(log^2(n))