単元一覧 › 大学数学 オートマトン・形式言語

オートマトン・形式言語の問題

難易度 2教科書の演習問題レベル大学数学 オートマトン・形式言語

終端記号 、非終端記号 、開始記号 をもち、次の生成規則からなるチョムスキー標準形の文脈自由文法 を考える。

長さ の文字列 について、 を根とし葉を左から読むと になる の構文木(導出木)は何通りあるか。すなわち、 から への最左導出の個数を求めよ。

この問題で使うもの

ヒント

行き詰まったら、上から順に 1 つずつ開いてください。

ヒント 1

CYK 法の表の各マスに、非終端記号だけでなく「その記号を根とする構文木の個数」を書き込むことを考えましょう。

ヒント 2

部分文字列 について、 は のときだけ、 は先頭の を切り離す分割、 は末尾の を切り離す分割だけが使えます。( を代入)という漸化式が得られます。

ヒント 3

、、、、、 です。あとは を計算しましょう。

答えと解説

答えを見る
結果を記録する(このブラウザにだけ保存されます):
解説を読む

方針:CYK 法の表に「個数」を記録する。

CYK 法では、 の各部分文字列について、それを導出できる非終端記号を表に書き込む。ここでは記号だけでなく、その記号を根とする構文木の個数も記録する。構文木と最左導出は 1 対 1 に対応するので、 を根とする の構文木の個数を数えればよい。

の部分文字列のうち または 以外の非終端記号が導出しうるのは ()の形のものだけである( の後に が来る部分文字列は、どの規則の右辺も「 側の記号が左、 側の記号が右」なので導出できない)。そこで部分文字列 から , を根とする構文木の個数を , と書く。

分割の考え方. 長さ 以上の部分文字列を左右 2 つに分けるとき、
- :左が (1 文字 )、右が (1 文字 )なので、 のときだけ 通り。
- :左が先頭の 1 文字、右の を が導出する。 は から始まるので を 1 個以上含む必要があり、 のときだけ 通り。
- :右が末尾の 1 文字、左の を が導出するので 通り( が必要)。
- :同様に 。

よって

( は のとき 、それ以外は 。定義されない項は とする)。

表を短い部分文字列から埋める.
- ()。
- ()。()であることも同様にわかる。
-
-
-
-
-
-

したがって の構文木は 通りである。

確認. 構文木は、中心の ()から始めて「外側に を付ける操作()」と「右に を付ける操作()」を順に施したものとみなせる。 では前者が 回、後者が 回で、その並べ方は 通りとなり一致する。

答え:

別解

文字列 を から導出する構文木の数を 、 から導出する構文木の数を とおく。 はともに空列を導出しないので、 でなければ 、 とする。また生成規則から導出される文字列はすべて の形である。

より 。

の各規則について考える。
- は のときだけ使え、寄与は 。
- の寄与は 。
- の寄与は 。

よって次の漸化式を得る。

のとき、 であり、 では なので 。

のとき、、、、、。

のとき、、、、、。

したがって の構文木は 通りである。

検算として、 を何回使うかで場合分けする。この文法の構文木は、根から を繰り返し使い、最後に か に至る構造をしており、 を 1 つ消費するたびに が 1 つ対応づけられる。 が 3 個、 が 5 個のとき、 ごとの の置き方の数え上げは漸化式の結果と一致する。

文法が構文木ごとに異なる最左導出を与えるので、最左導出の個数も である。

この問題の確認

AI が作成した問題です。公開前に次の確認を行いました。確認の方法について

間違いを報告する

この問題の誤り・分かりにくい点・難易度や学年のずれを知らせる
どこについての報告ですか

報告の内容と問題の番号を保存します。名前やメールアドレスは保存しません。

関連する問題