【问题标题】:the number of execution time of 2 code will differ? [closed]2个代码的执行时间会不同吗? [关闭]
【发布时间】:2013-11-19 10:31:24
【问题描述】:

我想知道这 2 段代码将执行多少次。都是n次还是其中一个是n+1?

int sum=0;
for (int i = 1; i <= n; i++) 
sum = sum + i; 

与

int sum=0;
for (int i = 1; i <= n; ++i) 
sum = sum + i; 

有人帮我吗?

编辑 因为我得到了这么多,不好的评论。我决定说出我真正的意图来问这个问题。

int sum = 0;
for (int i = 1; i <= n; ++i)
sum = sum + f1(i, n);}

int f1(int x, int n) { 
int sum = 0; 
for (int i = 1; i <= n; i++) 
sum = sum + i; 
return (x + sum); } 

这段代码sn-p的确切复杂度是O(n*(n+1)),我想知道为什么有(n+1)而不是o(n*n)

【问题讨论】:

  • 你连测试都没有?
  • 问问自己,如果 n 为 1,答案是什么。顺便说一句,您应该缩进 for 循环控件(即 sum = …)。
  • @R.MartinhoFernandes 我测试了它,根据我的说法,它们会同时执行。但是这个问题的编辑版本的确切复杂度是 O(n*(n+1)),我想知道 1 是哪里来的。
  • @MitchWheat 那么,那是什么=
  • 我认为是 O(nn)。顺便说一句,O(n*(n+1)) 和 O(nn) 没有区别。

标签: c++ code-analysis execution-time


【解决方案1】:

不管你用哪一个,程序输出都是一样的; i++ 和 ++i 不是 for 循环中的终止条件,而是在每次迭代结束时评估的语句。

但是请注意++i 永远不会比i++ 慢;从概念上讲,必须为后者获取对象副本。一个好的编译器会优化副本。

还有一点风格:请将sum = sum + i;行缩进;否则很难阅读。

【讨论】:

    【解决方案2】:

    我认为代码的代码复杂度是O(n^2)。在复杂性中循环 n+1 并不重要。 O(n+1) = O(n-1) = O(n) 所以都一样,复杂度可以说是n^2。

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-07
      相关资源
      最近更新 更多