オートマトン・形式言語の問題
アルファベット 上の正規表現
を考え、 が表す言語を とする( は和集合、 はクリーネ閉包を表す)。
長さ の文字列 のうち、次の 2 つの条件をともに満たすものの個数を求めよ。
- に含まれる の個数が偶数である( 個も偶数とみなす)
この問題で使うもの
- 正規言語に属する長さ n の文字列の数え上げ(説明と入口の問題)
- 和の法則・積の法則と樹形図(説明と入口の問題)
この問題を解けるようになるまで(7 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
の文字列はブロック の並びであり、どのブロックも で始まる。ブロックへの分け方が一意になることに注目しよう。
ヒント 2
ブロックが 個で全体の長さが のとき、 の個数は になる。 の個数が偶数という条件をブロック数の条件に言い換えよう。
ヒント 3
ブロック数 が の場合について、長さ のブロックで合計 にする並べ方を数える。各ブロックの長さを ()とおくと重複組合せで数えられる。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
の文字列の分解の一意性 の文字列は、ブロック をいくつか並べたものである。どのブロックも で始まり、ブロックの中で は先頭の 1 個だけなので、空でない では「各 の位置からブロックが始まる」と決まり、ブロックへの分け方はただ 1 通りである。したがって の長さ の文字列は、「長さが のいずれかであるブロックを並べて合計の長さを にする並べ方」と 1 対 1 に対応する。つまり、 を のいずれかの正の整数の順序付きの和に分ける方法(合成)の数を数えればよい。
の個数とブロック数の関係 長さ のブロックは を 個含む。ブロックが 個のとき、 の個数は
である。よって の個数が偶数 が偶数 が偶数。
ブロック数 ごとの数え上げ 各ブロックの長さを ()とおくと、 を満たす 以上の整数の組 (各 )の個数を数えればよい。 が必要()である。偶数の は 。
- : より 通り
- : 。合計が なので は自動的に満たされ、重複組合せで 通り
- : 。制限なしでは 通り。このうちある となるものは、 とおくと で 通り、 の選び方が 通りで計 通り(2 つ同時に 以上にはなれない)。よって 通り
したがって求める個数は
(確認: 奇数の も数えると で 通り、 で 通り、 で 通りとなり、合計 。これは の長さ の文字列の個数 の漸化式 ()から得られる と一致する。)
別解
は の連接でできる文字列全体。どのブロックも で始まり、その後ろの は 0〜2 個なので、文字列を の位置で区切れば分解は一意に決まる。したがって長さ 8 の の元は、8 を 1, 2, 3 の和(順序つき)で表す方法(合成)と 1 対 1 に対応する(ブロックの長さ 1, 2, 3 がそれぞれ , , に対応)。
ブロックの個数を とすると の個数は 、 の個数は 。 の個数が偶数 が偶数。
長さ 8 でブロック数 の合成の個数は の の係数、すなわち の の係数:
- : 最大でも長さ 6 なので 0
- : の の係数は 19
- : の の係数は
- : 1()
合計 。
検算: 奇数 の側は : 3、: 30、: 7 で計 40。合計 は、1, 2, 3 を使った 8 の合成の総数(トリボナッチ型の漸化式 , )と一致する。
答え: 41