Time complexity 这段代码的时间复杂度?

Time complexity 这段代码的时间复杂度?,time-complexity,Time Complexity,所以这些是for循环,我必须找到时间复杂度,但我并不清楚如何计算 for (int i = n; i > 1; i /= 3) { for (int j = 0; j < n; j += 2) { ... ... } for (int k = 2; k < n; k = (k * k) { ... } } for(int i=n;i>1;i/=3){ 对于(int j=0;j1;i/=3){ 对于(int j=0;j100->1

所以这些是for循环,我必须找到时间复杂度,但我并不清楚如何计算

for (int i = n; i > 1; i /= 3) {
    for (int j = 0; j < n; j += 2) {
    ... ...
    }
    for (int k = 2; k < n; k = (k * k) {
    ...
    }
}
for(int i=n;i>1;i/=3){
对于(int j=0;j
对于第一行,(inti=n;i>1;i/=3),保持i除以3,如果i小于1,则循环停止在那里,对吗

但它的时间复杂度是什么?我想它是n,但我不是很确定。我之所以认为它是n的原因是,如果我假设n是30,那么我将是30,10,3,1,然后循环停止。它运行n次,不是吗

对于最后一个for循环,我认为它的时间复杂度也是n,因为它所做的是

k以2开始,并不断地自身相乘,直到k大于n

所以如果n是20,k将是2,4,16,然后停止,它也运行n次

我真的不认为我理解这类问题,因为时间复杂度可以是log(n)或n^2等,但我看到的只是n

我真的不知道什么时候是圆木或正方形,或者其他什么

我想,每个for循环运行n次。如何涉及log或square


有人能帮我理解这一点吗?请。

如果你想计算算法的时间复杂度,请浏览以下帖子:

也就是说,你思考算法复杂性的方式是小而线性的。它有助于按数量级思考,然后以这种方式绘制。如果你采取:

x, z = 0
for (int i = n; i > 1; i /= 3) {
    for (int j = 0; j < n; j += 2) {
    x = x + 1
    }
    for (int k = 2; k < n; k = (k * k) {
    z = z + 1
    }
}
x,z=0
对于(int i=n;i>1;i/=3){
对于(int j=0;j
在一个图上画x和z,其中n从1->10->100->1000->10^15左右,你会得到一个看起来像n^2图的答案。当分析算法复杂性时,你主要关心的是最大次数,在最坏或最常见的情况下,你的输入通过省略常量循环。所以在这种情况下,我希望您的算法是O(n^2)

为了进一步阅读,我建议;这并不容易,但会深入地介绍这一点。

可能的副本