1

フォームのテキストデータを圧縮する必要があります

[70,165,531,0|70,166,562|"hi",167,578|70,171,593|71,179,593|73,188,609|"a",1,3|

データには数千文字 (約 10000 ~ 50000) が含まれます。

さまざまな圧縮アルゴリズムを読みましたが、ここでどれを使用するかを決定できません。

ここで重要なことは、圧縮された文字列には英数字のみ(または +-/&%@$ .. のようないくつかの特殊文字) を含める必要があるということです。つまり、ほとんどのアルゴリズムは意味不明な ASCII 文字を圧縮データとして提供するということですよね? それは避けなければなりません。

誰かがここでの進め方を教えてもらえますか?

PS テキストにはnumbers、 主'に文字が含まれてい|ます。他のキャラクターは非常にまれにしか出現しません。

4

2 に答える 2

7

実際には、出力文字セットを印刷可能な文字に制限するという要件により、圧縮ゲインの 25% が自動的に犠牲になります。

しかし、それが本当に必要な場合は、いつでも base64 またはよりスペース効率の良いbase85出力を使用して、生のバイトストリームを印刷可能な文字に再変換できます。

圧縮アルゴリズム自体に関しては、十分にテストされたオープン ソース コードが存在するため、gzip や bzip2 などのよく知られているものの 1 つを使用してください。

「最良の」アルゴリズムを選択することは、実際にはそれほど簡単ではありません。ここでは、自問しなければならない質問のリストの抜粋を示します。

  1. エンコード側またはデコード側で最高の速度が必要ですか (たとえば、bzip はかなり非対称です)。
  2. エンコーダーとデコーダーの両方にとってメモリ効率はどれほど重要ですか? 組み込みアプリケーションにとって重要になる可能性があります
  3. コードのサイズは重要であり、組み込みでも重要です
  4. エンコーダーまたはデコーダー、あるいはその両方について十分にテストされた既存のコードが C のみまたは別の言語で必要ですか?
  5. 等々

ここでの結論は、おそらく、データの代表的なサンプルを取得し、いくつかの既存のアルゴリズムを使用していくつかのテストを実行し、ユース ケースにとって重要な基準でそれらをベンチマークすることです。

于 2012-07-11T23:37:45.897 に答える
4

1 つの考え: 2 つの問題を個別に解決できます。最適な圧縮が得られるアルゴリズムを使用して (bz2、zip、rar など、データの種類でいくつか試してみて、サイズを確認してください)、「意味不明な ascii」を取り除きます (つまり、実際にはバイトだけ...)、圧縮データを Base64 でエンコードできます。

いくつかの異なる文字しか使用しないため、本当によく考えれば、特定の問題に対してより良いアルゴリズムを見つけることができるかもしれませんが、1 つに出くわした場合は、試してみる価値があると思います。

于 2012-07-11T23:36:37.880 に答える