Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在程序中寻找循环不变量以计算立方体和?_Algorithm_Math_Big O_Analysis_Invariants - Fatal编程技术网

Algorithm 在程序中寻找循环不变量以计算立方体和?

Algorithm 在程序中寻找循环不变量以计算立方体和?,algorithm,math,big-o,analysis,invariants,Algorithm,Math,Big O,Analysis,Invariants,我不是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++

我不是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++
triplePower(n)
i=0
tot=0

当我面对这样一个递增计算总和的循环时,一个很好的不变量是,到目前为止,你计算的总和是否等于你认为的总和的第一部分。在本例中,您希望计算前n个正完美立方体的和,并通过每次添加一个立方体来实现。因此,一个可能的不变量是

tot=总和(j从0到i)j3

另外,i和n之间的关系是什么?好吧,我们应该有我≤ n+1。为什么是n+1?这是因为在上一次迭代中,当i=n时,我们仍然会增加i。使用这两个不变量,可以证明此循环计算的值是正确的

至于运行时,您可以非常轻松地计算它。首先,每次迭代要做多少工作?O(1)?O(n)?O(n2)?那么,有多少次循环迭代?O(1)?O(n)?O(n2)?这两个术语的乘积将给出您的答案


希望这有帮助

您的算法可以这样简化(我希望您已经习惯了C语言语法):

tot=0;

对于(i=0;我很抱歉反应太晚。事实上,我已经对我的情况有了更好的了解,所以我不得不对这个问题做了一些修改。
tot = 0;
for ( i = 0 ; i <= n ; i ++ )
    for ( j = 0 ; j < i ; j ++ )
        for ( k = 0 ; k < i ; k ++ )
            tot = tot + i;