【问题标题】:Determine time complexity of arithmetic progression确定算术级数的时间复杂度
【发布时间】:2020-04-17 13:26:31
【问题描述】:

我是分析时间复杂度的新手。有人可以帮我解决以下算法的时间复杂度吗?

public void test(int n)
{
  for(int i=1;i<=n;i=i+2)
    {
     for(int j=1;j<=i;j++)
     {}
    }
}

外循环将运行 n/2 次。内循环将运行 (1+3+5+7+9...n) 次。 内循环的时间复杂度是多少?我们如何计算这种算术级数的总和?

【问题讨论】:

    标签: time-complexity big-o complexity-theory


    【解决方案1】:

    假设 n 是奇数。然后对于一些 k,n = 2k + 1。现在

      1 + 3 + … + n
    = 1 + 3 + … + 2k+1
    = (1 + 3 + … + 2k + 1) + (1 + 1 + … + 1) - (1 + 1 + … + 1)
    = (1 + 1) + (3 + 1) + … + (2k + 1 + 1) - (1 + 1 + … + 1)
    = 2 + 4 + … + 2k+2 - (1 + 1 + … + 1)
    = 2(1 + 2 + … + k+1) - (1 + 1 + … + 1)
    = 2(k+1)(k+2)/2 - (k+1)
    = k^2 + 3k + 2 - k - 1
    = k^2 + 2k + 1
    = (k+1)^2
    = (n+1)^2/4
    

    我们可以测试几个词...

    n    f(n)    Series Sum
    1    1       1 = 1
    3    4       1 + 3 = 4
    5    9       1 + 3 + 5 = 9
    7    16      1 + 4 + 5 + 7 = 16
    

    看起来它检查出来了。

    【讨论】:

    • 你写了 n=2k+1。在这种情况下,k 是多少?
    • 如果系列是 1+5+9+13..n。我们是否有任何通用公式来计算它们的总和以确定其时间复杂度?
    • @nayak0765 k 是 n/2 向下舍入假设 n 是奇数,这是我从问题中推断出来的。对于第二个问题,让 n = 4k + 1,加减 3 + 3 + ... + 3 = 3k,从 4 + 8 + ... + 4k+4 中分解出 4,按照代数的答案进行简化。
    猜你喜欢
    • 2018-01-11
    • 2012-09-16
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2022-12-03
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多