x=1;
While(x<n)
{
x=x + n/100;
}
我试图弄清楚它是o(n)还是o(1)。因为无论我们放在什么地方,我认为循环只会进行10次。
答案 0 :(得分:0)
假设n = 1.1 然后它将进行10次,如果n = 1.2,则循环将持续17次 如果n = 2,它将持续50次,当n> = 101时,循环将重复100次,即使n = 10 ^ 10000,否则你可以搞清楚
答案 1 :(得分:0)
不幸的是,它是O(n)
或O(1)
是错误的,并且由于它不能是O(1)
而立即显而易见,因为它需要不同的迭代次数不同的n
值(甚至看n = 1,2,3,4,5),它不能是O(n)
,因为它不会线性增长。
即使通过一些手动计算,您也可以清楚地看到它不会总是运行10次。检查以下短python程序:
def t(n):
x = 1
c = 0
while x < n:
c += 1
x += n/100
return c
a = []
for i in range(10000):
a += [i/100 + 1]
with open("out.csv","w") as f:
for i in a:
f.write(str(i) + "," + str(t(i)) + "\n")
使用Excel或其他应用程序,您可以轻松地趋势迭代次数以查看以下曲线:
此时立即清楚,所采用的迭代次数在{0:100}
范围内是对数的,任何n < 1
进行0次迭代,n > 100
进行100次操作。因此,虽然Big-O符号不是我最好的主题,但我猜测时间复杂度因此O(log(n))
。