(在任何人问之前,这不是作业。)
假设您有2个阵列y0
和y1
其中
y0 = [1,2,3,4,5,6]
和
y1 = [2,1,6,3,4,5]
注意y0[0] = y1[1] = 1
,它实质上意味着y0[0]
已连接到y1[1]
。同样,y0[2] = y1[3] = 3
因此它们也是“连接”的。
(图片提供:belisarius)
一个数组中的每个元素在第二个数组中都有一个对应的条目。 将数组中的每个元素想象为顶点,并将这些连接作为边缘从一个数组绘制到另一个数组。
我需要找到一组边(最大尺寸),这样“边”(或线)都不会相交。
在上面的示例中,请注意,
Edge 1
和Edge 2
将相交。 Edge 6
将与Edge 3, Edge 4, Edge 5
。因此,解决方案可以是1,3,4,5
或2,3,4,5
(大小= 4),因为这些行中没有一条会相互交叉。可以有多种解决方案,但我只需要一种。
我的问题,是否有类似于此的已知CS问题?我应该使用什么算法?
我试图用一个例子来解释我的问题,然而,如果它仍然不清楚我会澄清任何疑问。 提前谢谢。
答案 0 :(得分:15)
假设在单个数组中没有重复元素,这只是增长最长的子序列。
不失一般性,假设第一个数组A1只是[1, 2, 3, ..., n]
。这种转换可以使用哈希集在O(n)中完成,或者使用BST在O(nlogn)中完成。
请注意,我们的集合有一个交叉点,当且仅当它包含i
和j
且i < j
但j
出现在第二个数组中的i
之前A2(我们知道i < j
以后i
出现在j
A1之前。
然后,如果一个集合没有交叉,那么它明显对应于A2的后续序列,反之亦然。
最长的子序列有一个简单的O(n ^ 2)解和一个稍微复杂的O(nlogn)解。
答案 1 :(得分:0)
它基本上是在计算反转次数问题。[来源 - 第5.3节,算法设计,Kleinberg和Tardos。 http://books.google.co.in/books/about/Algorithm_Design.html?id=25p3mHu3ij8C]
答案 2 :(得分:-1)
您所描述的内容称为 matching problem for bipartite graphs。我怀疑这个问题有一些问题(尚未说明),这使得难以解决。到目前为止,你真的没有对可以使用的边缘进行任何限制。假设某些边缘(不是全部)可用,那些“可能”的边形成一个图形,您决定使用的边形成最大匹配。在图中找到最大匹配是一个多项式时间算法,并且特别容易为二分情况编码。
标题听起来似乎情况可能会强加某些情况,因此“不相交”的边缘可能不可行(“最少边缘交叉点”)。也许你想要边缘覆盖(或1覆盖),即每个顶点属于至少一个边缘。然后,如果两个“顶点”阵列具有不同的长度,则不会有“完美匹配”,即匹配也是封面。当二分图中存在完美匹配时,经典结果 Hall's Marriage Theorem表征。如果图形是规则的(所有顶点具有相同的度数),则 König's Theorem告诉我们存在完美匹配(以及更多)。
<强>加了:强>
关于选择边缘的限制,可能值得说明图片的内容。两组顶点具有坐标{(i,0)| i = 1,..,N}和{(j,1)| J = 1,...,N}。每当y0 [i] = y1 [j]时,有N个可用边,线段连接(i,0)和(j,1)。尽管主题行显示“最小边缘交点”,但解决方案是这些边的最大子集,不允许任何交叉点,即给定 planar straight-line graph中包含的最大 permutation graph。
这与此处考虑的2级交叉最小化问题有关:
An Alternative Method to Crossing Minimization on Hierarchical Graphs -- P. Mutzel
“我们建议......删除最小数量的边缘,使得得到的图形是k级平面...在本文中我们解决了k = 2 ... [W] e解决提取问题的问题在给定的2级图中最大权重的2级平面子图。这个问题是NP难的。“
本问题在两个顶点集中施加相同数量的点,基本图形为1阶规则,并且在点的编号或定位中不允许选择。因此,不可能得出结论它与上述论文中描述的一样难。然而,它确实引导我们采用所谓的“分支定界”方法来精确解决这些问题。
让我们将原始问题的“边缘”视为新图的“节点”,其中如果原始边相交,则两个节点相邻。 [这是交叉图的一个示例。]现在重新调整的问题是找到新图的 a maximum independent set。这种问题一般都是NP难的,但我们再次怀疑目前问题的严重程度可能不那么普遍。
怀疑多项式时间算法存在的一个原因是多项式时间近似算法的可用性,用于平面凸集的有限集合的交叉图的最大独立子集:
Independent Set of Intersection Graphs of Convex Objects in 2D -- P. Agarwal and M Mustafa
“在本文中,我们提出了平面上线段和凸面物体的交叉图上的独立集问题的近似算法。”
关于当前问题的特殊性还有一个进一步的观察,它似乎使它在多项式时间内可以解决。 circle graph是线段的交叉图,可以绘制为圆的和弦。通过一个插值论证,可以如此绘制置换图的直线边缘,而不会丢失或引入交叉点。
现在,圆形图的最大独立集问题可以在多项式时间内求解。上面链接的维基百科文章提供了这个参考:
我也在Google图书中找到了这个参考: