問題:
ほとんどが 0、いくつかの 1、いくつかの 2 を含む、非固定長 (ただし、300 から 400 である必要があります) の負でない整数の配列を圧縮したいと考えています。可能性は低いですが、より大きな数を持つことも可能です。
たとえば、360 要素の配列は次のとおりです。
0,0,0, 1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1 , 0,0,0,0,0, 0,0,0,0,0,0,0,0,0, 1 ,0,0,0,0,0,0, 2 ,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0, 1,1 ,0,0,0,0,0,0, 0,0, 4 ,0,0, 0,0,0,0, 3 ,0,0,0,0,0,0,0,0,0, 1 ,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0, 2 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0, 1 ,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0, 1 ,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0, 1 ,0,0,0,0,0,0,0, 5,2 ,0,0,0, 0,0,0,0,1 ,0,0,0,0,0,0,0, 1 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0 , 1,2,1,0,0,0,0,0,0, 0,0, 1 ,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.
ゴール:
目標は、このような配列を、文字と数字を使用して可能な限り短いエンコーディングに圧縮することです。理想的には、次のようなものです: sd58x7y
私が試したこと:
「デルタ エンコーディング」を使用しようとしました。ゼロを使用して 1 より大きい値を示します。たとえば、{0,0,1,0,0,0, 2 ,0,1} は次のように示されます: 2,3 、0、1。それをデコードするには、左から右に読み取り、「2 つのゼロ、1 つ、3 つのゼロ、1 つ、0 つのゼロ、1 つ (これは前のものに追加されるため、2 になります)、1 つのゼロ、1 つを書き留めます。 "。
区切り文字 (コンマ) の必要性をなくしてより多くのスペースを節約するために、文字 z を「35 PLUS 次の文字」として残しながら、1 つの英数字のみを使用して 0 から 35 のデルタ値を示すようにしました (0 から y を使用)。 . これは「可変ビット」などと呼ばれるものだと思います。たとえば、40 個のゼロが連続している場合、「z5」としてエンコードします。
それは私が得た限りです...結果の文字列はまだ非常に長いです(上記の例では約20文字になります)。理想的には、8 文字またはそれより短い文字が必要です。御時間ありがとうございます; どんな助けやインスピレーションも大歓迎です!