【雑記】優れた関数とは Part1
全ての動作は関数である。おもむろにこう書きだしてみよう。
時間ベースで考えれば、同じ解を返す関数なら素早いほうが優れた関数であると言える。
ここでは純粋に入力と出力のみにフォーカスをあてることとしよう。
では次に示す二つの関数はどちらが優れているだろうか?
答えは"比べられない"です。全てにおいて万能な関数などありません。
ではデータの可逆圧縮について、と前提条件を与えることにする。
するとほとんどの人間はAと答えるだろう。でも本当にそうだろうか?
全てのデータを変換したときどのようなデータ長になるかグラフを用意した。
グラフの縦軸は変換後のデータ長、横軸は無限にあるデータ。
(データは無限にあり、そもそも直線状に並べられるものではありませんが、ここでは一次元に射影したものとしてみてください。)
と見ると、
A関数は特徴的なごく一部なデータは圧縮されるが、その他の大多数はデータ長が増えるのである。
B関数は全てのデータにおいてデータ長は増減しないのである。
それらを全て足し合わせるとA関数もB関数も圧縮性能は全く同じなのである。
わかりやすく説明しよう。
つまり全てのデータが圧縮できるように自分より小さなデータの器を手に入れると、はじき出されるデータが必ず存在するのである。
少し長くなったのでページを分けます。次ページも読んでね。