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

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

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

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

文字列 の における構文木(導出木)の個数を求めよ。

この問題で使うもの

この問題を解けるようになるまで(3 技能)
算数中学高校大学大学院

読み込み中…

右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。

一覧で見る(前提が先)
  1. 文脈自由文法の導出と導出木
  2. CYK 法
  3. 導出木の個数の数え上げ

ヒント

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

ヒント 1

から導出できる文字列がどんな形かを考え、部分文字列 ごとに構文木の個数を数えよう(CYK 法の表を、真偽ではなく個数で埋めるイメージ)。

ヒント 2

に対する構文木の個数を とすると、根で使う規則が か かで場合分けでき、 が成り立つ。 と、 または のときの値に注意しよう。

ヒント 3

, , , となる。ここから を計算しよう。

答えと解説

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

部分文字列ごとに数える(CYK 法の考え方)  から導出できる文字列を調べる。 はそれぞれ だけを導出する。 は を、 は「 + から導出できる文字列」を、 は「 から導出できる文字列 + 」を作るので、 から導出できる文字列は ()の形に限られる。

そこで を「 に対する、根が の構文木の個数」とする( または のときは )。 を根で 2 つに分ける方法を規則ごとに見ると、
- :左が で 、右が で なので、 のときだけ使え、1 通り。
- :左の が先頭の を導出し、右の が を導出する。 通り。
- :右の が末尾の を導出し、左の が を導出する。 通り。

異なる規則や異なる分け方からは異なる構文木ができるので

となる。

表を埋める

例えば 、、、 である。

(CYK 表で見ると、 の部分文字列のうち を含むのは ()の形のものだけで、その各マスについて「分け方ごとの構文木の数の積の和」を求めたものが上の表になっている。)

よって の構文木の個数は である。

(別の見方:根から下へ、 で を 1 個、 で を 1 個ずつはがし、最後に で終わる。 を 2 回、 を 2 回はがす順番の数なので となり、一致する。)

別解

から導出できる文字列は ()の形だけである。 を から への構文木の個数とする。、 は一意なので、根の規則で場合分けする。

  • :、すなわち のときだけ使え、1 通り。
  • :先頭の が 、残りが から導出される。 のとき 通り。
  • :末尾の が 、残りが から導出される。 のとき 通り。

よって 、それ以外は 。これは から へ右・上に進む格子経路の数で、。

表で確認する(行 、列 ):
、
、
。

検算:。 などの小さい場合 ( 型と 型、 の 2 通り)とも整合する。よって答えは 6。

この問題の確認

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

間違いを報告する

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

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

関連する問題