Function f(n)
s = 0
i = 1
while i < 7n^1/2 do
j = i
while j > 5 do
s = s + i -j
j = j -2
end
i = 5i
end
return s
end f
我正在尝试使用上面的代码解决大theta的运行时间。我一直在寻找一些东西来帮助我举个例子,但一切都是循环或只有一个循环。你会怎么用嵌套的while循环来解决这个问题?
答案 0 :(得分:0)
第一个循环将进行7 * sqrt(n)
次迭代。指数1/2
与数字的sqrt()
相同。
第二个循环将运行m - 2
次,因为i的前两个值分别为1和5,而不是通过比较。
i
的增量为5i
。
以n = 16
:
i = 1, n = 16;
while( i < 7 * 4; i *= 5 )
//Do something
First value of i = 1. It runs 1 time. Inside loop will run 0 times.
Second value of i = 5. It runs 2 times. Inside loop will run 0 times.
Third value of i = 25. It runs 3 times. Inside loop will run 10 times.
Fourth value of i = 125. It stops.
外迭代是n次迭代,而内部迭代是m次迭代,得到O(7sqrt(n)*(m - 2))
IMO,很复杂。
答案 1 :(得分:0)
让我们将其分解为两个关键点:
i
从1开始,并自动乘以5,直到它大于或等于7 sqrt(n)
。这是以对数步数呈指数增长。因此,我们可以将代码更改为以下等效项:
m = floor(log(5, 7n^(1/2)))
k = 0
while k < m do
j = 5^k
// ... inner loop ...
end
对于外循环的每次迭代,j
从i
开始,以2为步长递减,直到它小于或等于5
。请注意,在外循环i = 1
和第二个i = 5
的第一次执行中,内循环在第三次迭代之前不会执行。循环限制意味着如果j
为奇数,则k
的最终值为7,如果为偶数则为6(您可以使用笔和纸进行检查)。
结合上述步骤,我们得出: