オートマトン・形式言語の問題
終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。
文字列 (長さ )について、 における の相異なる構文木(導出木)の個数を求めよ。なお、これは から への相異なる最左導出の個数に等しい。
この問題で使うもの
- 導出木の個数の数え上げ(説明と入口の問題)
- CYK 法(説明と入口の問題)
- 文脈自由文法の導出と導出木(説明と入口の問題)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
CYK 法の表の各マスに、非終端記号の集合ではなく「その非終端記号から部分文字列を導く構文木の個数」を書き込んで数えよう。 は , を作るための補助記号と見なせる。
ヒント 2
が導く文字列は と の個数が等しい。部分文字列 の個数 は、両端が か なら を加え、さらに の分割 を加えて求まる。
ヒント 3
長さ 6 の部分文字列について計算すると , , となる。あとは全体 について、包む場合と分割の場合を合計すればよい。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
方針 CYK 法の表に「その非終端記号から部分文字列を導く構文木の個数」を書き込む(数え上げ版 CYK)。
とし、部分文字列 を から導く構文木の個数を とする。
準備 1( の消去) , 以外に の規則はないので、, と見てよい。また はそれぞれ だけを導く。よって の構文木は、規則
による構文木と 1 対 1 に対応する。
準備 2( が導く文字列) どの規則も と を同数ずつ加えるので、 が導く文字列は と の個数が等しい空でない文字列に限る。 を の( の個数)( の個数)とすると
であり、 なら である。特に長さが奇数なら 。
漸化式 長さ では ( または のとき)。長さ 以上では、両端が または のときの「包む」規則と の分割を合わせて
となる。和は の範囲を動くが、 となるのは偶数長の部分だけである。
長さ 2 , , , , 。 と は 。
長さ 4
- :両端が なので包む規則はない。分割は 。よって 。
- :包む規則から 。分割 。よって 。
- :包む規則はない。分割 。よって 。
- , は , より 。
長さ 6
- :包む規則から 。分割は と 。よって 。
- :包む規則から 。分割は と 。よって 。
- :包む規則から 。分割は と 。よって 。
長さ 8 の両端は なので
これを元の文法で確かめる。 の場合は で が を導くので 通りである。 の場合は 通りである。 は先頭が でないので使えず、 は長さ の文字列にしか使えない。合計は で一致する。
よって構文木の個数は である。
別解
この文法の言語は、規則 と同じ形になる。 は 、 は を表し、内側の は空でない。
の部分文字列 を から導出する構文木の個数を とする。漸化式は次のとおり。
- 長さ 2 のとき、 または なら 、それ以外は 。
- 長さ 4 以上のとき、( による分割)に、両端が異なる文字( または )のとき を加える。
長さ 2: 。。
長さ 4:
- (abaa は a と b の個数が等しくない)
- (baab)(両端が同じ b なので包みなし)
- (aabb)
- (abba)(両端が同じ a なので包みなし)
- (bbab は a と b の個数が等しくない)
長さ 6:
-
-
-
長さ 8:
。
よって構文木の個数は 7。