псевдокод для линейного поиска цикла:Является ли этот цикл инвариантным правильным?
for j = 1 to A.length
if(A[j] = v)
return j;
return NIL
Loop инвариантного Я написал:
В начале каждой итерации для цикла, J является следующим индексом после где A [j-1] не соответствует v.
Инициализация:
Когда J равна и перед проверкой, является ли он меньше, чем a.length, предыдущий индекс . Тогда A [0] не равно v, потому что в этом контексте A [0] даже не существует.
Обслуживание:
Если А [J] равна v, то цикл завершается. Это означает, что у нас нет следующей итерации. Но если он не равен v, тогда следующая итерация цикла выполняется при сохранении инварианта цикла.
Прекращение:
условия в результате чего цикл прекратить в том, что J больше, чем a.length или v равна A [J]. Поскольку каждый итерации цикла увеличивается J по , мы проверили каждые элементы против v до J больше, чем a.length. Следовательно, алгоритм правильный. Если v равно A [j], то это означает, что мы нашли элемент, который мы искали. Таким образом, алгоритм правильный.
Правильно ли это?