Introduction to Algorithms ( http://mitpress.mit.edu/algorithms ) に見られるように、演習では次のように述べられています。
入力:配列A[1..n]
と値v
出力: Index i
、 whereA[i] = v
またはNIL
ifv
が見つからないA
シーケンスをスキャンして v を探す LINEAR-SEARCH の疑似コードを記述します。ループ不変式を使用して、アルゴリズムが正しいことを証明します。(ループ不変条件が 3 つの必要なプロパティ (初期化、保守、終了) を満たしていることを確認してください。)
アルゴリズムの作成に問題はありませんが、得られないのは、ループの不変条件をどのように決定できるかということです。ループ不変の概念、つまり、ループの開始前、各反復の終了/開始時に常に真であり、ループが終了しても真である条件を理解したと思います。通常はこれが目標です。たとえば、sort の挿入、 の繰り返し、j
から始まる要素は常にソートされます。これは私には理にかなっています。しかし、線形検索の場合は?ループ不変条件を考えるには単純すぎるように思えます。私は何か間違ったことを理解しましたか?次のような明白なものしか考えられません(NILまたは0とnの間のいずれかです)。よろしくお願いします!j = 2
A[1..j-1]