我的算法课上有个问题,我无法解决。问题指出,有一个排序算法O(nlogn)
,搜索是通过二进制搜索O(log n)
来完成的。
两个集合是给定的,我必须设计一个算法来确定这两个集合是否不相交。
最佳答案
O(N)
解决方案(假设两个集合已排序):
将两个已排序的集合与元素所属集合的信息合并
遍历合并列表,如果从两个集合中找到两个相等的元素而不是不相交的,否则如果能够到达
不相交
例如
a= 1, 4, 6
b= 2, 4, 7
现在合并集=
元素:
1 2 4 4 6 7
设置编号(A/B):
1 2 1 2 1 2
现在我们可以清楚地看到,两个四是连续的,并且都来自两个不同的集合,因此不是不相交的。
编辑:
如果你需要的是发现集合是不相交的或不是简单的合并会给你。当你发现集合中的两个元素都相等时,返回“不分离”否则如果能够到达这两个元素的末尾,则返回“不分离”。
关于集装箱的问题。以下是:
class Element{
int i;
int setInfo
}
现在声明数组为:
Element[] e=new Element[X];
希望我明白了。