数据结构,用于存储允许有效比较操作的值范围

时间:2012-10-22 10:10:26

标签: performance algorithm data-structures

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

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

非常感谢提前。

2 个答案:

答案 0 :(得分:2)

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

对于区间[a-b] 构建树,保持'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));
}

答案 1 :(得分:1)

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