【问题标题】:What is the worst case analysis of this code fragment?这段代码片段的最坏情况分析是什么?
【发布时间】:2011-01-30 17:18:30
【问题描述】:
sum = 0;
for (int i = 0; i < N; i++)
  for(int j = 0; j < i*i; j++)
    sum++;

我不完全确定我的答案;我认为内循环运行 i^2 操作,外循环运行 N 次,所以最终答案是 O(N^3)?

【问题讨论】:

  • 我猜前两行也应该在代码块中?
  • 当您提出问题时,右侧有一个方便的如何格式化框。值得一读,问题区域上方 [?] 中的the page linked 也是如此。

标签: java algorithm big-o performance


【解决方案1】:

操作数为sum = 1 + 4 + 9 + ... + N^2。这是因为当i = 0 时,j 会自增 0 次。当i = 1 时,j 将自增一次。当i = 2 时,j 将自增4 倍,以此类推。

这个和等于N(N + 1)(2N + 1)/6,所以算法确实是O(N^3)。你可以通过归纳prove这个公式。

【讨论】:

    【解决方案2】:

    这对我来说是正确的(渐近)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多