我需要一些幫助在C/C++中編寫算法(儘管語言示例就足夠了)。目的是一個容器/數組,允許在任何索引處插入。但是,如果在索引中插入一個不接近現有索引的元素,即會導致大量的存儲空間。然後數組最小化空桶。需要關於非連續陣列算法的幫助。索引分組
即你有一組元素需要在以下索引處插入;
14
54
56
57
12
8
6
5678
一個連續的數組會產生一個數據結構產生這樣的
0
1
2
3
4
5
6 val
7
8 val
9
10
11
12 val
...etc
但是我正在尋找的是創建一個新的陣列的解決方案時的指數是不是X水桶內的它的最近鄰居。 例如
Array1
6 val
7
8 val
10
11
12 val
13
14 val
Array2
54 val
56 val
57 val
Array 3
5678 val
然後使用某種索引映射查找查找過程中索引所處的數組。我的問題是,我應該在插入期間將索引分組到一起使用哪種算法? (同時仍保持了良好的空間/時間權衡)
編輯: 感謝迄今答案。我要查看的數據將包含一個或兩個非常大的索引範圍,沒有空白,然後有一個或兩個非常大的空白,然後可能會有幾個「零散」單個值。此外,數據需要排序,所以散列表已經不存在。
如果您不需要專門使用數組,請將索引包裝到對象中並將其用作散列鍵。那麼你仍然只能有一個具有該索引的對象,並且你沒有太多任意大的桶。 – Kylar 2010-02-18 16:16:04
FWIW,你可能會發現我的問題在這裏有一些討論有趣:http://stackoverflow.com/questions/2267331/why-use-an-array-to-implement-a-list-instead-of-a-哈希表 – 2010-02-18 17:25:06