-3
サイズが1024 * 1024 * 1024 *のスパース配列があります。この配列の項目はバイトです。したがって、配列のメモリは4Gです。これは疎配列です。すなわち、約600Mしかない非ゼロの項目です。うまくいけば、(2〜3Gに圧縮された)疎アレイを圧縮するための記憶構造が提案され、良好なアクセス速度を有することが望ましくあり得る。1024 * 1024 * 1024 * 4スパース配列のサイズを圧縮する方法
サイズが1024 * 1024 * 1024 *のスパース配列があります。この配列の項目はバイトです。したがって、配列のメモリは4Gです。これは疎配列です。すなわち、約600Mしかない非ゼロの項目です。うまくいけば、(2〜3Gに圧縮された)疎アレイを圧縮するための記憶構造が提案され、良好なアクセス速度を有することが望ましくあり得る。1024 * 1024 * 1024 * 4スパース配列のサイズを圧縮する方法
適切な表現は、スパース配列でどのような操作が望ましいかによって異なります。一般的なアプローチは、非ゼロ項目の位置とその値をデータ構造体に格納することです。
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
は簡単ですが、反復はありません。反復が重要な場合は、バイナリ検索ツリーを使用することもできます。
現在のソリューションはどのようなものですか? – Annabelle
私は、ハッシュテーブルとして、連想配列としてスパース配列を実装します。私はインデックス(あなたの場合は4つ)を取り、それらを一緒にハッシュしてから、いつものようにハッシュチェーンを検索します。または、他の人が何をしているかを見るために、「疎配列」でWeb検索を行います。 –