我正在寻找一种允许存储非重叠整数范围的数据结构 并且比较[by]数据结构中是否存在[覆盖]某个范围。
例如,在我存储(0,9),(10,19),(30,29)之后, 在某些时候我想检查范围(1,11)是否被覆盖,在这种情况下 算法给出“是”,而对于范围(15,25),算法给出“否”,因为没有覆盖给定范围。
非常感谢提前。
答案 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数据结构,该结构旨在快速存储和搜索间隔。