2

我正在寻找一种数据结构,它允许存储整数的非重叠范围并比较某个范围是否存在[被覆盖]在[被]数据结构中。

例如,在我存储 (0,9),(10,19),(30,29) 之后,稍后我想检查范围 (1,11) 是否被覆盖,在这种情况下,算法会给出一个“是”,而对于范围 (15,25),算法给出“否”,因为未覆盖给定范围。

提前谢谢了。

4

2 回答 2

2

由于您正在处理整数的非重叠范围,我认为一个简单的 BST 可以完成这项工作(像 AVL 或 RB-tree 一样平衡,以防您想要严格的 O(logN) 性能)

对于间隔 [ab] 构建以“a​​”为键的树。节点结构类似于:

struct node{
int left;
int right;
struct node*left;
struct node*right;
};

为了搜索:

bool SearchOverlap(node* root, interval I){
if(!root)
    return false;
if(I.right < root->left)
    SearchOverlap(root->left, I);
else if(I.left > root->right)
    SearchOverlap(root->right, I);
else if(I.left > root->left && I.right < root->right)
    return true;
else if(I.left < root->left && I.right < root->right)
    return SearchOverlap(root->left, new Interval(I.left, root->left));
else if(I.left > root->left && I.right > root->right)
    return SearchOverlap(root->right, new Interval(root->right, I.right));
}
于 2012-10-22T10:31:47.143 回答
1

您可能正在寻找间隔树数据结构,它旨在快速存储和搜索间隔。

于 2012-10-22T10:13:07.140 回答