これは、配列内の線形検索の擬似コードであり、配列内i
の目的の要素が見つかった場合はインデックスを返し、そうでない場合はインデックスを返します (これは CLRS ブック、第 3 版、演習 2.1-3 からのものです)。e
A
NIL
LINEAR_SEARCH (A, e)
for i = 1 to A.length
if A[i] == e
return i
return NIL
私はそこからループ不変式を推定しようとしているので、私の理解によれば、ループ内の任意の時点で、サブ配列A[1..i-1]
には等値テストが偽であることが証明された値のみが含まれているという事実によって表されると思います。
具体的には、サブ配列の長さが null であることを意味する最初の反復の前に、そのような要素がそれに属するi-1 == 0
ことはできません。次の反復の前に、等価テストも終了条件でもあるため、想定される不変プロパティは依然として true を保持する必要があります。そうでない場合、ループは既に終了しています。終了時に、関数がインデックスを返そうとしている (その場合、ループ不変条件は自明に true である) か、NIL が返されている (その場合、ループ不変条件は any に対して true を保持する) のいずれかです。v
v == e
i == A.length + 1
1 < j < i
上記は正しいですか?そうでない場合に備えて、正しいループ不変式を提供していただけますか?
ご清聴ありがとうございました。