線形探索ループのための擬似コード:このループは不変ですか?
for j = 1 to A.length
if(A[j] = v)
return j;
return NIL
ループ私が書いた不変:
forループの各反復の開始時に、Jは後に次のインデックスでありますA [j-1]はvと等しくない。
初期化:
Jがに等しく、それは A.length よりも小さいかどうかをチェックする前に、以前のインデックスがあります。この場合、A [0]は存在しないため、A [0]はvと等しくありません。
メンテナンス:
A [j]ははその後、ループが終了しVに等しい場合。つまり、次の反復はありません。しかし、それがvに等しくなければ、ループの次の反復が実行され、ループ不変式が保持されます。
終端:
終了するforループ引き起こす条件は、Jが大きいよりA.length又はVがA [j]がに等しくなるということです。 Jが大きくよりA.lengthになるまで、各ループの繰り返しが増加J ことであるので、我々はVに対するのすべての要素をチェックしています。したがって、アルゴリズムは正しい。 vがA [j]と等しい場合は、検索した要素が見つかりました。従ってアルゴリズムは正しい。
これらは正しいですか?