【发布时间】: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