计算简单程序的时间复杂度

时间:2016-02-01 22:10:40

标签: time-complexity asymptotic-complexity big-theta

我是编程新手,我在教科书中遇到了这个问题。

我必须使用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)?

请帮我解决这个问题。

3 个答案:

答案 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)每次迭代,您最初将i2乘以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))

的大O运行时

刚刚注意到这是针对big-theta的,无论如何我都会听到这个消息。

答案 2 :(得分:0)

当我们研究算法的时间复杂度时,我们对函数的渐近行为感兴趣。因此,我们可以在不失一般性的情况下假设n有点大(在下面的n/2 - 1 ~= n/2中使用)。

现在,在最糟糕的情况下,while循环几乎没有运行最终运行;即,在迭代i=n/2-1完成后之后,循环终止。

然后我们可以使用sigma表示法研究循环中的迭代次数:

enter image description here

因此,该算法在Θ(log_2 n)中运行。