查找有序集合的交集的算法

时间:2016-03-01 23:29:51

标签: algorithm divide-and-conquer set-intersection

我一直在研究如何找到两个排序集的交集,这些集合比迭代地更有效。最后,我的搜索让我想到了这个问题:intersection and union of n-arrays in C。但是,我不明白两组的交集如何等于两个子集的交集。我想试着弄清楚如何用递归来划分和征服算法,但我无法理解给出的例子是如何工作的。

更具体地说,分而治之算法如何适用于两组,例如:

A = 1, 2, 3, 4
B = 3, 5, 6, 7

看起来似乎并不存在实际上一直在3处找到交叉点的分而治之算法。

2 个答案:

答案 0 :(得分:2)

  

但是,我不明白两组的交集是否相等   到两个子集的交集。

这不是你的链接所说的(因为它是错的,正如你所认识的那样)。

查找有序集的交集,即。两个排序数组的共同元素,
没有至少迭代它们是不可能的。它不会比O(N)好。

答案 1 :(得分:-1)

在两个数组之间找到一个最后一个元素大于另一个元素的第一个元素。

例如:

A = 1, 2, 3, 4
B = 3, 5, 6, 7

选择数组A。从右到左对A应用二进制搜索,以找到以下元素:

A[i] >= B[0]

现在使用这两个数组的线性搜索:

A[i......n]
B[0......m]

nm的长度分别为AB

我认为它首次尝试时的线性搜索复杂度较低。