Algorithm 如果循环体中没有发生任何事情,for循环的复杂性会是什么
代码:Algorithm 如果循环体中没有发生任何事情,for循环的复杂性会是什么,algorithm,complexity-theory,Algorithm,Complexity Theory,代码: int c = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { c = i * j; } } intc=0; 对于(int i=0;i
int c = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
c = i * j;
}
}
intc=0;
对于(int i=0;i
时间复杂度:O(n2)
下面代码的复杂性是什么:
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
//c = i * j;
// nothing is happening inside the loop
}
}
for(int i=0;i
复杂度是否与上述(O(n2))或其他东西相同?理论上-是的,因为仍然存在增加仍然需要发生的
i
和j
的问题,并将它们与每次迭代中的最终值进行比较
但是-编译器可能会优化它,使其在恒定时间内完成,只需设置
i
和j
的post值,因为这两种复杂性都是O(N^2)。+1,说得好。但是因为提问者谈论的是大O,所以恒定时间是O(n^2)!因此,优化不会改变运行时间为O(n^2),但它可能会提供更好的界限。@SteveJessop:我想您指的是硬编码的“n”问题。我当然同意——我只是试图回答OP在问题背后的真正含义。不,变量n
。我的意思是,提问者在说“复杂性是O(n^2)还是其他东西”时有点误用了大O符号。根据big-O的定义,任何O(1)的函数都是O(n^2),所以它是O(n^2)和一些不同的东西。我认为这是提问者一个更重要的误解,我可以忽略使用100
,他指的是变量:-)我认为我必须修改“函数的增长”!!您的代码(即使是第一个版本)将是O(1)(恒定时间)。您没有任何可变因子:您将始终执行100^2次迭代。已编辑硬编码循环迭代到“n”