開発
データ圧縮の話
Shoma Saito
今まで圧縮について詳しく調べたことが無かったため紹介します。
と、いうのもiOSアプリやwebアプリなど、普通に開発していると暗号化やハッシュなどは使いますがあまり圧縮という分野を使ったことがないなと思ったのと、大学で情報圧縮という授業を受けたのがきっかけです。
情報圧縮とは
一般的にその情報量を保ったままデータ量を減らした全く別のデータにすることです。
また圧縮には二種類あり、完全に復元出来る可逆圧縮と、データの損失がある非可逆圧縮があります。
可逆圧縮
例として一般的なのがハフマン符号化や算術符号化などがあります。
同じ文法や単語がデータに多く含まれると圧縮率が高くなります。
非可逆圧縮
例としてJPEGやフラクタル圧縮などがあります。
データの損失があるため、画像や音響データなどに使われます。
特許問題
上に書いた圧縮方法の中には特許による制約で多額の金額を払わないと使えないものもあります。
また、実装するだけでもその制約に触れてしまうものもあるらしいので注意が必要です。
(大学の授業で使用する分には許可されているらしいので幸運でした。)
気になったこと
圧縮率が高いものは?
非可逆圧縮と情報量が減ってしまうため可逆圧縮で考えると、乱択アルゴリズムを用いた圧縮が一番いいらしい。
PPMと呼ばれている方法が主なもので、この改良版が7zなどで使われているらしい。
オープンソース化されているものは?
有名所だと7z、bzip2などがある。他にもフリーで使えるものもあるため調べてみると面白いかもしれない。
機械学習とか関係ある?
ある。密接に関係している。最適な圧縮方法の提示をすることも可能だし、そのまま圧縮に応用することも出来る。
まとめ
権利関係で自由に実装できる訳ではないので気軽に採用出来るものではないです。
ただ暗号技術と似ている分野のため、cryptやっている人はやってみてもいいかもしれないですね。
学ぶ際は詳しい人に聞くのが一番いいと思います。大学であれば授業を受けるのが一番いいです。