我正在解决一个编程问题,并且遇到了障碍。我试图想出一个数据结构来将任意整数映射到另一个整数。你可能倾向于说“哈希表!”或“搜索树!”,我实际上已经想到了这些(甚至尝试了一个肮脏的实现)。但是有一个问题!每当我从映射中插入或删除一个值时,我想也增加/减少(通过一个或一些任意偏移量)所有大于或等于插入/删除值的值。在插入键值对后增加搜索树中的值
下面是一个例子。
说我有,我会在这个地图中使用了我的钥匙和值的整数两个列表:
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