Algorithm 在程序中寻找循环不变量以计算立方体和?
我不是100%确定三次幂和的不变量是什么 注:n始终为非负值 伪代码: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++
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;