単元一覧 › 大学数学 アルゴリズムと計算量

アルゴリズムと計算量の問題

難易度 3期末試験の応用レベル大学数学 アルゴリズムと計算量

種類の文字 からなる長さ の文字列があり、各文字の出現回数は次の表のとおりである。

文字ABCDEFGH
出現回数

各文字に、 種類の記号 からなる長さ 以上の符号語を つずつ割り当てる。ただし、異なる文字の符号語は異なり、どの符号語も他の符号語の先頭部分(接頭語)になっていない(語頭符号である)ものとする。文字列の各文字をその符号語に置きかえてつなげたとき、得られる記号列の長さ(記号の個数)の最小値を求めよ。

ヒント

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

ヒント 1

語頭符号を、各節点の子が高々 3 個の木の葉に文字を置いたものとみなし、ハフマン符号の貪欲法(小さいものから合併)を 3 分木に拡張して考えましょう。

ヒント 2

3 個ずつ合併すると個数は 2 ずつ減るので、最後に 1 個になるには葉の数が奇数でなければなりません。文字は 8 個なので、出現回数 0 のダミーを 1 個加えます。記号列の長さは合併で作った節点の重みの総和です。

ヒント 3

重み 0, 4, 6, 8, 10, 12, 15, 20, 25 から始めて、最初の合併は 0+4+6=10、次は 8+10+10=28 です。残りの合併を続けて、作った重みをすべて足しましょう。

答えと解説

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

語頭符号は、各節点が高々 個の子をもつ根付き木( 分木)の葉に文字を対応させたものと同じである。文字の深さがその符号語の長さなので、記号列の長さは であり、これは木の内部節点ごとに「その節点の下にある葉の出現回数の合計」を足し合わせたものに等しい。

ダミーの追加. 最適な木では、内部節点はすべて 個の子をもつとしてよい(空きの枠は最も深い所に寄せられる)。 個の子をもつ内部節点だけからなる木の葉の数は、内部節点が 個増えるごとに 増えるので奇数である。文字は 個(偶数)なので、出現回数 のダミー文字を 個加えて 個の葉にする。こうすると、 進のハフマン法(出現回数の小さい 個を合併することを繰り返す貪欲法)で最適な符号が得られる。

合併の手順. 初期の重み:

  • →
  • →
  • →
  • → 終了

合併で作られた節点の重みの和が記号列の長さなので

確認(深さから計算). 根の子は 、重み の節点、重み の節点である。重み の節点の子は 、重み の節点の子は と重み の節点、重み の節点の子は とダミーである。よって符号語の長さは が 、 が 、 が で

したがって最小値は である。

別解

3 元符号の最適語頭符号はハフマン法で求まる。3 元ハフマン法では葉の個数が奇数である必要があるので、出現回数 0 の架空の文字を 1 つ加えて 9 個にする。

重み: 25, 20, 15, 12, 10, 8, 6, 4, 0

1. 小さい 3 つ 0, 4, 6 を併合して 10 になる。
2. 8, 10, 10 を併合して 28 になる。
3. 12, 15, 20 を併合して 47 になる。
4. 25, 28, 47 を併合して 100 になる。

符号長の合計は、併合で作った節点の重みの和に等しい。

検算として深さから数える。A は深さ 1、C, D, B は深さ 2、F, E も深さ 2、G, H は深さ 3 である。

したがって最小値は 185 である。

この問題の確認

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

間違いを報告する

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

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

関連する問題