对于以下每个程序,让T(n)为运行时间。找到T(n)的顺序 (即,找到f(n)使得T(n)∈(f(n))。
程序Fum(int n):
for i from 1 to n do
y ← 1/i
x ← i
while x > 0 do
x ← x − y
end while
end for
我知道如何找到简单函数的运行时间,但由于这是一个嵌套循环,其中内循环依赖于外循环中的变量,我遇到了麻烦。
答案 0 :(得分:1)
对于这种情况,它应该是 1+4+9+...+n^2 = n(n+1)(2n+1)/6
,或者只是 O(n^3)
。
对于for
- 循环中的每个步骤,它将为i^2
运行while
次。给定x=i;y=1/i;
,i^2
x=y*i^2
次x
次到达x<=0
的时间为{1}}。
对于x=x-y
,它将是i
,总结起来,你会得到1,2,...,n
。
答案 1 :(得分:0)
首先,让我们考虑内部循环的运行时: 我们想知道内循环运行的次数,就i而言。 也就是说,我们想要在x-f(i)y = 0中求解f(i)。如果我们在x = i中,并且y = 1 / i,则得到f(i)= i ^ 2。
我们知道外部循环将正好运行n次,因此,我们得到内部循环运行的总次数:
= 1 + 4 + 9 + ... + n ^ 2
此总和等于n(n + 1)(2n + 1)/ 6, O(n ^ 3)