映射压缩具有相等值的键范围

时间:2016-07-28 00:45:22

标签: algorithm dictionary range binary-search-tree intervals

我正在寻找一种类似Map[Ordered, Any]的数据结构,对于同值键的间隔,空间要求较低。它应该支持以下操作:

  • Upsert([lo, hi], value):在区间中插入所有键,全部映射到给定值;覆盖/删除该范围内任何已存在的密钥。
  • Delete([lo, hi]):从地图中删除指定范围内的所有密钥。
  • Query(x) -> Maybe[value]:如果有的话,返回与x相关联的值,如果是这种情况,则返回其缺席的一些指示。

请注意,Upsert([1, 10], A) ; Upsert([5, 13], B)会产生{1-4: A, 5-13: B}。我对范围/区间/分段树的理解是它们做了一些略有不同的事情,但如果我错了,请纠正我。

最好每个间隔的等值密钥使用O(1)存储,并且每个操作使用O(log n)时间(或更好)。摊销的边界是可以的,但我更喜欢按操作界限。

我自己的部分解决方案是使用不平衡的二叉搜索树,这显然不会让我到O(log n)时间。不明显如何继续的原因是插入可能会删除大的子树:假设树包含键1..63(都具有不同的值),完全平衡,并且upsert([1, 31], something_new):然后整个左子树崩溃到单个节点。你如何在O(log n)时间内重新平衡这个?我不确定......

0 个答案:

没有答案