我是编程新手,我在教科书中遇到了这个问题。
我必须使用Theta表示法为此程序找到最坏情况下的运行时间:
1 i = 1, total = 0
2 while i < n/2 :
3 i = i*2
4 total = total + A[i]
我的理解是, 我们需要查看每一行的执行次数。
第一行只运行一次。
while循环运行多次。 (第2至4行) 当i <时,while循环将停止。 N / 2。
我在循环的每次迭代中加倍(第3行)。
所以迭代的总数将是sqrt(n / 2 * 1 / i)?
请帮我解决这个问题。
答案 0 :(得分:0)
如果我们假设assingation,add,multiply或条件等于1.结果是3 + 5n / 2。因为循环条目5 n / 2,最后一个条件添加第一个分配是3。
1 i = 1,总数= 0 - > 2
2而我&lt; n / 2: - &gt; 1 + n
3 i = i * 2 - > 2n
4总=总+ A [i] - > 2n
5循环除以2。
对不起,如果我的语法有错误,我不是母语。
答案 1 :(得分:0)
它将是log(n)
(记录库2)
Explination :(这会有点粗糙......)
1)每次迭代,您最初将i
与2
乘以i=1
。在循环x
次迭代后i = 2^x
。
那么,问题是在x
方面出现了多少循环迭代n
?我们知道终止条件是i >= n/2
。我们也知道x
次迭代后i = 2^x
。因此,我们可以用2^x
替换i
来获取终止条件2^x >= n/2
。
现在我们有一个方程式,我们可以用x
来解决n
。 。 。
2^x >= n/2
终止条件
log(2^x) >= log(n/2)
取双方的日志(基数2)
x >= log(n/2)
左侧简化为x
当迭代次数x
大于或等于log(n/2)
时,循环将终止。所以我们希望循环运行roof(log(n/2))
迭代。这为我们提供了O(log(n/2)) = O(log(n))
刚刚注意到这是针对big-theta的,无论如何我都会听到这个消息。
答案 2 :(得分:0)