所以,這是我的小問題。水桶的索引計數
比方說,我有一個水桶0 的列表...一個ň分別含有L- < = C 。C ň < H項。我可以決定L和H的限制。我甚至可以動態更新它們,但我認爲它不會有多大幫助。
桶的順序很重要。我不能去交換他們。
現在,我想這些指標桶,因此:
- 我知道項目總數
- 我可以查找第i個元素
- 我可以添加/刪除項目從任何存儲桶中更新索引
看起來很簡單吧?看到這些標準,我立即想到了芬威克樹。這就是他們的真正意義。
然而,當你想使用的情況下,其他幾個用例蠕變:
- 如果一個桶計數低於L,桶必須消失(不用擔心物品還)
- 如果一個桶計數達到H,則必須創建一個新的水桶,因爲這是一個充滿
我還沒有想出如何有效地編輯樹狀數組:刪除/添加一個節點,而無需重建整棵樹...
當然,我們可以設置L = 0,這樣刪除將變得不必要,但添加項目不能真正避免。
因此,這裏的問題:
你知道無論是對本索引或如何更新樹狀數組結構更合理?
主要關心的是效率,而且因爲我打算實施緩存/內存考慮值得擔心。
背景:
我想拿出有點類似於B-樹的結構和排名跳躍表,但有局部索引。這兩個結構的問題是索引是沿着數據保存的,這在緩存方面效率低下(即,您需要從內存中獲取多個頁面)。數據庫實現表明,保持索引與實際數據隔離更容易緩存,從而更高效。
我很高興你看起來對這個問題感興趣:)但是,如果我只是在最後添加桶或開始問題會更容易一些。相反,我希望能夠在中間插入桶。在這方面你的結構仍然很有趣,它看起來很像一個標準的B-Tree。例如,我可以用一棵子樹「7(4 3)」替換葉子4,但它會使樹不平衡。你給了我食物的想法:) – 2010-06-26 12:29:15
@Matthieu:這是一個有趣的問題:-)所以我理解它的權利?另外,插入是否在您修改的存儲桶旁邊,或者可以是任意的? – 2010-06-26 12:54:44
你明白了吧。事實上,插入物品是從物品插入到給定位置的。如果在此位置填滿存儲桶並且下一個存儲桶沒有足夠的空間,則需要在它們之間插入一個或多個存儲桶。同樣,如果我們可以在空桶時移除桶,那將是非常棒的。 – 2010-06-26 15:46:40