此算法的big-o表示法是什么?

时间:2019-07-11 15:16:12

标签: java time-complexity big-o

由循环中N的乘法组成的算法的big-o表示法是什么。

void testing(int n) {
    for(int i =0; i<n;i++) {
        n=n*2;
        System.out.println("hi"+n);
    }
}

2 个答案:

答案 0 :(得分:2)

我将尽可能严格地回答我。

编辑:忘了说,我们假设比较,赋值和乘法之类的每个运算的复杂度为 O(1)

简而言之,该算法在大多数情况下不会终止,因此没有为其定义复杂性。 复杂度是算法成本 C 的某种上限,指出 O(n)意味着 C <= kxn,k> 0 。非终止算法的代价是无限的,并且 inf> inf 是不确定的。

然后,让我们看看您的算法为何不终止:

每次迭代,如果 i ,我们继续。但是,每个迭代 n 都乘以 2 。检查循环条件时,我们可以看到 i n 的值之间的关系: n = n0x2 ^ i ,其中< strong> n0 n 的初始值。 因此,您的算法只会在 n0 <= 0 时终止,并且在这种情况下不会一次进入循环。

答案 1 :(得分:1)

我尝试在IDE中运行您的代码,但发现这是一个无限循环。 算法复杂度仅针对必须终止的算法(最常被接受的定义)进行定义。当程序不终止时,它不是算法。因此它没有“算法时间复杂度”。