如何计算代码片段中大θ的时间复杂度?

时间:2018-10-07 14:29:31

标签: time-complexity big-o

我正在练习分析代码片段上的时间复杂度,但是,我很难弄清楚以下两个代码如何具有不同的时间复杂度:

for(a=1,a<=n,a++):
 for(b=1,b<=a, b++):
   c=c+1

代码的运行时间可以  表示为θ(n ^ 2)。

但是

for(a=1,a<=n,a=2*a):
 for(b=1,b<=a, b++):
   c=c+1

表示为θ(n)。

我认为代码的第二个片段的运行时间为θ(n ^ 2/2)=θ(n ^ 2)。 显然我弄错了。 请提供一些提示,以提示如何正确分析上述两个代码的时间复杂度? 很有帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

展开它们时,您会清楚地看到它。让我试试:

第一个片段:假设n = 8

a = 1, b = 1
a = 2, b = 1,2
a = 3, b = 1,2,3
a = 4, b = 1,2,3,4
a = 5, b = 1,2,3,4,5
a = 6, b = 1,2,3,4,5,6
a = 7, b = 1,2,3,4,5,6,7
a = 8, b = 1,2,3,4,5,6,7,8

第二个片段:假设n = 8

a = 1, b = 1
a = 2, b = 1,2
a = 4, b = 1,2,3,4
a = 8, b = 1,2,3,4,5,6,7,8

通过简单地计算上述循环数,您会开始发现a=a*2已按相同比例取消了外部循环数。

实际上,我认为答案应该是θ(n log(n))

希望获得帮助。