想象一下,我有一组最小值和最大值。我想要一个数据结构,给定一个外部值,最有效地给我(最小,最大)对,其值> = min,值< = max。
如果你知道范围是非重叠的,我想你可以在min上做一个平衡的二进制搜索树,并且第一个满足(min,max)的节点必须是唯一的。但是如果范围可以重叠,是否有一种数据结构可以让你有效地做到这一点?
答案 0 :(得分:2)
您描述的问题也称为“刺入查询”。在图形编程教科书中有很好的描述,这是一个非常相关的问题。
此外,segment trees上的维基百科页面可能有所帮助。这些树是通常用于解决此问题的数据结构。
答案 1 :(得分:1)
我认为答案可能实际上是http://en.wikipedia.org/wiki/Interval_tree。给定一个点或一组点,它允许您有效地拉出令人满意的间隔。当然,唯一需要注意的是,初始数据结构的构建效率不高,但在任何索引等方面也是不可避免的。
答案 2 :(得分:0)
一种可能的方法是将(min,max)放在一个数组中,并仔细排序 然后使用二进制搜索找到数组中符合条件的区域,然后搜索。
答案 3 :(得分:0)
可以使用Range Tree:a binary tree of binary trees来解决查询。
外树是对(x,y)的值x上的搜索树。对(x,y)存储在叶节点中。外树的每个节点V包含一个指向y索引搜索树Y的指针,其中包含V的子树的所有对。
要求解范围查询([Value,infinity] = RangeX,RangeY),请在外部搜索树中搜索最左边的x min ,其值为< = x min 子>。设V是x min 路径上的节点。如果搜索向左移动,则V的 right 子树的搜索树Y包含全部在RangeX中的对。将RangeY中的所有Y对添加到结果中。