クラフトの不等式のソースを表示
←
クラフトの不等式
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
{{出典の明記|date=2022年11月}} '''クラフトの不等式'''(クラフトのふとうしき、{{lang-en-short|Kraft's inequality}})は、[[符号理論]]における不等式の1つで[[可変長符号]]が一意復号可能である為の必要条件を与える。等号成立条件は符号が完全である事である。クラフトの不等式は可変長符号が一意復号可能である為の十分条件ではないが、クラフトの不等式を満たす任意のパラメータに対し、そのパラメータを実現する一意復号可能な可変長符号の存在性が保証される。 [[計算機科学]]や[[情報理論]]で利用される[[接頭符号]]や[[トライ木]]で応用されている。 元々のクラフトの結果は接頭符号に対してのものだった。後にマクミランは任意の一意復号可能符号でも同様の不等式が成立することを示した。このため'''クラフト・マクミランの不等式'''とも呼ばれる。 <!--より具体的には、クラフトの不等式は接頭符号を構築する際の符号語長セットに制限を与える。すなわち、符号語長の累乗が[[確率質量関数]]に相当することを示している。クラフトの不等式は、制限のある予算を符号語に費やすと考えたとき、短い符号語の方が高くつくことを示している。--> == 記号と用語 == クラフトの不等式について述べる為に、まず記号と用語を導入する。 集合Sに対し、Sの元を有限個並べてできる文字列全体の集合<math>\coprod_{i=1}^\infty S^i</math>を<math>S^*</math>と書く。 <math>S=\{\,s_1,s_2,\ldots,s_n\,\}\,</math>及び<math>T=\{\,t_1,t_2,\ldots,t_r\,\}\,</math>を二組の[[アルファベット (計算機科学)|アルファベット]]とする。 本稿では、「符号」や「符号化関数」といった言葉は、1文字ずつ符号化する符号だけに用いるものとする。すなわち我々は符号化関数<math>\phi : S^* \to T^*</math>で以下の性質を満たすもののみを考える: * S上の任意の文字列<math>s_{i_1}s_{i_2}\ldots s_{i_m}</math>に対し、 {{Indent|<math>\phi(s_{i_1}s_{i_2}\ldots s_{i_m})=\phi(s_{i_1})\phi(s_{i_2})\ldots \phi(s_{i_m})</math>}} φが単射であるとき、φは'''一意に復号可能'''であるという。 == 定理の形式的記述 == <math>\phi : S^* \to T^*</math>を符号化関数とし、<math>\phi(s_i)\in T^*</math>の文字数を<math>\ell_i</math>とする。 このとき、φが一意に復号可能なら、 {{Indent|<math>\sum_{i=1}^n r^{-\ell_i} \leq 1</math>}} が成立する。この不等式を'''クラフトの不等式'''と呼ぶ。 (なおクラフトの不等式において等号が成立する必要十分条件は、φが完全な符号である事である。) 逆に自然数<math>\ell_1,\ell_2,\ldots,\ell_n\,</math>がクラフトの不等式を満たすなら、ある一意に復号可能な符号化関数<math>\phi : S^* \mapsto T^*</math>が存在し、任意のiに対し<math>\phi(s_i)\in T^*</math>の文字数が<math>\ell_i</math>となる。 == 接頭符号の場合の証明 == 一意に復号可能な[[符号]]の典型的な特殊例として[[接頭符号]]がある。上述の定理を接頭符号の場合に対して証明する。 よく知られているように、接頭符号は次のような<math>r</math>-分木で表す事ができる:各頂点には <math>r</math> 個のアルファベットのうち1つが割り振られ、各符号語は根から葉までの経路で表される。 この木の各頂点に以下のルールで0以上1以下のラベルを再帰的に割り振る: * 根には1を割り振る。 * 頂点iにxが割り振られているとき、iの各々の子にx/rを割り振る。 各頂点はr個以下の子しか持たないので、頂点iの子に割り振られたラベルの総和は頂点iに割り振られたラベル以下である。この事実を葉から根に向かって再帰的に適応する事で次の事実が分かる: * 葉に割り振られたラベルの総和は根に割り振られたラベル(=1)以下である。 前述したように、各符号語は根から葉までの経路に対応している。今グラフは木であるから、根から葉までの経路は、経路の終点である葉と一対一対応している。従って各符号語は木の葉と自然に対応付けられる。 ラベルの定義より、深さ<math>\ell_i</math>の頂点のラベルは<math>1/r^{\ell_i}</math>である。木の作り方より符号語の長さは葉の深さに一致しているので、長さ<math>\ell_i</math>の符号語に対応する葉のラベルは<math>1/r^{\ell_i}</math>である。 以上の議論より、符号語に対応する葉のラベルの総和<math>\sum_{i=1}^n r^{-\ell_i}</math>は根に割り振られたラベル(=1)以下である。よってクラフトの不等式が示せた。 また以上の議論から分かるように、頂点が丁度r個の子を持てば、その頂点の子に割り振られたラベルの総和は頂点iに割り振られたラベルに一致する。従って木が完全であるとき、葉に割り振られたラベルの総和は根に割り振られたラベル(=1)に一致する。 木の作り方より、木が完全である必要十分条件は、符号が完全である事である。よってクラフトの不等式の等号成立条件は符号が完全である事である。 最後に定理の逆を示す。今自然数<math>\ell_1,\ell_2,\ldots,\ell_n\,</math>がクラフトの不等式を満たすとする。必要なら<math>\ell_{n+1},\ell_{n+2},\ldots</math>を付け加える事で、等号<math>\sum_{i=1}^n r^{-\ell_i}=1</math>が成立していると仮定しても一般性を失わない。総和が1であるので、<math>r^{-\ell_i}</math>をなんらかの確率と解釈する事ができる。定理の逆は、i番目の符号語が生起する確率が<math>r^{-\ell_i}</math>であるとしたときの[[ハフマン符号]]を作る事で証明できる。 == 一般の場合の証明 == 接頭符号とは限らない一般の符号に対してクラフトの不等式を示す。なお、定理の逆は、既に接頭符号が構成できる事を示しているので、証明の必要がない。 さて、<math>\phi : S^* \to T^*</math>を符号化関数とし、以下の[[母関数]]を考える: {{Indent|<math>F(X) = \sum_{i=1}^n X^{-|\phi(s_i)|}</math>}} ただしここで、<math>|\phi(s_i)|</math>は<math>\phi(s_i)</math>のビット数を表す。 ''m'' を任意の自然数とするとき、 <math> \begin{alignat}{2} \left( F(X) \right)^m &= \left( \sum_{i=1}^n X^{-|\phi(s_i)|} \right)^m = \sum_{i_1=1}^n \sum_{i_2=1}^n \cdots \sum_{i_m=1}^n X^{-\left(|\phi(s_{i_1})| + |\phi(s_{i_2})| + \cdots + |\phi(s_{i_m})|\right)}\\ &= \sum_{i_1=1}^n \sum_{i_2=1}^n \cdots \sum_{i_m=1}^n X^{-|\phi(s_{i_1}\cdots s_{i_2}s_{i_m})|} \end{alignat} </math>が成立する。 右辺を次数毎にまとめたものを <math>\left( F(X) \right)^m = \sum_{\ell} q_\ell \, X^{-\ell}</math> と書くと、φの単射性より、<math>q_\ell</math>は長さ<math>\ell</math>の符号語の数に等しい。長さ<math>\ell</math>の語は<math>r^\ell</math>個しかないので、 {{Indent|<math>q_\ell \le r^\ell</math>}}が成立する。 さて、<math>\phi(s_1), \ldots, \phi(s_n)</math>の中で最も短い語の長さをmin、最も長い語の長さをmaxとする。すると <math>F(X)</math> の定義より、多項式<math>\left( F(X) \right)^m = \sum_{\ell} q_\ell \, X^{-\ell}</math>の最低次の項の次数はm minであり、最高次の項の次数はm maxである。 以上の議論より、 {{Indent|<math> \left( F(r) \right)^m = \sum_{\ell} q_\ell \, r^{-\ell} \le \sum_{\ell} r^{\ell} \, r^{-\ell} = \sum_{\ell} 1 \le m(max-min +1) </math>}} が成立する。 mは任意だったので上の不等式は任意のmに対して成立する。mを無限大に飛ばしたとき、左辺は指数関数的に変化するのに対し、右辺は線形にしか増加しない。従って任意のmに対して上の不等式が成立する事から {{Indent|<math> F(r) \le 1 </math>}} が成立する。 <math>\ell_i=|\phi(s_i)|</math> とすれば、 <math>F(X)</math>の定義より、 {{Indent|<math> 1 \ge F(r) = \sum_{i=1}^n r^{-\ell_i}</math>}} が成立する。すなわち、クラフトの不等式が証明された。 == 例 == === 二分木 === [[ファイル:AVLtreef.svg|thumb|9, 14, 19, 67, 76 は葉ノードで、その深さはそれぞれ 3, 3, 3, 3, 2 である]] [[二分木]]について、クラフトの不等式を適用すると、次が成り立つ。 {{Indent|<math> \sum_{\ell \in \mathrm{leaves}} 2^{-\mathrm{depth}(\ell)} \leq 1 </math>}} これは、木の葉ノードに関する総和である。深さとは、根からの距離を意味する。右図の木で言えば、この総和は次のようになる。 {{Indent|<math> \frac{1}{4} + 4 \left( \frac{1}{8} \right) = \frac{3}{4} \leq 1 </math>}} === チャイティンの定数 === [[アルゴリズム的情報理論]]において、[[チャイティンの定数]]は次のように定義される。 {{Indent|<math>\Omega = \sum_{p \in P} 2^{-|p|}</math>}} これは、文法的に正しく停止する全てのプログラム毎にある被加数の[[総和]]である。|''p''| は ''p'' のビット列の長さを表す。プログラムは他のプログラムの接頭部とはならない。つまり、ある被加数は別の文法的に妥当で停止するプログラムを表す被加数の接頭部にはならない。従って、このビット列群は接頭符号であり、クラフトの不等式から <math>\Omega \leq 1</math> が成り立つ。 == 外部リンク == * [http://www.nist.gov/dads/HTML/kraftsinqlty.html Kraft's inequality (NIST)] {{デフォルトソート:くらふとのふとうしき}} [[Category:符号理論]] [[Category:不等式]] [[Category:数学に関する記事]] [[Category:数学のエポニム]]
このページで使用されているテンプレート:
テンプレート:Indent
(
ソースを閲覧
)
テンプレート:Lang-en-short
(
ソースを閲覧
)
テンプレート:出典の明記
(
ソースを閲覧
)
クラフトの不等式
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報