LINEAR-SEARCH(A, ν)
1 for i = 1 to A.length
2 if A[i] == ν
3 return i
4 return NIL
Инвариант цикла: в начале i
-ой итерации цикла for
(строки 1–4),
∀ k ∈ [1, i) A[k] ≠ ν.
Инициализация:
i == 1 ⟹ [1, i) == Ø ⟹ ∀ k ∈ Ø A[k] ≠ ν,
, которая является истинной, так как любое утверждение относительно пустого набора истинно ( бессмысленная правда ).
Обслуживание: давайте предположим, что инвариант цикла равен true в начале i
-й итерации цикла for
.Если A[i] == ν
, текущая итерация является последней (см. Раздел окончание ), поскольку строка 3 выполняется;в противном случае, если A[i] ≠ ν
, у нас есть
∀ k ∈ [1, i) A[k] ≠ ν and A[i] ≠ ν ⟺ ∀ k ∈ [1, i+1) A[k] ≠ ν,
, что означает, что инвариантный цикл все еще будет истинным в начале следующей итерации (i+1
th).
Завершение: цикл for
может закончиться по двум причинам:
return i
(строка 3), если A[i] == ν
; i == A.length + 1
(последний тест цикла for
), в этом случае мы находимся в начале A.length + 1
-ой итерации, поэтому инвариант цикла равен
∀ k ∈ [1, A.length + 1) A[k] ≠ ν ⟺ ∀ k ∈ [1, A.length] A[k] ≠ ν
, а значение NIL
равновозвращено (строка 4).
В обоих случаях LINEAR-SEARCH
заканчивается как положено.