5 個の情報源記号 に、符号アルファベット の 2 元語頭符号(瞬時符号)を割り当てる。各符号語の長さを
とするとき、このような 2 元語頭符号が存在するような正の整数 のうち、最小のものを求めよ。
語頭符号とクラフトの不等式
符号長 の 元語頭符号(瞬時符号)が存在するかを、クラフトの不等式 で判定でき、存在するときは符号語を 1 組作れる
前提
- 指数の拡張と指数関数 (数学II 指数関数と対数関数)
この技能までの道筋(11 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 分数のたし算・ひき算 (算数 計算と数のきまり)
- 小数の四則計算 (算数 計算と数のきまり)
- 正負の数の加法・減法 (中学数学 数と式)
- 分数のかけ算・わり算 (算数 計算と数のきまり)
- 四則の混じった計算の順序 (算数 計算と数のきまり)
- 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
- 約数の見つけ方 (算数 整数の性質)
- 素因数分解と約数の個数 (算数 整数の性質)
- 平方根の意味と根号の簡単化 (中学数学 数と式)
- 根号の乗除と加減 (中学数学 数と式)
- 指数の拡張と指数関数 (数学II 指数関数と対数関数)
説明
語頭符号(瞬時符号)とは、どの符号語も他の符号語の先頭部分(語頭)になっていない符号のことです。この性質があれば、受け取った記号列を先頭から読み、符号語に一致した時点ですぐに区切って解読できます。この技能では、符号長 を指定したときに、 種類の記号 で作る語頭符号が存在するかを、クラフトの不等式 で判定します。存在する場合は、符号語を実際に 1 組作ります。データ圧縮で記号ごとの符号長を設計するときの基本になる考え方です。
なぜそうしてよいのか
長さ の符号語 (各 は の整数)に、数 を対応させます。これを 進小数 と呼びます。 は 以上 以下の整数で、この整数を 進法で 桁に書いた並びがちょうど です。さらに と定め、これを の区間と呼びます。 の長さは です。この議論は 進展開の一意性を使わず、数の不等式だけで進めます。
要になるのは次の評価です。各桁が 以下なので、 が成り立ちます。
- (ア) が の語頭のとき( の長さ )、 です。よって かつ となり、 です。
- (イ) (長さ )と (長さ )のどちらも他方の語頭でないとき、両方に共通する長さの範囲内に、初めて食い違う桁 があります。 としてよく、共通部分を とおきます。上の評価から となります。つまり は より完全に左にあり、両者は重なりません。
- (ウ) として評価を使うと となるので、どの区間も に収まります。
必要性:語頭符号なら、(イ) より区間どうしは重なりません。左端の小さい順に並べると、各区間は前の区間の右端以降から始まります。 の中に重ならずに並ぶので、長さの合計は 1 以下、すなわち です。
十分性: とし、長さを と並べて ()とおきます。 は、 なので整数です。また より なので、 は 進法でちょうど 桁に書けます(頭に 0 を補う)。その並びを とすると で、区間 は隙間なく順に並び、互いに重なりません。もし が の語頭なら、(ア) より となって重なってしまうので、これは起こりません。よって語頭符号になります。
手順
クラフト和 を計算する。
なら語頭符号は存在し、 なら存在しないと判定する(等号 の場合も存在する)。
符号語を作るときは、符号長を小さい順 に並べ替える。
累積和 ()を求め、整数 を計算する。 で順に求めてもよい。
を で割り、余りを書き留めて商をまた で割る、ということを商が 0 になるまで繰り返す。余りを逆順に並べたものが 進表記である。
の 進表記がちょうど 桁になるよう、桁が足りなければ頭に 0 を補う。その 桁の並びを 番目の符号語とする。
例題
3 元(記号 )の語頭符号で、符号長が の 7 個の符号語をもつものを作りたい。そのような語頭符号が存在する最小の正の整数 を求めよ。
例題の解答
【手順 1】 以外の 6 個のクラフト和を計算します。 なので、全体は です。
【手順 2】存在の条件は 、すなわち です。
- のとき: なので不成立で、存在しません。
- のとき: なので成立し、存在します。
よって最小の は です。
確認として、 で実際に符号を作ります。
【手順 3】長さを並べ替えると です。
【手順 4〜6】 から を求め、3 進法で 桁に書きます。
- : を 1 桁にして 。
- :。 余り 、 余り なので 。
- : で 。
- : で 。
- : で 。
- :。 余り 、 余り 、 余り なので 。
- :。 余り 、 余り 、 余り なので 。
得られた符号 は、どの語も他の語の語頭になっていないので、確かに語頭符号です。
答え:
よくある誤り
指数の符号を逆にして を調べてしまう誤り。長さ の符号語の区間の長さは で、長い符号語ほど小さくなる。正しくは を調べる。
不等式を満たせば、与えられた符号そのものが語頭符号だと思ってしまう誤り。例えば は を満たすが、 が の語頭なので語頭符号ではない。不等式が保証するのは、その符号長をもつ語頭符号が少なくとも 1 つ存在することだけである。
長さを並べ替えずに累積和で割り当ててしまう誤り。例えば 2 元で長さ の順に処理すると、1 個目は になる。2 個目は で、 が整数にならない。無理に切り捨てて とすると、 が の語頭になってしまう。正しくは長さを と小さい順に並べ、 から とする。
桁数を合わせるための 0 を末尾に付けてしまう誤り。例えば 2 元で 、 のとき、 とするのは誤り。 である。正しくは頭に 0 を補って とする。このとき となる。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
符号アルファベットを とする 3 元符号を考える。符号長 の符号語が 個、符号長 の符号語が 個、符号長 の符号語が 個からなる語頭符号(瞬時符号)が存在するような正の整数 の最大値を求めよ。
記号 を使う 2 元符号を考える。長さ の符号語が 個、長さ の符号語が 個、長さ の符号語が 個からなる語頭符号(瞬時符号)を作りたい。ただし、どの 2 つの符号語も互いに異なるものとする。このような語頭符号が存在する 0 以上の整数 のうち、最大のものを求めよ。
この技能を使う問題
情報源記号 を、それぞれ確率
で独立に出力する無記憶情報源がある。各記号に、符号アルファベット の語を 対 に割り当てる 元の語頭符号(どの符号語もほかの符号語の語頭にならない符号)を考える。元の語頭符号のうち、 記号あたりの平均符号長 ( は の符号語の長さ)が最小になるものについて、その平均符号長 を求めよ。
情報源記号 を、それぞれ確率
で発生する記憶のない情報源がある。各情報源記号に、符号アルファベット の記号列(空でないもの)からなる符号語を つずつ割り当て、どの符号語もほかの符号語の接頭語にならないようにする( 元の瞬時符号)。このような符号のうち、情報源記号 個あたりの平均符号長 ( は の符号語の長さ)の最小値を求めよ。
を整数とし、情報源記号 がそれぞれ確率 で現れるとする。ただし , とする。
各 に 上の語 を割り当て、 ならば が の接頭語( の先頭部分。 自身も含む)でないものを 2 元の語頭符号とよぶ。 の長さを ( 以上の整数)とし、平均符号長を とする。
2 元の語頭符号のうち平均符号長が最小のもの(最適符号)の 1 つを とし、 の符号長を 、その最大値を とする。このとき、 において長さが の符号語の個数は偶数である(特に 以上である)ことを証明せよ。
なお、次のクラフトの不等式とその逆は用いてよい: 以上の整数 に対し、符号長が の 2 元の語頭符号が存在するための必要十分条件は である。
この技能の次に学べること
- ハフマン符号 (大学数学 情報理論・符号理論)