オートマトン・形式言語の問題
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
長さ の文字列
は で生成される。 の(開始記号 を根とする)導出木の個数を求めよ。
この問題で使うもの
- 導出木の個数の数え上げ(説明と入口の問題)
- CYK 法(説明と入口の問題)
この問題を解けるようになるまで(3 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
CYK 法の表で、各部分文字列について「 から導く導出木が何個あるか」を数えていく。 は とまとめて考えるとよい。
ヒント 2
を開き括弧、 を閉じ括弧とみると、 から導かれるのは対応のとれた括弧列である。 を「深さが 0 に戻る位置」で区切ってみよう。
ヒント 3
と 4 ブロックに分かれ、各ブロックの導出木はそれぞれ 1 個。ブロック 個の連結の個数 は を満たし、 となる。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
規則 , , をまとめると、 の規則は実質的に
である。したがって から導かれる文字列は、 を開き括弧、 を閉じ括弧とみたときの空でない「括弧の対応がとれた文字列」である。
部分文字列 に対し、 を根として を導く導出木の個数を とおく(CYK 法の表の各欄に、非終端記号 の導出木の個数を書き込むことに相当する)。
(1) の分解. 括弧の深さを左から数えると、 は深さが に戻る位置で
の つのブロックに分かれる。各ブロックは、それ以上「対応のとれた 2 つの空でない文字列の連結」に分けられない。
(2) 各ブロックの導出木の個数.
- : のみが使える( は長さ の が存在しないので不可、 は が長さ の文字列を導けないので不可)。よって 。
- : で とし、 で とする。内側の は 通り。 は , , のどの分け方でも両側が から導けないので不可。 は長さ のときだけ。よって 。
(3) 連結部分の導出木の個数. 2 つ以上のブロックの連結 では、根の規則は に限る( を使うと で が対応のとれた文字列になり、 が 1 ブロックになってしまう)。 で分けるとき、左右がともに から導けるのはブロックの境目で分けるときだけなので
が成り立つ。各ブロックで であるから、ブロックの個数を として とおくと
は ブロックの連結なので、導出木の個数は である(これはカタラン数 に等しい)。
答え:
別解
, なので、 を開き括弧、 を閉じ括弧とみなす。 を に代入すると、 の規則は実質 と同じで、各導出木はこれらの規則の適用に一対一に対応する( は 、 は )。
から導出される文字列は空でない釣り合った括弧列だけである。 は で、原始的な(それ以上分けられない)ブロックに分けると
の 4 個になる。
1. の分割は、左右とも釣り合った文字列になる位置、すなわちブロックの境界でしか起こらない。
2. 各ブロックの導出木の個数はどれも 1 である。 は のみ。 は , で内側の が を導出する 1 通りのみ。
3. したがって、ブロック 4 個を の二分木で結ぶ方法の数、すなわち 4 個の積の括弧付けの数が答えになる。これはカタラン数 である。
検算として CYK で数える。 に対し、部分列 の木の個数を とすると、( のとき最後の項は 1)である。 型の 3 ブロックは 2 通り、4 ブロックは 通り(分割点が 1 個目・2 個目・3 個目の後のとき、それぞれ 、、)で、上の結果と一致する。
答え: 5