2016-11-06 2 views
-3

サイズが1024 * 1024 * 1024 *のスパース配列があります。この配列の項目はバイトです。したがって、配列のメモリは4Gです。これは疎配列です。すなわち、約600Mしかない非ゼロの項目です。うまくいけば、(2〜3Gに圧縮された)疎アレイを圧縮するための記憶構造が提案され、良好なアクセス速度を有することが望ましくあり得る。1024 * 1024 * 1024 * 4スパース配列のサイズを圧縮する方法

+5

現在のソリューションはどのようなものですか? – Annabelle

+0

私は、ハッシュテーブルとして、連想配列としてスパース配列を実装します。私はインデックス(あなたの場合は4つ)を取り、それらを一緒にハッシュしてから、いつものようにハッシュチェーンを検索します。または、他の人が何をしているかを見るために、「疎配列」でWeb検索を行います。 –

答えて

1

適切な表現は、スパース配列でどのような操作が望ましいかによって異なります。一般的なアプローチは、非ゼロ項目の位置とその値をデータ構造体に格納することです。

1つのオプションは、ハッシュテーブルを使用することです。 get()put()のようなハッシュテーブルの動作により

enum {NumDimensons = 4}; 
struct ArrayLocation { 
    int16_t location[NumDimensions]; 
}; 

typedef uint8_t ArrayValue; 

// Hash Table with key as ArrayLocation and value as ArrayValue 

は簡単ですが、反復はありません。反復が重要な場合は、バイナリ検索ツリーを使用することもできます。

関連する問題