2016-11-06 39 views
-3

我有一個大小爲1024 * 1024 * 1024 * 4的稀疏數組。這個數組的項目是字節。所以陣列的內存是4G。它是一個稀疏數組,也就是說,非零項只有600M左右。希望提出一種存儲結構來壓縮稀疏陣列(壓縮爲2〜3G),並且訪問速度很快。如何壓縮大小1024 * 1024 * 1024 * 4稀疏數組

+5

你目前的解決方案是什麼樣的? – Annabelle

+0

我將實現一個稀疏數組作爲關聯數組,作爲一個哈希表。我會採取指數(其中四個,在你的情況),散列在一起,然後像往常一樣搜索散列鏈。或者我會在「稀疏陣列」上進行網絡搜索,看看其他人做了什麼。 –

回答

1

合適的表示形式取決於稀疏數組需要的操作。一般的方法是將非零項目的位置及其值存儲在數據結構中。

一種選擇是使用散列表。

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()哈希表的操作很簡單,但是迭代是沒有的。如果迭代很重要,則一種選擇是使用二叉搜索樹。