解決済みの質問
データを圧縮、解凍と良く使いますが
実際どうして圧縮できるのですか?
くわしい内容はいりません
理屈程度で良いです
例えば水(H2O)を圧縮すると
質量は変わらず体積が小さくなる=密度が濃くなる
(分子と分子の間隔が小さくなる)
ですが
画像データを圧縮だと(自分の知識の範囲での想像)
100万画素の1枚の写真があったとして1画素1ビットと仮にするとこれは100万ビット(これら便宜上の数値とします)になります(=これを換算すると0.25MBですね)
100万ビットには同じ色(データ)がいくつも存在するから同じ色同士をサブルーチン化して区分けして
プログラムを運用している
高圧縮になるほど1枚あたりの写真はサブルーチンの個数が少なくなる
こんな理屈で当たっているでしょうか?
どうでも良いことなのですが
いつもこんなことばかり考えています
プロの方よろしくお願いします
投稿日時 - 2005-03-04 09:56:29
一番主な理屈はデータの並びを一定の規則で変換するというものだ。これを「圧縮アルゴリズム」という。
最も簡単な圧縮アルゴリズムは「ランレングス法」というもので、例えば次のようになる。
元のデータ:111111222223452223333331111111
↓
圧縮データ:1625314151233617
このように連続した同一データの、実データと個数に変換する事で、30バイトのデータが16バイトに変換される。ここで、途中で345というデータがある時に314151と逆にデータ量が増えている事にも気づくだろう。このように、圧縮アルゴリズムと実データの組み合わせによっては、うまくいかない事もある。lzhやzip、cabにrarなど、方法によって大きさが変わるのもこの理由からだ。
圧縮アルゴリズムの基礎アルゴリズム(圧縮のデータ分析の基本となるもの)には、他に以下のようなものがあるのでキーワードのみ合わせて紹介しておこう。
「ハフマン法」、「ワイル法」、「シャノン・ファノ法」、「ブロックソーティング法」、「ムーブフロント法」
投稿日時 - 2005-03-04 10:36:01
お礼
ありがとうございます
求めていた回答に近いので理解できました
要するにある決められた規則で省略をするのですね
ソフト屋ではないので詳しいことは判りませんが
ベーシックとかは長々とプログラムは作らず関連性のあるところはサブルーチンで括って簡略化しているようなのでもしかしたらそうなのだろう的に思ってました
投稿日時 - 2005-03-04 11:04:11
1人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(1件中 1~1件目)
プロでは無いですが、ごく簡単な理屈だけ書こうと思います。
その前に、物理的な例を挙げていらっしゃいますが、データ圧縮はどちらかいうと数学的な発想ですね。
最もシンプルな手法は「…7B 00 00 00 00 00 CF…」→「…7B 05 00 CF…」といった風に同じデータの連続を連続の長さに置き換えるrun length法です。画像形式で言えばGIFが利用しています。
次によく使われるのは、ある程度長いデータのパターンが少し後になってもう一回出てきた時に、「何bit前から何bit分」といった形で表現して圧縮する辞書圧縮法です。LHAやZIPなどのアーカイバで使われます。
上記二手法と併用されるのが、「よく出てくるパターンほど短いビットで表現する」手法です。LHAやZIPではHuffman符号が用いられます。
と、ここまではいわゆる可逆圧縮法ですが、JPEGではフーリエ変換などを用いて不可逆圧縮が行われます。
参考URL:http://www.ann.hi-ho.ne.jp/jiro/assyuku2.htm
投稿日時 - 2005-03-04 10:20:45
お礼
早速ありがとうございます
当たり前に間違って当然ですが
自分の考えてる方法と違っていたのには
ほんのちょっとガッカリというか
例えるならクイズで『えっ違うの?』ですね
なんかスッキリしたというか
曇りが取れたような感じです
投稿日時 - 2005-03-04 10:53:38