算法分析Big-O

时间:2017-10-03 15:41:32

标签: python algorithm

我需要一些帮助来计算Big-O运行时间。

我在每个问题发生后都试图这样做,但不确定它是否正确完成。

问题1:鉴于以下代码片段,它的Big-O运行时间是多少?

["banana", "apple", "kiwi", "orange"]

T(n)= c1 + n *(n)

= c1 + n ^ 2

O(n)≈n^ 2

问题2:给定3以下代码片段的Big-O运行时间是什么?

 test = 0

 for i in range(n):

        for j in range(n):

                test= test + i *j

T(n)= c1 * n + c2(n * n)

T(n)= c1 * n1 + c2n ^ 2

O(n)≈n^ 2

问题3:鉴于以下代码片段,它的Big-O运行时间是什么?

 for i in range(n):

      test=test+1

 for j in range(n):

      test= test - 2

T(n)= n *(c1 + c2)

O(n)≈n

2 个答案:

答案 0 :(得分:2)

Q-1

你是对的。

for i in range(n)O(n),嵌套意味着乘法,因此O(n^2)是正确的。

Q-2

不,顺序评估是添加,因此连续两个循环是O(n)+O(n)=O(n)

Q-3

不,每次迭代减半 n,因此复杂度为O(log(n))

答案 1 :(得分:0)

首先,让我们从您的术语开始,O(n)≈f(n)不是正确的术语,正确的说法T(n)位于O(f(n)),其中T(n)是复杂的代码的功能,f(n)是给定的复杂性,因此T(n)位于O(n^2),例如。

第一个代码快照:
这确实是O(n ^ 2),你的分析是正确的。

第二段代码:
这是O(n ^ 2),假设第二个循环嵌套在第一个循环中(你的标识不清楚),再次 - 你的分析是正确的。
如果不是这种情况,则
这些是顺序循环 - 每个循环都取O(n),因此总复杂度是它们的加法,这也会产生O(n)。 / p>

第三代码快照:
这是O(logn)。每次迭代将i减半,直到i达到0.这种情况发生在将log_2(n)除以2的~/.gradle/wrapper/dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/ 步骤中。