投稿
ヨッシー okkun2002
文字列の圧縮をしようと思っています。 文字を数字にしてひとつ隣の文字の数字と足し算して文字に戻そうと思います ですが、その場合、解凍ができません。どうしたらいいですか?
4そうだね
プレイ済み
返信[1]
親投稿
ASA fusuian
それではやはり解凍はできません。 圧縮の方法(アルゴリズム)は何種類かあって、何を圧縮するかで効率のいい方法は変わってきます。 圧縮したいデータはなんですか?
0そうだね
プレイ済み
返信[2]
親投稿
ゆうたん yu-tan-sama
その考え方ではダメです 1+1は2ですが、2は1+1の計算結果とは限りませんし、元に戻せません 一般的な圧縮法としてはランレングス符号化とかハフマン符号化なんてものが利用されてます ランレングスってのはわりと簡単な考え方で "AAAAABBB"を"A5B3"と表現する感じです
0そうだね
プレイ済み
返信[3]
親投稿
ASA fusuian
何か、というのは文章か、絵か、音声か、プログラムかというようなことです。絵でも、アニメ絵と写真でやり方が変わってきます。
0そうだね
プレイ済み
返信[4]
親投稿
文字列との事ですので、恐らくメッセージ的なデータか、mapデータを数値文字列にした物かと思いますが・・。 文字メッセージの圧縮・解凍はまず不可能ですし、出来たとしてもメリットは薄いでしょう。mapデータのような同じ数値や配置が連続するパターンでしたら、十分可能です。 その際には、上記お二方がコメントされているような準備が必要ですね。
0そうだね
プレイ済み
返信[5]
親投稿
あきと SideBurnsM
まずは"aaabbbbc"という文字列を"a3b4c1"に圧縮する「ランレングス」という方法に着手してみるのがよいのではないでしょうか。 見た通り同じ文字が続いたらその数字を書くという方法です。
0そうだね
プレイ済み
返信[6]
親投稿
けい kei0baisoku
あ、数値への圧縮なら足し算でなくビット演算を利用して、ひとつの数値の中に2つ分の文字を保存するのもありかもしれませんね。メモリサイズは変わらないかもしれませんが……… ビット演算を理解すれば作るのは簡単なので、これを機に覚えてみるのもオススメです。
0そうだね
プレイ済み
返信[7]
親投稿
情報が失われてるから戻るはずがない。 上で2という数字の話が出てるけど、 「2が答えになる足し算をしてください。」って言われたら1+1、0+2、2+0のどれを答えても正解になるよね。
0そうだね
プレイ済み
返信[8]
親投稿
ちなみに、頑張れば普通の文章(「こんにちは。今日は晴天なり。」とか)の圧縮も作れます。ただし長さを半分以下にするのは難しい。
0そうだね
プレイ済み