我正在学习计算机科学 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 循环。请解释一下?
这里有几点需要说明:
具有三个嵌套循环并不意味着 O(n^3)
复杂。这取决于循环以及循环中发生的事情。它可以是 O(1) 和永不停止之间的任何东西。
老师应该具体说明应该衡量的是什么:整段代码的步骤数?或者只是两个内循环,忽略外循环?
您需要指定可变参数是什么。在这种情况下,它是什么很清楚(可能是 n
,而不是 i
或 j
),但它有助于精确。
代码没有 运行 因为存在语法错误:b[i] ) reader.nextInt();
。所以严格来说,这里没有时间复杂度可以推理。
OK,现在假设该行实际应该是b[i] = reader.nextInt();
,可变参数是n
,整个代码应该测量:你的老师是对的,整个代码运行s in O(n^2)
,因为外循环和第二循环共享相同的索引变量i
。所以外层循环正好迭代一次。
比 O(n^2)
更精确并没有什么意义,除非你精确地定义了什么算作 1
。因此,在没有更多上下文的情况下,陈述看起来像 n^2 +4n
的内容几乎毫无意义。
所以,首先,这是代码: code from our presentation
我们正在学习时间复杂度,根据我们老师的说法,这个运行的时间是 n^2 +4n 。 但对我和我的朋友来说,这似乎是错误的。这是一个 for 循环,在 for 循环内,在 for 循环内,所以这不需要是 n^3 吗?我需要的是关于这段代码的 运行time 的一些解释,我们真的和老师一起坐了一个小时(老师不是那么聪明,因为她并没有真正学过这门课,她只是有几个 类 关于它),她只能说你不计算第一个 for 循环。请解释一下?
这里有几点需要说明:
具有三个嵌套循环并不意味着
O(n^3)
复杂。这取决于循环以及循环中发生的事情。它可以是 O(1) 和永不停止之间的任何东西。老师应该具体说明应该衡量的是什么:整段代码的步骤数?或者只是两个内循环,忽略外循环?
您需要指定可变参数是什么。在这种情况下,它是什么很清楚(可能是
n
,而不是i
或j
),但它有助于精确。代码没有 运行 因为存在语法错误:
b[i] ) reader.nextInt();
。所以严格来说,这里没有时间复杂度可以推理。OK,现在假设该行实际应该是
b[i] = reader.nextInt();
,可变参数是n
,整个代码应该测量:你的老师是对的,整个代码运行s inO(n^2)
,因为外循环和第二循环共享相同的索引变量i
。所以外层循环正好迭代一次。比
O(n^2)
更精确并没有什么意义,除非你精确地定义了什么算作1
。因此,在没有更多上下文的情况下,陈述看起来像n^2 +4n
的内容几乎毫无意义。