2009-06-11 15 views
2

未知のサイズのデータ​​を解凍するときに使用する初期バッファサイズを計算しようとしています。私は、既存の圧縮ストリームからデータポイントの束を持っているが、それらを分析する最良の方法を知らない。ストリーム圧縮データの解凍に最適な初期バッファサイズの決定

データポイントは圧縮されたサイズで、圧縮されていないサイズに対する比率です。例えば : 100425(圧縮サイズ)×1.3413(圧縮比)= 134700(非圧縮サイズ)

解凍器は、初期バッファサイズとのrealloc場合をALLOCしなければならないので、圧縮されたデータストリームは、非圧縮サイズが格納されていませんオーバーフローする。私は圧縮されたサイズを与えられたバッファを割り当てるための "最善の"初期サイズを探します。私は293,000以上のデータポイントを持っています。

+1

「ベスト」は何の目標ですか?あなたは最小化または最大化しようとしていますか? – RBarryYoung

+0

2つの目標は、初期のバッファサイズが大きすぎるのを避け、バッファが十分に大きくなかったために余分な再割り当てを避けます。私の圧縮データストリームは<100バイトから155MBを超えて異なり、圧縮率は0から1421:1まで変化します。平均比率は16.95314、中央値は1.4295、標準偏差は115.1413 –

+0

圧縮率に関する統計データは、入力された(圧縮された)データの範囲が大きすぎるため、かなり間違っています。サンプルをいくつかの範囲に分けてみてください。例えば、0〜10,000バイト、10,001〜1,000,000バイト、1,000,001〜10,000,000バイトなどです。それぞれの場合、より良いメジアンと標準偏差が得られます。 –

答えて

0

圧縮率のデータポイントが多いことを考えると、平均圧縮標準と標準偏差を得るために、圧縮データを分析することをおすすめします。次に、バッファサイズを最初に元のサイズに設定することをお勧めします。圧縮サイズは平均の2標準偏差で設定します。これは、あなたのバッファーがあなたのケースの93%に適したサイズであることを意味します。より多くの場合にバッファを再割り当てする必要がないようにするには、割り当てようとしている平均以上の標準偏差の数を増やします。

+0

こんにちは、迅速な対応に感謝します。圧縮データサイズ、比率、または非圧縮データサイズの平均値と標準偏差を計算することをお勧めしますか? 「元のサイズ*あなたの圧縮サイズ」という意味がわからないのですか? 「あなたの圧縮サイズ」はどういう意味ですか? –

+0

また、平均と標準偏差を計算する前に重複を削除する必要がありますか? –

+0

実装する前に統計情報を読むことをお勧めしますが、重複は削除しないでください。頻度を計算する際に重要なデータポイントです。平均圧縮率(平均)とその圧縮率の標準偏差(標準偏差)を計算したいとします。平均圧縮率が1.5、標準偏差が0.1としましょう。 1.7(1.5 + 2 * 0.1)の圧縮率を前提とすると、(平均より上の2つの標準をカバーしているため)ケースの93%をカバーします。 –

0

単純な方法の1つは、共通の初期解凍バッファーサイズを使用し、各再アロケーションでサイズを2倍にすることです。これは多くの動的ライブラリでも使用されています。

+0

圧縮ストリームのサイズが500MBを超えているので、これを行うことはできません –

+0

私は、必要な平均メモリではなく、すべてのストリームのピークメモリ使用量を考慮する必要があると思います。圧縮バッファーを1つしか使用しない場合は、このメモリーを使用可能にする必要があります。どのような圧縮ライブラリが使われましたか? – bill

関連する問題