- 締切済み
文字列を数字のみにエンコードして圧縮したい
アルファベットの文字列を数字のみに変換してできる限り容量を圧縮したいです。 たとえばASCIIコードに変換して・・・でも数字のみに変換はできますが容量を極力減らしたいです。 何か既存のアルゴリズムで良い方法ないでしょうか? 対象はアルファベット小文字のみの26文字で す。 例えば (log 10^10)/log26=7.06なので 10文字分の数字で 7文字相当のアルファベットを埋め込めるのかな?と思います。 単純にa=0 b=1・・・と割り当てて行って 文字列を26進数表記にした物を10進数に変換すれば一応できそうですが よりよい方法とか効率的な方法があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- foomufoomu
- ベストアンサー率36% (1018/2761)
アルファベットを数字(0~9の文字)にしても、何の圧縮にもなりませんよ。文字の種類は減りますが全体の長さが増えてしまいます。 >たとえばASCIIコードに変換して 普通、もともとパソコンの文字はASCIIコードです。あらためて変換する必要はありません。 すでに出ていますが、ZIPなどの圧縮ソフトを使えばよいです。Windowsなら最初からZIP圧縮の機能を持っています。 エクスプローラでファイルを表示して、ファイルを右クリックして、出てきたメニューの 送る→圧縮(ZIP形式)フォルダ を選ぶだけです。
- neKo_quatre
- ベストアンサー率44% (735/1637)
容量減らすなら、ハフマン符号みたいな符号化を使うとか。 ハフマン符号 - Wikipedia https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%95%E3%83%9E%E3%83%B3%E7%AC%A6%E5%8F%B7 2進数でないので変則的ですが、 Letter frequency - Wikipedia https://en.wikipedia.org/wiki/Letter_frequency 一般的なアルファベットの出現頻度が、etaoinshrdlcumwfgypbvkjxqzの順だそうなので、出現頻度の高いものほど短い符号を割り振って、 (出現頻度がランダムなバイナリデータなんかの場合、事前処理として出現頻度を調べたり、そのテーブル持ったりしますが) e…0 t…1 a…2 o…3 i…4 n…5 s…6 h…7 r…8 d…90 l…91 c…92 u…93 m…94 w…95 f…96 g…97 y…98 p…990 b…991 v…992 k…993 j…994 x…995 q…996 z…997 で木になるかな? 符号化はひたすら置換でOKですが、復号の場合は出現頻度の低い方から逆に置換か、左から順に解析とかでしょうか。
- bardfish
- ベストアンサー率28% (5029/17766)
今は見かけることはなくなりましたが、LHAという圧縮ソフトが有りました。ZIPと同じもので日本人が開発した圧縮アルゴリズム・ソフトです。 開発者が同梱していたテキストを読んだだけですが、基本は対象となるテキストの中から重複して使用されている単語をコード化し、テキストの中にコードを埋め込むというもの。 そして、圧縮ファイルの中にはコード変換表も含めておく。 こうすると、7文字の単語が100回存在するテキストなら700文字が1バイトのコード100回(100文字相当)に減らせるというもの。 だから、適さないケースも存在します。 確か、辞書型とかパターン形と言われていたような・・・ LHAはソースも公開されていたはずですが、今もどこかに残っているのかな? NECのPC-98が主流だった頃、インターネットもなくパソコン通信が盛んだった頃の話ですので1980年台だったと思います。 Windowsが登場してからはDLL版が登場し、DLLを利用した様々なツールが登場しました。 DLL版は有志が許可を得て移植したものと記憶しています。