1

増分データを保持するベクトルがあります。通常、ベクトルの各要素は64ビット長の変数です。ただし、2つの連続する要素間の差が非常に小さい可能性があるため、たとえば、次のようなシーケンスを作成できます。

1, 34, 37, 42, 45, 1098, 1200, 1211, 1938

このデータを圧縮する最良の方法は何ですか。違いを保持し、違いの大きさを定義するヘッダーバイトを用意するのが理想的でしょうか。それがバイト、ワード、ダブルワードなどであるか、またはそのような増分データを圧縮するさらに良い方法がありますか。

編集

オンラインで圧縮する必要があります。つまり、データをベクターに入れている間です。動的に拡大するベクトルを想定することができます。

4

2 に答える 2

4

増分が通常小さい場合の非常に単純な戦略は次のとおりです。

  1. 増分が<2**7の場合、最上位ビットがゼロに設定された1バイトとして出力します。

    0xxxxxxx
    
  2. それ以外の場合、増分が2 ** 14未満の場合は、上位ビットがそれぞれ1と0の2バイトとして出力します。

    1xxxxxxx 0xxxxxxx
    
  3. 明らかな方法でこれをより大きな増分に拡張します。1に設定された8番目のビットは、「待って、もっと来る」という意味です。ゼロは「整数の終わり」を意味します。

このコーディングスキームがいくつかのRFCまたは多分でbigintsに提案されているのを見たのを覚えていますinternet-draftが、今はそれを取得できないようです。または、UTF-8エンコード方式を再利用して、エンコードの効率を下げる代わりにエラー検出を改善することもできます(64ビット整数を超えたい場合は拡張する必要があります)。

于 2012-06-21T09:47:46.747 に答える
0

差動変調のようなものが必要なようです(すでに自分で言ったように)。多分これはあなたにいくつかのインスピレーションを与えます:http://en.wikipedia.org/wiki/Differential_pulse-code_modulation

于 2012-06-21T09:47:26.830 に答える