【发布时间】:2013-10-28 16:50:49
【问题描述】:
我在我的算法课上遇到了一个问题,我无法解决它。问题指出,Theres 是一个带有O(nlogn) 的排序算法,搜索是通过采用O(log n) 的二进制搜索完成的。
两个集合是给P &Q,我必须设计一个算法来确定这两个集合是否不相交。
【问题讨论】:
标签: algorithm data-structures binary-search disjoint-sets
我在我的算法课上遇到了一个问题,我无法解决它。问题指出,Theres 是一个带有O(nlogn) 的排序算法,搜索是通过采用O(log n) 的二进制搜索完成的。
两个集合是给P &Q,我必须设计一个算法来确定这两个集合是否不相交。
【问题讨论】:
标签: algorithm data-structures binary-search disjoint-sets
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];
希望我清楚。
【讨论】:
只有当这两个集合之间没有共同元素时,这两个集合才会不相交。我假设这两个集合每个都有 n 个元素。该算法检查公共元素 nlog(n) 时间。如果没有找到共同的元素,则意味着这两个集合是不相交的。
For each element in set "P" search whether that number exist in set "Q".
Time complexity - n*log(n)
Log(n) to search in set Q and this search will be done "n" times.
【讨论】: