以下は、CLRS によるアルゴリズム入門のテキストです。以下は、有限状態オートマトンを使用した文字列照合のコード スニペットです。Trnstion 関数を使用して、検索するパターンで状態テーブルを作成します。
遷移関数の計算: 次の手順は、与えられたパターン P [1: :m] から遷移関数 sigma を計算します。
COMPUTE-TRANSITION-FUNCTION.
1 m = P:length
2 for q = 0 to m
3 for each character a belongs to alphabetset
4 k = min (m + 1, q + 2)
5 repeat
6 k = k - 1
7 until Pk is suffix Pqa
8 sigma(q, a) = k
9 return sigma
この手順は、式 (32.4) の定義に従って簡単な方法で sigma(q, a) を計算します。2 行目と 3 行目で始まるネストされたループは、すべての状態 q とすべての文字 a を考慮し、4 ~ 8 行目で sigma(q, a) を Pk がサフィックス Pqa となるような最大の k に設定します。コードは、考えられる最大の k 値である min(m, q+1) から始まります。次に、P0 がすべての文字列の接尾辞である空の文字列であるため、Pk が接尾辞 Pqa になるまで k を減らします。これは最終的に発生する必要があります。
上記のコードに関する私の質問
4 行目で k を min(m + 1, q+2) として選択しているのはなぜですか?
以下の説明文の著者は、「コードは、考えられる最大の k の値である min(m, q+1) で始まる」と述べています。上記の 4 行目の疑似コードと一致しないのはどれですか?
上記の質問に答えながら、疑似コードの簡単な例と手順を説明するように要求します。