オートマトン・形式言語の問題
アルファベット 上の文字列 ()を 3 進数として読んだ値を と書く(先頭に があってもよい。空文字列 については とする)。たとえば である。
言語
を受理する DFA を、次のように作る。
- 状態の集合は とし、状態 は「ここまで読んだ文字列 について を で割った余りが である」ことを表す。
- 初期状態は 、受理状態は のみとする。
- 遷移関数 は、余りが の文字列の後ろに文字 を 1 つ付け加えたときの、新しい値を で割った余りとする。
この DFA の遷移表(4 つの状態 × 3 つの文字で、全部で 個の欄がある)を完成させたとき、遷移先が受理状態 である欄の個数を求めよ。
この問題で使うもの
- 言語の条件から DFA を作る(余り・接尾辞・積構成)(説明と入口の問題)
この問題を解けるようになるまで(20 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
「2 進数の値が の倍数」の DFA と同じように、状態を「ここまでの値を 4 で割った余り」にして遷移を決める技能を使います。
ヒント 2
3 進数では なので、 となります。
ヒント 3
の行は 、 の行は を 4 で割った余りで です。残りの の行も同様に計算し、 の欄を数えましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
手順 1:1 文字付け加えたときの値の変化を式にする。
3 進数の後ろに 1 桁 を付け加えると、それまでの各桁の位が 1 つずつ上がるので
となる。
手順 2:余りだけで遷移が決まることを確かめる。
ならば、合同式の性質より
である。よって新しい余りは と だけで決まり、
と定めればよい。空文字列の値は なので初期状態は 、値が の倍数のとき受理するので受理状態は である。
手順 3:遷移表を作る。
| 状態 | |||
|---|---|---|---|
計算の内容は次のとおり。
- : →
- : →
- : →
- : →
手順 4:遷移先が の欄を数える。
表で遷移先が になっているのは 、、 の 3 か所である。( は と同じで、 なので のときは解がない、と確かめることもできる。)
確認として、 を読むと となり、 と一致する。
したがって、求める個数は である。
別解
文字 を付け加えると新しい値は になるので、 である。
各状態について計算する。
- : に対し 。
- : なので余りは 。
- : なので余りは 。
- : なので余りは 。
遷移表(初期状態 0、受理状態 0)
| 状態 | c=0 | c=1 | c=2 |
|---|---|---|---|
| 0 | 0 | 1 | 2 |
| 1 | 3 | 0 | 1 |
| 2 | 2 | 3 | 0 |
| 3 | 1 | 2 | 3 |
遷移先が 0 の欄は , , の 3 個である。 の行には 0 がない。
検算として、各状態で すなわち となる を数える。 では がちょうど 1 つ存在し、 では が必要だが に含まれない。したがって合計は 3 個である。