1

整数のデータシーケンスをソートしました。2 つの数値の最大差は 3 です。たとえば、データは次のようになります。

Data: 1 2 3 5 7 8 9 10 13 14
Differences: (start 1) 1 1 2 2 1 1 1 3 1

差分値を保存するよりも、このタイプのシーケンスを保存 (圧縮) するより良い方法はありますか? 辞書ベースの方法を使用すると、数値 1、2、および 3 のランダム性が原因で圧縮に失敗したためです。「PAQ」スタイルの圧縮を使用すると、結果は良くなりますが、それでも満足できるものではありません。ハフマンおよび算術コーダーは、辞書ベースの方法よりも悪いです。

予測で何か方法はありますか?

たとえば、元のデータに対して回帰を使用し、差異を保存するよりも (小さいか、より一貫性がある可能性があります)。

または、違いのヒストグラムに基づいて何らかの予測を使用しますか?

または、まったく異なる何か....またはまったく不可能です(私の意見では、これが本当の答えです:))

4

1 に答える 1

0

コメントで、1 バイトあたり 4 つの違いを既に保存していると言っているので、これ以上うまくいかない可能性があります。差 0、1、2、および 3 がランダムで均等に分散されている場合、これ以上改善する方法はありません。

それらが均等に分散されていない場合は、ハフマンまたは算術コードを使用してより適切に処理できる可能性があります。たとえば、1 が 0 よりも一般的で、2 や 3 よりも一般的である場合、1 を 0、0 を 10、2 を 110、3 を 111 として保存できます。 3 は 10 と 11 です。引用した場合、1 が 80% の確率で発生する場合は、算術コードを使用するとうまくいく可能性があります。または、シンボルのペアをコーディングすることによる貧乏人の算術コード。例えば:

11 0
13 100
21 101
12 110
31 1110
22 111100
23 111101
32 111110
33 111111

1 80%、2 10%、3 10% に適したコードです。(それは奇数の差の場合を完全に処理しませんが、偶数または奇数を示す最初のビットと、奇数の場合は最後にさらにいくつかのビットで処理できます。)

以前の値よりも優れた予測変数がある可能性があります。これは、1 つ前の値ではなく、 n 個の前の値の関数になります。ただし、これはデータに大きく依存します。たとえば、現在の値が前の 2 つの値によって作成された線上にある可能性が高いと想定できます。または、前の 3 つの値によって作成された放物線上にあること。または、データが非常に偏っている場合は、他の関数、たとえば、ある周波数の正弦波などです。

于 2013-02-14T17:30:07.547 に答える