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

導出木の個数の数え上げ

CYK 法の表の各欄に「非終端記号 が を生成する導出木の個数」を記録し、 と分割位置 について を足し合わせて、 の導出木の個数を求められる

前提

この技能までの道筋(2 技能)
算数中学高校大学大学院

読み込み中…

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

一覧で見る(前提が先)
  1. 文脈自由文法の導出と導出木 (大学数学 オートマトン・形式言語)
  2. CYK 法 (大学数学 オートマトン・形式言語)

説明

CYK 法では、表の各欄に「 を生成できる非終端記号の集合」を書きました。ここでは各欄に数 を書きます。これは「非終端記号 を根とし、 を生成する導出木の個数」です。こうすると、文字列 の導出木の個数、つまり の構文解析の仕方が何通りあるかが求まります。文法があいまいかどうかを具体的な文字列で確かめたり、構文解析の候補を数えたりするときに使います。

なぜそうしてよいのか

文法はチョムスキー標準形とします。規則は ( は非終端記号)か ( は終端記号)の形です。長さ の文字列を とし、 と書きます。 の長さは です。長さ 1 の部分文字列 を から生成する導出木は、規則 を 1 回使う木しかありません。したがって、その規則があれば 、なければ です。

長さ 2 以上の ()を から生成する導出木を 1 つ取ります。
- 根で使う規則は の形の 1 つに決まります。
- 左の部分木は を根として を、右の部分木は を根として を生成します。よって分割位置 ()も 1 つに決まります。

逆に、規則 と を固定すると、左の部分木は 通り、右の部分木は 通りあります。両者は互いに無関係に選べるので、その組に対応する木は積 個です(積の法則)。規則と の組が異なれば、根の規則か左右の境目が異なるので、木も異なります。そのため組ごとの個数をすべて足せば、重複なく数えられます(和の法則)。

右辺に現れるのは と の値だけです。 なので、どちらの長さも 以上 以下です。つまり (長さ )より短い部分文字列の値しか現れません。そのため CYK 法と同じく、短い部分文字列から順に埋めれば必ず計算できます。また、標準形には のような規則がありません。そのため導出木の大きさは文字列の長さで決まり、個数は有限になります。

手順

  1. 長さ 1 の欄を埋める:各 と各非終端記号 について、規則 があれば 、なければ とする。

  2. 長さ の順に、各区間 ()を処理する。

  3. 各 について、規則 と分割位置 のすべての組を挙げ、各組の積 を求める。

  4. それらの積をすべて足して とする:。

  5. 全体の欄の開始記号の値 が の導出木の個数である。 なら は生成されない。

例題

開始記号を とする文法 (チョムスキー標準形)について、文字列 の導出木の個数を求めよ。

例題の解答

非終端記号は だけなので、 を単に と書きます。 です。

【手順 1】規則 があり、どの も です。よって 。

【手順 2〜4】長さ 2 では、規則は だけで、分割位置は の 1 つだけです。
-
- 同様に 、

長さ 3 では の 2 通りがあります。
-
-

長さ 4 では の 3 通りがあります。
。

【手順 5】全体の欄の開始記号の値は なので、導出木は 5 個あります。これは、4 個の に括弧を付けて 2 つずつまとめる次の 5 通りに対応しています:, , , , 。

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題