我正在解決一個編程問題,並且遇到了障礙。我試圖想出一個數據結構來將任意整數映射到另一個整數。你可能傾向於說「哈希表!」或「搜索樹!」,我實際上已經想到了這些(甚至嘗試了一個骯髒的實現)。但是有一個問題!每當我從映射中插入或刪除一個值時,我想也增加/減少(通過一個或一些任意偏移量)所有大於或等於插入/刪除值的值。在插入鍵值對後增加搜索樹中的值
下面是一個例子。
說我有,我會在這個地圖中使用了我的鑰匙和值的整數兩個列表:
Keys: (1, 6, 18, 21, 24)
Vals: (2, 1, 3, 0, 4)
現在,如果我添加一個鍵值對(7,1),我想增加大於或等於1導致這個所有值:
Keys: (1, 6, 7, 18, 21, 24)
Vals: (3, 2, 1, 4, 0, 5)
並且隨後,如果我刪除鍵 - 值對(21,0),這是結果:
Keys: (1, 6, 7, 18, 24)
Vals: (2, 1, 0, 3, 4)
在每次插入/刪除(即遍歷值並逐個更改它們)之後,這對於一對列表/數組以及一些處理來說是相當簡單的。
但是,我正在尋找一種更有效的方法,可能無需通過整個值列表並遞增/遞減它們。也許通過延遲遞增/遞減直到已經請求了一個值(應該已經遞增/遞減)。
有什麼想法?
如何修改以支持跳過列表而不是平衡二叉樹(因爲似乎平衡算法需要處理增量管理時很複雜)? – jsherer 2011-04-30 23:03:56
我不得不考慮這個(也許明天我會)。但是在[替罪羊樹](http://en.wikipedia.org/wiki/Scapegoat_tree)中執行應該相當容易:只需評估實際值並重置當前正在重建的子樹中的任何增量。 – svick 2011-05-01 01:47:19
@jordan,請參閱編輯。 – svick 2011-05-01 12:24:55