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”