对时间复杂性的误解?

时间:2018-01-31 16:13:20

标签: algorithm time-complexity complexity-theory

我的问题
我目前正在学习时间复杂度,并且我得到了以下示例来解决时间复杂性:

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 我不知道为什么。任何理解上的帮助都会很棒!

此外,是否有一种方法可以帮助实现其他常见的复杂性?

例如:

  1. n
  2. log n
  3. n log n
  4. n2(权力为2)
  5. n3(权力为三)
  6. 2n(power to n)

2 个答案:

答案 0 :(得分:2)

我和我的教授曾就同一主题进行了一次非常有趣的讨论。我曾在一家非常酷的公司工作过,他使用beowulf集群进行热模拟。非常非常计算密集。我的教授说,如果我可以从4n^22n^2采取一项功能,我的老板就不会高兴。但如果我能从4n^24n,他会很开心。我举起手,说如果我能把时间缩短一半,我的老板就会非常非常高兴。她说不,他只会对一个数量级的改进感到满意 - 相同数量级的线性改进是无关紧要的。

那天我打电话给老板。他说,如果我能把运行时间缩短一半,他会把我带回家,加倍工资,给我买牛排晚餐一年。

有时知道系数是多少很重要。其他时候却没有。因此,在处理这些代码段的复杂性顺序时,4n10000nn都是相同的,这是绝对正确的 - 它们是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。它提供了一些非常直接的解释