【发布时间】:2014-04-27 07:49:21
【问题描述】:
这是一个基于查找最大嵌套间隔集大小的问题..
有许多区间,每个区间由包含起点和终点 (si, ei) 的对定义。如果 i2 完全位于 i1 之内,则两个区间 i1 和 i2 称为嵌套。示例:- (2,6) 和 (3,4) 是嵌套的,因为 (3,4) 是 (2,6) 的一部分。类似地,如果 i2 位于 i1 内,i3 位于 i2 内,则 k 间隔 i1、i2、i3....ik 被称为嵌套,...依此类推。从给定的区间中确定最大区间集的大小,使得该集中的所有区间都可以产生嵌套。
我是这样想的:- 让我们举个例子- (0,7) (0,5) (1,21) (1,9) (2,8) (2,4) (3, 20) (4,16) (5,15) (6,21) 对它进行排序,使得 a[i-1]=b[i] 比从第一个区间开始,我们开始一个链表..如果下一个区间在一个区间内,我们向下移动节点并遍历沿着节点创建的图(除了主列表)..我们将最大级别节点的指针存储在这个图可以适应新的区间..并在链表中进一步遍历以查看当前区间来自谁..最后我们有一个指向我们必须附加当前区间的节点的指针..并比较这个节点的级别与我们已经拥有的最大级别......最大级别的最终值是最大嵌套间隔集的大小..
上述解决方案的复杂度可能是:- O(n(k+l) + nlogn)
我想这样很难得到它,但我别无选择......如果有人有任何其他算法来解决它..请发布因为我的算法需要更长的时间来实现(很多数据结构参与)...谢谢!!!
【问题讨论】:
-
如果你不想写那么多(按 B-A, [A,B] 之间的距离对它们进行排序),请在 N^2 中执行,然后执行 2 个 for 循环。为了获得更好的复杂性,您必须创建一些日期结构。你的建议是一个小时的工作+测试。
-
@IonescuRobert 我不明白你提出的解决方案。您按大小对间隔进行排序,然后这两个循环做什么?
标签: algorithm sorting nested complexity-theory intervals