数据结构存储间隔并允许快速删除?

时间:2015-07-04 22:00:23

标签: algorithm data-structures

我的一位朋友在采访中被问到以下问题: 您需要设计一个数据结构来存储ID为1:{1,5},2:{2,10},3:{4,20}的间隔...并且给定一个val x,您应该能够删除尽可能快地包含x的间隔。

例如,如果x = 3,则应删除1:{1,5}和2:{2,10}。

在线性时间内很容易做到,所以我猜访问者正在寻找log(N)解决方案。

1 个答案:

答案 0 :(得分:1)

解决方案1,快速删除(log(n))

将间隔细分为较小的不相交间隔(例如1:{1,5},2:{2,10},3:{4,20}变为{1,2} {2,4} {4 ,5} {5,20};

在[NewInterval X OrginalInterval]中使用Edge构建干涉图,其中(a,b)表示新区间a包含在原始区间b中;

删除程序: 对于给定的x,找到包含x的新区间(log n,因为可以对新区间进行排序) 将新间隔标记为已删除。

列出结构的内容(未删除的间隔): 迭代未删除的新间隔,并收集相关的orignal间隔。

解决方案2,快速插入新间隔(log(n)),慢删除(n): 实现Log time的一种简单方法是使用两个二叉树。一个是你使用间隔的最小值,另一个是你使用最大值。 删除将是#2; 2Log(N)'

Find all the interval with min < x log(n)
Find all the interval with max > x log(n)
Intersect the two previous set (n)