1

小さな文字列(86文字)をより小さなものに圧縮する方法はありますか?

@a@1\s\215\c\6\-0.55955,-0.766462,0.315342\s\1\x\-3421.-4006,3519.-4994,3847.1744,sbs

私が見る唯一の方法は、繰り返し登場するキャラクターをユニークなキャラクターに置き換えることです。しかし、私はグーグルでそれについて何かを見つけることができません。返信ありがとうございます。

4

3 に答える 3

2

http://en.wikipedia.org/wiki/Huffman_coding ハフマン コーディングは、おそらくかなり良いスタートになるでしょう。一般に、個々の文字を、元の文字列またはデータセットを複製するために必要な最小のビット パターンに置き換えるという考え方です。

さまざまな「小さな文字列」に対して統計分析を実行して、最も一般的な文字を見つけ、より一般的な文字が最小の一意のビット パターンで表されるようにする必要があります。そして、おそらく、表現する必要があるすべての文字を含む「例」の小さな文字列を作成します(a-z0-9@.0-など)

于 2012-04-08T17:19:50.963 に答える
1

私はあなたの85バイトの文字列の例を取りました(おそらく、意図したエスケープが処理されていないため、投稿からそのままコピーされたため、83ではありません)。生の deflate を使用して圧縮しました。つまり、zlib または gzip ヘッダーとトレーラーを使用せず、69 バイトに圧縮しました。これは主にハフマン コーディングによって行われましたが、4 つの 3 バイト後方文字列参照も使用されました。

この種のものを圧縮する最善の方法は、データについて知っているすべてのものを使用することです。そこには何らかの構造があり、数字がコード化されているようです。予想されるデータのより短い表現を作成できます。これをビットのストリームとしてエンコードできます。最初のビットは、取得したデータが予期したものではなかった場合に続くものがストレート バイトであることを示している可能性があります。

別のアプローチは、以前のメッセージを利用することです。このメッセージがメッセージ ストリームの 1 つであり、それらがすべて互いに類似しているように見える場合、以前のメッセージの辞書を作成して、圧縮の基礎として使用できます。この辞書は、受信した以前のメッセージによって相手側で再構築できます。 . メッセージが本当に似ている場合、圧縮率が大幅に向上する可能性があります。

于 2012-04-08T22:03:42.770 に答える