问题:for(i=0;i<100;i++) {x++;s=0;}和for(i=0;i<n;i++) {x++;s=0;}二者在算法的时间复杂度上有什么不同?为什么?
解析:
在对比两个循环的时间复杂度时,我们需要考虑循环中的迭代次数与问题规模 n
之间的关系。
-
for(i=0;i<100;i++) {x++;s=0;}
这个循环是一个固定的循环,只会执行100次迭代。无论n
的值是多少,循环都只会执行100次。因此,这个循环的时间复杂度是常量阶的,记作 O(1)。 -
for(i=0;i<n;i++) {x++;s=0;}
这个循环的迭代次数与n
的值相关。循环将执行n
次迭代,每次迭代都会增加x
的值,并将s
的值设为0。因此,循环的迭代次数与问题规模n
成正比。这个循环的时间复杂度是线性阶的,记作 O(n)。
总结:两个循环的时间复杂度不同,主要是因为它们的迭代次数与问题规模 n
之间的关系不同。第一个循环的迭代次数是固定的,不受 n
的影响,时间复杂度是常量阶的 O(1);而第二个循环的迭代次数与 n
成正比,时间复杂度是线性阶的 O(n)。