【问题标题】:Simple time-complexity problems简单的时间复杂度问题
【发布时间】:2015-03-30 15:31:13
【问题描述】:

我需要知道这两段代码的复杂度。

public static int Sum(int x, int y){ 
return y*(y+1)/2 - (x-1)*x/2;
}

public static int RecSum(int x, int y){ 
if (x < y+1)
    return x + RecSum(x+1, y);  
else
    return 0;    
}

我认为 Sum 是 O(n^2) 而 RecSum 是 O(n)。

我说的对吗?

【问题讨论】:

  • 这是作业吗?
  • 这取决于 n 是什么
  • 您的第二种方法应该运行一次或永远运行。
  • @SashaSalauyou,第一个是 O(1),但第二个不是,因为它是递归的。 (第二个是 O(y)。)
  • @JohnBollinger 是的,我的错。 O(n)

标签: java time-complexity


【解决方案1】:

如果你看一下 Sum() 当输入改变时循环的数量是如何改变的? Sum() 无论输入如何,都只执行 1 次计算。换句话说 - 无论输入如何,执行时间都是恒定的。因此你有 O(1)。

RecSum() 调用自身。次数取决于y,x之间的差异。因此,如果该差异加倍,则执行时间会加倍。所以你有 O(n)

也许这也有用i want to calculate the T(n) for the two algorithms

【讨论】:

  • 非常感谢,按照您的解释方式非常有道理。
  • @Chriskaz 如果您愿意,请接受答案,这就是 SO 的工作方式。
  • @SashaSalauyou 非常感谢
猜你喜欢
  • 2010-12-10
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
相关资源
最近更新 更多