ランレングスのデータ構造がわかりません

投稿者: Anonymous

WWWBBをW3B2にすると圧縮できる、というのは理解できました。しかし、11111000ならどうでしょうか?

1503と圧縮してしまうと展開時に1503と展開も出来てしまいます。

そこで1:5 0:3のように [繰り返す文字:繰り返し回数] と言うフォーマットをとれば正しく展開できます。

ただ、ここでいうコロンとスペースをバイナリでうまく表現ができません。ランレングスは一体どのようにして”圧縮”しているのでしょうか?

解決

Run Lengthのフォーマットに決まりはないので圧縮後にどのようなデータ構造にするかは用途によります。データにアルファベットしか出現しないことが分かっているのであればWWWBBW3B2と圧縮しても問題ないわけです。

任意のバイト列を表現したいなら、単純に繰り返すバイトと繰り返し回数を連続させるだけでもOKです。

例えば11111000(0x31 0x31 0x31 0x31 0x31 0x30 0x30 0x30) なら0x31 0x05 0x30 0x03のように圧縮できます。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *