Так что, если у меня есть следующий код:Loop инвариант и использование для решения алгоритма?
public int sumSquares(int n){
int sum = 0;
for(int i = 1; i <=n; i++){
sum += i*i;
}
return sum;
}
теперь я должен найти инвариант цикла. Мне сказали, что для такой петли инвариант Y = i^2 считается инвариантом цикла, однако я не знаю, могу ли я доказать, что это инвариант цикла. Поскольку Y - это просто что-то, тогда оно всегда истинно до, во время и после цикла, потому что это то, что i * i ... Является ли это верным доказательством того, что он является инвариантом?
Также, когда дело доходит до доказательства алгоритма с инвариантом, правильно ли сказать, что sum = сумма от 1 до n i * i (или Y, инвариант цикла) = n (n + 1) (2n + 1)/6
Затем используйте индукцию, чтобы показать, что это правильно? Является ли это правильным использованием инварианта цикла для доказательства алгоритма?
Очень хотелось бы некоторую помощь :)
сумма + (сумма J * J, J = i..n) = (Сумма J * J, J = 1..n) – piotrekg2
Что? Я не верю, что сумма может быть в инварианте цикла, поскольку она не является постоянной. и алгоритм представляет собой сумму от 1 до n от i^2, так что какая сумма будет равна в конце. –
Все итерации всегда верны между итерациями. – piotrekg2