2016-08-22 6 views
0

私は短いストリングのリストを圧縮したいが、リスト全体を解凍しないでいつでもリストの任意のストリングを解凍できるようにしたい。短いストリングの長いリストを圧縮する

私は事前にリストを知っていて、どのくらいの前処理が関係しているかは関係ありません。また、いくつかの重要なO(1)メモリオーバヘッドがある場合には問題ありません。

ロスレス圧縮アルゴリズムを使用して各文字列を独立して圧縮することができますが、文字列が非常に短く、それぞれに冗長性があまりないためうまく動作しません。しかし、全体的に、冗長性がたくさんあります。

+0

リストはどのくらいですか?どのくらいの短い文字列ですか?彼らは普通のコンプレッサでどのくらい圧縮しますか? –

+0

@マークアドラー2百万の文字列、平均サイズ2k、gzipで〜35%圧縮率 –

答えて

0

一度に約64K相当の文字列を圧縮することをお勧めします(文字列のうちの約32個)、必要な文字列を得るため平均して16個の文字列のみを圧縮解除する必要があります。 1,000,000とは対照的にあなたはdeflate(gzipで使われている圧縮方法)とほぼ同じ圧縮を得るでしょう。

また、deflateを使用する代わりに、2,000,000文字列内で最もよく見られるサブストリングからなる32K「辞書」を作成することもできます。その後、各文字列は、32Kを使用して個別に圧縮して、一致を描画することができます。あなたの弦にこのような共通性があるならば、同じ圧縮に近づくことができます。 (zlib'sdeflateSetDictionary()inflateSetDictionary()の機能を参照してください。)

関連する問題