约束集

时间:2013-09-24 15:26:53

标签: algorithm data-structures

开发项目的某些部分我需要实现一个像结构这样的数据集,这样我可以根据最小最大键值来获取子集:

ConstainedSet <- Set((key,value)*)
Subset <- ConstainedSet.Match(Constraint = "val1 <= key < val2")

然后 Subset 只应包含 ConstainedSet 中与“val1&lt; = key&lt; val2”限制匹配的元素。也就是说,那些键大于或等于 val1 但小于 val2 的元素。

例如,如果我们有像这样的子集:

ConstrainedSet <- {(1,hand),(2,eye),(3,nose)}

然后进行如下操作:

Subset <- ConstainedSet.Match(Constraint = "1 <= key < 3")

应该产生这个子集:

Subset <- {(1,hand),(2,eye)}

我开发了一个解决方案,其中每个元素都存储在三元组的矢量中,如

(minKey,maxKey+1,value) 

我保持此向量按 minKey maxKey 排序, minKey 命令的优先级高于 maxKey 。然后每次调用“匹配”都会对此向量执行二进制搜索。

如果我没有错,最坏的情况是时间复杂:

    每次拨打“匹配”时,
  • O(N)。
  • O(N)用于插入。

其中N是集合中元素的数量。

有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

通过密钥将其存储在平衡的二叉树中。

查找,插入:O(log n)。

如果你必须复制结果,那总是O(n),但如果不需要复制,子集可以由一对“迭代器”表示,你可以返回一对最小和最大节点从树上,所以整个事情将是O(log n)。

相关问题