我的问题
我目前正在学习时间复杂度,并且我得到了以下示例来解决时间复杂性:
sum=0
for j=1 to 12
add = add + figures[j]
average = add/12
print average
for x=12 to n-1{
total = total - figures[x-11] + figures[x+1]
average=total/12
print average
}
我的回答:时间复杂度= n 解释/思考过程: 第一个循环执行12次,第二个循环执行n-12次。我相信时间的复杂性是' n'因为n-12 + 12 = n并且循环没有嵌套。
老师的回答:时间复杂度= 2n 我不知道为什么。任何理解上的帮助都会很棒!
此外,是否有一种方法可以帮助实现其他常见的复杂性?
例如:
答案 0 :(得分:2)
我和我的教授曾就同一主题进行了一次非常有趣的讨论。我曾在一家非常酷的公司工作过,他使用beowulf集群进行热模拟。非常非常计算密集。我的教授说,如果我可以从4n^2
到2n^2
采取一项功能,我的老板就不会高兴。但如果我能从4n^2
到4n
,他会很开心。我举起手,说如果我能把时间缩短一半,我的老板就会非常非常高兴。她说不,他只会对一个数量级的改进感到满意 - 相同数量级的线性改进是无关紧要的。
有时知道系数是多少很重要。其他时候却没有。因此,在处理这些代码段的复杂性顺序时,4n
或10000n
或n
都是相同的,这是绝对正确的 - 它们是O(n)
。< / p>
顺便说一句,他可能正在使用2n
而不是n
,因为在第二个循环中有两个查找,而第一个循环(运行一定次数)只有1个查找。
所以,如果他说“时间复杂度是2n”,他是对的。如果他说“时间复杂度是O(2n)”他是不正确的 - O(...)意味着非常具体的东西,并且没有系数。
答案 1 :(得分:0)
是的,他的答案是对的。时间复杂度为2n。
在此示例中,for循环将运行某个值n。无论是从1到12还是从1到1000都无关紧要,因为无论n值是什么,for循环一旦达到其极限n就会结束执行。
他的答案中的2,时间复杂度= 2n,来自这样一个事实,即为此样本执行的两个for循环已完成执行。
检查此article。它提供了一些非常直接的解释