多维数据集算法求和的循环不变量是多少?

时间:2012-02-11 01:53:40

标签: algorithm invariants loop-invariant

我不能100%确定三次幂求和中的不变量是多少。

注意:n始终为非负值。

伪代码:

triplePower(n)
    i=0
    tot=0
    while i <= n LI1
        j = 0
        while j < i LI2
            k = 0
            while k < i LI3
                tot = tot + i
                k++
            j++
        i++

我知道它很乱,可以用更容易的方式完成,但这是我应该做的(主要用于算法分析练习)。

我想出三个循环不变量; LI1,LI2和LI3 我认为对于LI1,不变量与tot =(i ^ 2(i + 1)^ 2)/ 4(从0到i的多边形的总和的等式)有关 我不知道该怎么做LI2或LI3。 LI2处的循环使i ^ 3和LI3生成i ^ 2,但我并不完全确定如何将它们定义为循环不变量。

如果我在每个while循环体中有3个单独的总变量,并且在第一个循环中在i ++之前添加到主要总数中,那么不变量会更容易定义吗?

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为您可以将它们定义如下:

LI1 <= (i^2(i+1)^2)/4
LI2 <= (i+1)^3 + (i^2(i+1)^2)/4
LI3 <= (i+1)^2 + i^3 + (i^2(i+1)^2)/4

(如果您的计算金额是正确的。)