【问题标题】:Calculating Total Number of Times of Loops计算循环的总次数
【发布时间】:2012-11-20 00:57:17
【问题描述】:

我正在尝试计算执行最里面的语句的总次数。

count = 0;
for i = 1 to n
    for j = 1 to n - i
       count = count + 1

我认为循环最多可以执行 O(n*n-i) = O(n^2)。我想通过使用双重求和来证明这一点,但我迷路了,因为我无法启动等式,因为 j = 1 被投入其中。

有人可以帮我解释一下吗?

谢谢

【问题讨论】:

    标签: math loops time complexity-theory


    【解决方案1】:

    对于每个i,内部循环执行n - i 次(n 是常量)。因此(由于i的范围从1n),要确定最里面的语句执行的总次数,我们必须计算总和

    (n - 1) + (n - 2) + (n - 3) + ... + (n - n)

    通过重新排列术语(将所有首先出现的ns 分组),我们可以看到这等于

    n*n - (1 + 2 + 3 + ... + n) = n*n - n(n+1)/2 = n*(n-1)/2 = n*n/2 - n/2

    这里有一个简单的 Python 实现来验证这一点:

    def f(n):
        count = 0;
        for i in range(1, n + 1):
            for _ in range(1, n - i + 1):
                count = count + 1
        return count
    
    for n in range(1,11):
        print n, '\t', f(n), '\t', n*n/2 - n/2
    

    输出:

    1 0 0 2 1 1 3 3 3 4 6 6 5 10 10 6 15 15 7 21 21 8 28 28 9 36 36 10 45 45

    第一列是n,第二列是内部语句的执行次数,第三列是n*n/2 - n/2

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      相关资源
      最近更新 更多