21805


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

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

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

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


CC BY-SA 3.0
2016-02-07T05:07:27.540
21803
2016-02-07T05:46:04.700
9371
question
アルゴリズム
ランレングスのデータ構造がわかりません


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

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

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


CC BY-SA 3.0
2016-02-07T05:39:54.050
21805
2016-02-07T05:46:04.700
2016-02-07T05:46:04.700
3639
3639
21803
answer