オートマトン・形式言語の問題
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 ( を 個並べた文字列 )の、 における最左導出の個数を求めよ。
この問題で使うもの
- 導出木の個数の数え上げ(説明と入口の問題)
- 文脈自由文法の導出と導出木(説明と入口の問題)
この問題を解けるようになるまで(3 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
最左導出と導出木は 1 対 1 に対応するので、 の導出木の個数を数えればよい。文字列が だけなので、部分文字列は長さだけで区別すれば十分。
ヒント 2
を から導く導出木の数を 、 から導く数を とおくと、、()、。
ヒント 3
CYK 法の表のように長さの短い順に計算すると、、 となる。続けて を計算する。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
文脈自由文法では、ある文字列の最左導出と、その文字列の導出木(構文木)は 1 対 1 に対応する。そこで導出木の個数を数える。
はチョムスキー標準形なので、CYK 法と同じように、部分文字列ごとに「各非終端記号から何通りの導出木で導けるか」を表にする。文字列は だけからなるので、部分文字列は長さだけで決まる。長さ の文字列 を から導く導出木の個数を 、 から導く導出木の個数を とする。
漸化式. 長さ の文字列を、根の規則が 2 つの非終端記号に分ける位置で場合分けする。
- だけが の規則なので、 で
- の規則は , , 。よって ()、 で
表の計算.
- : , 。
- : 。。
- : 。。
- : 。。
- : 。。
- : 。
| 1 | 2 | 3 | 4 | 5 | 6 | |
|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 7 | 26 | 105 | |
| 1 | 1 | 3 | 10 | 38 | 154 |
よって の最左導出の個数は である。
(参考: の組は「 を 3 つに分ける」ことに当たるので、 は各内部節点の子が 2 個または 3 個の順序木で葉が 個のものの個数に等しい。)
別解
文法は曖昧でも、各導出木にはちょうど 1 つの最左導出が対応するので、最左導出の個数は導出木の個数に等しい。 を、それぞれ から 、 から を導く導出木(最左導出)の個数とする。
規則から(チョムスキー標準形で、, )
- : , 。
- : , , 。
- : , , 。
- : , , 。
- : , , 。
- : , , 。
よって求める個数は 。
検算: を直接数えると、 で分割 の 2 通り、 で , の 1 通り、合計 3 で と一致する。