我在准备期末考试时遇到了这个问题,虽然我看到了类似的问题,但我找不到递归公式。 我会感谢你的帮助!
问题是: 假设我们在平面中给出了一组L个n个线段,其中是端点 每个段的位于单位圆x上 2 + y 2 = 1,所有2n端点都是 不同。描述并分析计算L in的最大子集的算法 每对段相交
解决方案需要是动态编程方法中的算法(基于递归公式)
答案 0 :(得分:1)
我假设问题(" L的最强子集......")处理子集大小,而不是子集无法扩展。如果后者是真的,那么问题就很简单了,简单的贪婪算法就可以了。
现在回答你的问题。关注Matt Timmermans'提示(你可以证明吗?)这可以被视为longest common subsequence problem,除了我们不知道2个输入字符串是什么= 2个序列出现之间的分裂点是什么。
Longest common subsequence problem can be solved in O(m*n)
time and linear memory。通过沿着2n
- 长度数组移动分裂点,您将创建LCS问题的2n
个实例,每个实例都可以在O(n^2)
时间内解决,从而产生O(n^3)
的总时间复杂度{1}}。
您的问题被称为clique的最大circle graph问题(对应于图形节点的线段,以及与图形边缘对应的线段交叉点),并且已在2010年显示为O(n^2*log(n))
时间复杂度的解决方案。
请注意,在任意图形的情况下,最大团体问题(决策版本)是NP难的(确切地说是NP完全的)。