-3
我有一個大小爲1024 * 1024 * 1024 * 4的稀疏數組。這個數組的項目是字節。所以陣列的內存是4G。它是一個稀疏數組,也就是說,非零項只有600M左右。希望提出一種存儲結構來壓縮稀疏陣列(壓縮爲2〜3G),並且訪問速度很快。如何壓縮大小1024 * 1024 * 1024 * 4稀疏數組
我有一個大小爲1024 * 1024 * 1024 * 4的稀疏數組。這個數組的項目是字節。所以陣列的內存是4G。它是一個稀疏數組,也就是說,非零項只有600M左右。希望提出一種存儲結構來壓縮稀疏陣列(壓縮爲2〜3G),並且訪問速度很快。如何壓縮大小1024 * 1024 * 1024 * 4稀疏數組
合適的表示形式取決於稀疏數組需要的操作。一般的方法是將非零項目的位置及其值存儲在數據結構中。
一種選擇是使用散列表。
enum {NumDimensons = 4};
struct ArrayLocation {
int16_t location[NumDimensions];
};
typedef uint8_t ArrayValue;
// Hash Table with key as ArrayLocation and value as ArrayValue
有了這樣get()
和put()
哈希表的操作很簡單,但是迭代是沒有的。如果迭代很重要,則一種選擇是使用二叉搜索樹。
你目前的解決方案是什麼樣的? – Annabelle
我將實現一個稀疏數組作爲關聯數組,作爲一個哈希表。我會採取指數(其中四個,在你的情況),散列在一起,然後像往常一樣搜索散列鏈。或者我會在「稀疏陣列」上進行網絡搜索,看看其他人做了什麼。 –