我正在练习分析代码片段上的时间复杂度,但是,我很难弄清楚以下两个代码如何具有不同的时间复杂度:
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)。 显然我弄错了。 请提供一些提示,以提示如何正确分析上述两个代码的时间复杂度? 很有帮助,谢谢。
答案 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))
希望获得帮助。