【雑記】優れた関数とは Part1

全ての動作は関数である。おもむろにこう書きだしてみよう。

 

時間ベースで考えれば、同じ解を返す関数なら素早いほうが優れた関数であると言える。

 

ここでは純粋に入力と出力のみにフォーカスをあてることとしよう。

 

では次に示す二つの関数はどちらが優れているだろうか?

f:id:mkdyuzuki:20160616233005p:plain

 

答えは"比べられない"です。全てにおいて万能な関数などありません。

 

ではデータの可逆圧縮について、と前提条件を与えることにする。

するとほとんどの人間はAと答えるだろう。でも本当にそうだろうか?

全てのデータを変換したときどのようなデータ長になるかグラフを用意した。f:id:mkdyuzuki:20160616233202p:plain

グラフの縦軸は変換後のデータ長、横軸は無限にあるデータ。

(データは無限にあり、そもそも直線状に並べられるものではありませんが、ここでは一次元に射影したものとしてみてください。)

 

と見ると、

A関数は特徴的なごく一部なデータは圧縮されるが、その他の大多数はデータ長が増えるのである。

B関数は全てのデータにおいてデータ長は増減しないのである。

 

それらを全て足し合わせるとA関数もB関数も圧縮性能は全く同じなのである。

 

わかりやすく説明しよう。

 

 

f:id:mkdyuzuki:20160616235129p:plain

 

つまり全てのデータが圧縮できるように自分より小さなデータの器を手に入れると、はじき出されるデータが必ず存在するのである。

 

少し長くなったのでページを分けます。次ページも読んでね。

 

mikadoyuzuki.hatenablog.jp