【问题标题】:Find the largest interval of non intersecting roads找到不相交道路的最大间隔
【发布时间】:2023-03-30 00:58:01
【问题描述】:

这是我一直试图解决的问题。

假设您有两条相互平行的主要道路 A 和 B。 现在我们有一组道路 R,它们都有一个端点在 A,另一个端点在 B。 R 中的所有道路均不共享任一道路的端点。因此,如果 R 中有 r 条道路,则有 2r 个不同的端点。 除此之外,只要起点和终点在 A 和 B rados,这些道路可以延伸多长、对角线、平行或任意方向 假设我们可以检查 2 条道路是否在 O(1) 时间内相交。

Q1) 在 R 中找到最大的连续道路子集,其中没有两条道路相交且不相交。这个算法应该在 O(n log n) 中运行

Q2) 与 Q1 相同,但现在我们假设 2r 个不同的端点位于 x2 + y2 = 1

给出的单位圆上>

这个算法应该在 O(n3) 或更短的时间内运行。

到目前为止我的方法 我尝试按 q1 的 2 个端点中的最小值对道路进行排序,这样我们的道路就从最左边开始。 然后我将遍历它们,并且仅检查其两个端点的最小值是否在迭代道路的最小端点之后开始的道路,并削减这些道路并再次递归调用该函数。

但我不确定这是如何工作的。而且我不确定它是否是 O(n log n)

第二季度我不知道。

我觉得这可以通过动态编程来完成,但我缺少某种可以轻松解决此问题的数据结构。 请帮忙。

【问题讨论】:

  • “连续子集”是什么意思。 R有某种自然排序吗? (例如,1 号道路从 a 到 b,2 号道路从 c 到 d,等等)
  • 没有指定实际的输入顺序是什么。但是在视觉上进行布局,我们可以看到从左到右的道路。在这个排序中,我们必须找到不相交道路的最大间隔。
  • 所以一个确切的陈述应该是这样的:找到 R 的最大最大子集 S 使得 R-S 中没有道路与 S 中的任何道路相交?但是第二季度的“连续”是什么意思?
  • imgur.com/Ril4We1我标出了最大区间
  • "Q1) .... 其中没有两条不相交的道路相交。嗯?如果它们不相交,那么……嗯……它们不相交……

标签: algorithm data-structures time-complexity


【解决方案1】:

问题 1

A 路有 N 个端点,B 路有 N 个端点。

根据道路的第一个端点对 R 中的道路进行排序,并准备其第二个端点的列表 A。

例如,如果我们有道路:

1->10
8->7
5->6

我们将按第一个端点将它们排序为:

1->10
5->6
8->7

并准备一个带有第二个端点的列表 A:

A = [10,6,7]

找到不重叠道路的最大子集,相当于在这个数组中找到最长的递增序列。

查找longest increasing subsequence 是一种标准算法,具有 O(nlogn) 解。

在这种情况下,最长的递增子序列是长度为2的[6,7],所以答案是2。

【讨论】:

  • 但是如果一条道路在两条主要道路之间从 1 到 10,那么道路 5->6,8->7 必须与道路 1->10 相交,对吗?所以在这个例子中没有道路是不相交的
  • 如果我的例子的答案不是2,那么我误解了你的问题。也许您可以在问题中添加一两个示例以帮助我正确理解?
  • imgur.com/5KBxgtG 在该图像中,c 和 d 将是最大的间隔。对不起,如果我没有正确表达问题
猜你喜欢
  • 2017-08-02
  • 2012-09-21
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
相关资源
最近更新 更多