我需要一些帮助来计算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
答案 0 :(得分:2)
你是对的。
for i in range(n)
为O(n)
,嵌套意味着乘法,因此O(n^2)
是正确的。
不,顺序评估是添加,因此连续两个循环是O(n)+O(n)=O(n)
。
不,每次迭代减半 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/
步骤中。