当前位置: 首页 > 知识库问答 >
问题:

三for循环的复杂性[重复]

石喜
2023-03-14

我想知道下面代码的时间复杂度是O(n^3)还是O(n^2)

public void firstMethod() {
    for (int i = 0; i < 6; i++) {
        for (int j = 0; j < 6; j++) {
            secondMethod();
        }
    }
}

public void secondMethod(){
    for (int i = 0; i < 6; i++) {
        System.out.println("This is a test to observe complexity");
    }
}

共有2个答案

鲁华皓
2023-03-14

例如,像O(n³)这样的运行时复杂度意味着,当改变n时,运行时会像一样增加。

因此,由于您的代码中没有n,因此您可以随意更改,而不会对运行时产生任何影响。事实上,代码中没有任何变量对其运行时有任何影响,这意味着它是常数,我们将其表示为O(1)。

甚至像O(n²)这样的符号也经常以相当草率的方式使用。它应该始终伴随着一个明确的定义。但是,我们常常被迫假设n可能意味着数组的长度,或输入数中的位数或其他。

综上所述:

  • 如果代码的运行时不依赖于某些变量输入,则会得到O(1)
  • 在O(xyz)符号中,需要使用定义明确的变量名
翟弘
2023-03-14

这是O(1),因为运行时是恒定的。

现在,你是否写了以下内容:

public void firstMethod(int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            secondMethod(n);
        }
    }
}

public void secondMethod(int n) {
    for (int i = 0; i < n; i++) {
        System.out.println("This is a test to observe complexity");
    }
}

那么firstmethod对于运行时复杂度来说将是O(n^3)。

 类似资料:
  • 我正在努力找到确切的答案 我知道外环运行了n次。然后,第二个循环每次运行的次数不同,因为它从i开始: n(n-1)(n-2)。。。2 1. 但是,因为我们只关心最坏的情况(当i=n时),所以第二个循环将运行n-n次,因为它将从i=n开始。这当然没有意义,但这就是我被卡住的地方。我已经运行了这段代码,找到了序列的前四个元素:S=0 1 4 10。。。(其余部分不确定)。 抱歉,如果这不合理,但任何帮

  • 如果我有下面的for循环: 我知道外环将迭代次,而内环将为每th从外环迭代一次。 因此,为了确定时间复杂度,我们有一些类似于 不确定如何继续并得到一个封闭形式的时间复杂度。

  • 有三个嵌套的循环,如果循环增量为1,我可以找到复杂性,但是如果循环增量像这样i=c,我就糊涂了? 第三个for循环的复杂度是m,但第一个for循环的复杂度是n/c,第二个for循环的复杂度是n==

  • 我在计算一个方法的时间复杂度: D总是小于或等于P,但我的怀疑是在后四个。我的时间复杂度是O(2p^3),但我读过2可以像O(p^3)一样去掉。这些是正确的吗?

  • 以下示例循环的时间复杂度为O(n^2),有人能解释为什么是O(n^2)吗?因为这取决于c的价值。。。 循环1--- 回路2--- 如果c=0;然后它运行无限次,就像增加c值一样,内部循环的运行次数也会减少 有人能给我解释一下吗?

  • 算法的时间复杂度定义为其运行所需的时间量,作为输入长度的函数。 如果我在C中有一个简单的for循环函数,它针对给定的输入n运行,那么:n的长度是log n(表示它所需的位数)。由于输入为对数n,循环运行n次,因此代码在其输入长度(2^(对数n)=n))中以指数形式运行多次 这个for循环就是一个例子。 但我们永远不会听到任何人说,这样的for-loop程序在其输入(存储n所需的位)中是指数的。为什