Performance 如何得出循环的log(n)运行时间?

Performance 如何得出循环的log(n)运行时间?,performance,Performance,如果循环的变量在每次迭代时被一个常数因子乘/除,则该循环被视为在O(log(n))时间内运行 例如: for(i=1; i<=n;i*2){ --some O(1) operations ... } (i=1;i根据维基百科: 算法的时间复杂度量化了算法运行所需的时间量,该时间量是表示输入的字符串长度的函数 假设我们有一个来自输入长度N的函数T,T(N)意味着在N的数组上运行算法需要T(N)秒 for(i=1; i<=n;i*2) for(i=1;i这就是我自己理

如果循环的变量在每次迭代时被一个常数因子乘/除,则该循环被视为在O(log(n))时间内运行

例如:

for(i=1; i<=n;i*2){  
    --some O(1) operations ...  
}

(i=1;i根据维基百科:

算法的时间复杂度量化了算法运行所需的时间量,该时间量是表示输入的字符串长度的函数

假设我们有一个来自输入长度N的函数T,T(N)意味着在N的数组上运行算法需要T(N)秒

for(i=1; i<=n;i*2)

for(i=1;i这就是我自己理解它的方式:尝试想出一个函数
f(x)
来为for循环建模,这样在for循环的第x次迭代中,你的迭代器
i=f(x)
。对于
for(i=0;iif)的简单情况,循环的内部是O(1),那么循环内部是不相关的。这一切都归结为
i*2
递增器。由于每次递增一倍,它实际上是指数增长,这意味着循环将以对数的倒数运行。谢谢你,这非常有帮助。如果函数不容易实现,有什么策略性的方法来计算它吗例如,在For(i=2;iT(N)=T(2*N)+C的情况下,这个递归公式(来自上面的例子)是错误的,它导致了错误的解释。因为我提到的正确公式T(2*N)=T(N)+C或T(N)=T(N/2)+C@EvaD为了理解如何建立一个回归方程,你应该看看我的解释,试着回答像1)这样的问题。当输入长度增加1时,需要多少运算,这将尝试建立T(N+1)=…2的右侧当输入长度翻倍时,需要花费多少,并且答案将构建T(2*N)=…的右侧。因此,这当然需要一些训练,但并不困难。@yvs如果我的公式错误,请编辑它,或者如果无法修复,请删除它。我不打算删除或编辑您的解释。但是公式“T(N)=T(2*N)+C”告诉我们:“长度为N的输入数据上的算法执行时间”等于“长度为2*N的输入数据上的算法执行时间加上一些O(1)运算的时间”。另一点是你的数学公式“log2(2^x=16)=x=4”,我对此没有任何评论,也许在空间的某个部分这是可以的。
for(i=1; i<=n;i+=3)