私はIntの非常に大きなリスト(おそらくlarge ) を使用して Scala に取り組んでおり、それらを圧縮してメモリに保持する必要があります。
唯一の要件は、リストの残りの部分に触れることなく、作業するリストの最初の番号をプル (および圧縮解除) できることです。
私には多くの良いアイデアがありますが、それらのほとんどは数値をビットに変換します。例:
タプル |log(x)|,x-|log(x)| として任意の数値xを記述できます。最初の要素は 1 と末尾の 0 の文字列 (単項コード) として右に並べ、2 番目の要素はバイナリで表します。例えば:
1 -> 0,1 -> 0 1
...
5 -> 2,1 -> 110 01
...
8 -> 3,0 -> 1110 000
9 -> 3,1 -> 1110 001
...
Int は固定の 32 ビットのメモリと long 64 ビットを使用しますが、この圧縮ではxはストレージに2log(x)ビットを必要とし、無限に大きくなる可能性があります。ほとんどの場合、この圧縮によりメモリが削減されます。
このような種類のデータをどのように処理しますか? bitarray とか何かありますか?
そのようなデータを Scala で圧縮する他の方法はありますか?
ありがとう