这些循环的时间复杂度是多少?如果我错了,请纠正我。
这个循环是O(n ^ 3),因为它有(n ^ 3)/ 2 + 1次迭代。
for (int i = 0; i < n * n * n; i+=2)
{
//body
}
和
该循环为O(n ^ 3 * m ^ 2),因为它具有(n ^ 3 + 1)*(m ^ 2 + 1)次迭代。或者这只是O(n ^ 3),因为内环不是变量n?
for (int i = 0; i < n * n * n; i+=2)
{
for (int j = 0; j < m * m; j++)
{
//Body
}
}
答案 0 :(得分:4)
在第一种情况下,时间复杂度为O(n^3)
。它捕获最重要的术语,因此您忽略了1/2
和常量+1
的缩放因子。在后一种情况下,除非您将O(n^3 * m^2)
视为常量而不是变量,否则它为m
。在Big-O表示法中,您不需要只有一个变量来表示输入数据的大小。
答案 1 :(得分:2)
这个循环是O(n ^ 3),因为它有(n ^ 3)/ 2 + 1次迭代。
正确。
该循环为O(n ^ 3 * m ^ 2),因为它具有(n ^ 3 + 1)*(m ^ 2 + 1)次迭代。或者这只是O(n ^ 3),因为内环不是变量n?
两者都是正确的。这取决于您将m
视为变量还是常量。
答案 2 :(得分:0)
在渐近符号中,可以有多个变量。 对于考虑n和m作为变量的第二种情况,复杂度将为O(n ^ 3 * m ^ 2)。如果将m视为常数,则复杂度为O(n ^ 3)。