0

以下は、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 を減らします。これは最終的に発生する必要があります。

上記のコードに関する私の質問

  1. 4 行目で k を min(m + 1, q+2) として選択しているのはなぜですか?

  2. 以下の説明文の著者は、「コードは、考えられる最大の k の値である min(m, q+1) で始まる」と述べています。上記の 4 行目の疑似コードと一致しないのはどれですか?

上記の質問に答えながら、疑似コードの簡単な例と手順を説明するように要求します。

4

0 に答える 0