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

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

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

終端記号 、非終端記号 、開始記号 をもち、次の 3 つの生成規則からなる文脈自由文法 を考える。

文字列

(長さ )について、 における の導出木(構文木)の個数を求めよ。

この問題で使うもの

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

読み込み中…

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

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

ヒント

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

ヒント 1

を開き括弧、 を閉じ括弧と見ると、 は対応のとれた括弧列を生成する文法である。 を「これ以上切れないまとまり」に分けてみよう。

ヒント 2

個のまとまりの並びを で作る方法は、葉が 個の全二分木の個数であるカタラン数 通りある。また、両端の が対応しているまとまりは でしか作れない。

ヒント 3

と分かれる。外側の分け方は 通りで、 の内側の についても同じように数えよう。

答えと解説

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

を開き括弧、 を閉じ括弧とみなすと、 が生成する言語 は「空でない、括弧の対応がとれた文字列」全体である。

準備: 分解できない文字列

の文字列 のうち、どの真の接頭辞(空でも 全体でもない接頭辞)も と の個数が等しくならないものを「素な文字列」とよぶ。

  • 素な文字列 に を最初に使うことはできない。 から ()と分けると、 は の個数が等しい真の接頭辞になってしまうからである。したがって の導出木の根では ( のとき)か が使われる。 は空文字列を生成しないので、 のときは だけが使え、 のときは だけが使える。
  • 素でない文字列は、 の個数が等しくなる位置で切ると、素な文字列の並び ()にただ 1 通りに分解される。このとき や は根に使えない(両端が の 1 組に対応しないため)ので、根からは を繰り返して 個の に分け、それぞれが を導出する。 による分け方の個数は、葉が 個の全二分木の個数、すなわちカタラン数 である。

の分解

を左から読み、( の個数) ( の個数) を記録すると

となり、 になる位置で区切ると

と 個の素な文字列に分かれる。よって、この 4 つへの による分け方は 通りである。

各部分の導出木

  • の導出木は の 通り。
  • は素なので、根は で、内側の が を導出する。 は 個の素な文字列に分かれ、それぞれの導出木は 通りなので、 の導出木は 通り。よって の導出木は 通り。

まとめ

導出木の個数は、外側の分け方と各部分の導出木の個数の積なので

である。

答え:

別解

で を 、 を とすると累積和は で、各接頭辞で 0 以上、最後に 0 となるのでダイク語(括弧列)である。0 に戻る位置は 8, 10, 12, 14 なので、既約な成分に分けると

の導出木の数を で表す。

(1) 既約成分 について: 規則 は既約語の導出の根には使えない(既約語を 2 つの空でない文字列に分けるとどちらもダイク語にならない)。よって根は ( が空のとき、)か ( が空でないとき、)。

(2) 既約成分が 個の語 ()について: 根は でなければならない。これは 個の成分を二分木状に括る方法に対応し、括り方は 番目のカタラン数 通り、各成分の導出木は独立なので

( のときは (1)。)

計算:
- 成分 : 。
- 成分 : 内側 は成分 3 個で各 、。よって 。
- 全体: 成分 4 個、、積は 。

検算: ( と )、 で、小さい例 、 とも整合する。

この問題の確認

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

間違いを報告する

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

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

関連する問題