由循环中 N 的乘法组成的算法的大 O 表示法是什么。void testing(int n) { for(int i =0; i<n;i++) { n=n*2; System.out.println("hi"+n); }}
2 回答
慕丝7291255
TA贡献1859条经验 获得超6个赞
我会尽量严谨地回答我的问题。
编辑:忘了说,我们假设比较、赋值和乘法等每个操作的复杂度都是O(1)
简而言之,该算法在大多数情况下不会终止,因此没有为其定义复杂度。复杂度是算法成本C的某种上限,说明O(n)复杂度意味着C <= kxn, k > 0。非终止算法的成本是无限的,并且inf > inf是未定义的。
然后,让我们看看为什么你的算法是非终止的:
每次迭代,如果i < n ,我们继续。然而,每次迭代n都乘以2。在检查循环条件时,我们可以看到i和n的值之间的关系: n = n0x2^i,其中n0是n的初始值。因此,您的算法只会在n0 <= 0时终止,并且当这种情况发生时,它不会进入循环一次。
繁花不似锦
TA贡献1851条经验 获得超4个赞
我尝试在我的 IDE 中运行你的代码,我发现它是一个无限循环。算法复杂性仅针对算法定义,根据(最常接受的)定义必须终止。当一个程序没有终止时,它就不是一个算法。所以它没有“算法时间复杂度”。
添加回答
举报
0/150
提交
取消