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