1

Java で long にエンコードしたい String があります。また、長いものから文字列にデコードしたいと思います。Long (オブジェクト) ではなく、"long" (プリミティブ) であることが重要です。文字列の最大長は 128 文字ですが、通常はそれよりもずっと小さくなります。文字列の文字は ASCII でエンコードされ、拡張 ASCII コード (0-256) ではなく、標準の ASCII 値 (0-127) のみを使用します。

各文字を long (8 バイト) の各バイトに変換するだけで、長さ 8 の文字列をエンコードできます。各文字の範囲は 0 ~ 127 (7 ビット) であるため、最長で 9 文字 (64 ビット / 7 ビット = 9.14) をエンコードできると思いますが、まだ実装していません。

(128 文字すべてをエンコードすることは) 不可能かもしれないと感じていますが、問題を解決して、より良い手法があるかどうかを確認したかったのです。

128 文字が不可能な場合、long にエンコードできる最大文字数は?

PSハッシュも少し調べましたが、質問のデコード要件で失敗したようです。

4

2 に答える 2

0

シャノンのソース コーディング定理を使用して、64 ビットに圧縮できるデータ量を判断できると思います。

可能な限り 14:1 の圧縮率を達成する必要がありますが、それはデータ セットに大きく依存します。たとえば、入力文字列がたまたま 128 回繰り返された単一の文字である場合、896 ビット (128 文字) を 64 ビットに圧縮できます。128 文字のすべての文字列でこの圧縮率を達成することはおそらく不可能だと思います。

少し関連する質問を見てみましょう: gzip の最大圧縮率は? .

また、 cs.stackexchange.comでより良い回答が得られる可能性があります。これは、プログラミングに関する質問というよりは理論に関する質問です。

于 2013-10-26T02:42:21.353 に答える