我正在学习计算机科学 class,学习时间复杂度并遇到一个问题 (Java)

I'm in a middle of a computer science class, learning time complexity and stuck on a problem (Java)

所以,首先,这是代码: code from our presentation

我们正在学习时间复杂度,根据我们老师的说法,这个运行的时间是 n^2 +4n 。 但对我和我的朋友来说,这似乎是错误的。这是一个 for 循环,在 for 循环内,在 for 循环内,所以这不需要是 n^3 吗?我需要的是关于这段代码的 运行time 的一些解释,我们真的和老师一起坐了一个小时(老师不是那么聪明,因为她并没有真正学过这门课,她只是有几个 类 关于它),她只能说你不计算第一个 for 循环。请解释一下?

这里有几点需要说明:

  1. 具有三个嵌套循环并不意味着 O(n^3) 复杂。这取决于循环以及循环中发生的事情。它可以是 O(1) 和永不停止之间的任何东西。

  2. 老师应该具体说明应该衡量的是什么:整段代码的步骤数?或者只是两个内循环,忽略外循环?

  3. 您需要指定可变参数是什么。在这种情况下,它是什么很清楚(可能是 n,而不是 ij),但它有助于精确。

  4. 代码没有 运行 因为存在语法错误:b[i] ) reader.nextInt();。所以严格来说,这里没有时间复杂度可以推理。

  5. OK,现在假设该行实际应该是b[i] = reader.nextInt();,可变参数是n整个代码应该测量:你的老师是对的,整个代码运行s in O(n^2),因为外循环和第二循环共享相同的索引变量i。所以外层循环正好迭代一次。

  6. O(n^2) 更精确并没有什么意义,除非你精确地定义了什么算作 1。因此,在没有更多上下文的情况下,陈述看起来像 n^2 +4n 的内容几乎毫无意义。