【问题标题】:Two disjoint intervals minimum sum两个不相交的区间最小和
【发布时间】:2017-12-28 18:48:36
【问题描述】:

给定一个包含 N 个区间 [a,b] 成本 c 的列表,求 2 个不重叠区间的最小总和。我在 O(n^2) ( pastebin.com/kveAZTwv ) 中有一个算法,但我没有找到 O(N log N)。

第一个值是间隔数。其他行是:a,b,c 其中 a 是区间的开始,b 是结束,c 是成本。

示例:

input :
3
0 10 1
1 2 2
9 12 2



output :
4

【问题讨论】:

  • 请出示您的 O(n^2) 解决方案。对现有算法进行改进比从头开始编写更容易。
  • 这些输入值代表什么?为什么输出是 4?
  • 这是我的 O(n^2) :pastebin.com/kveAZTwv
  • 第一个值是区间数。其他行是:a,b,c 其中 a 是区间的开始,b 是结束,c 是成本。
  • @Jones,编辑您的原始帖子而不是添加 cmets,相应地对齐代码。您可能会从此文档中受益:stackoverflow.com/help/how-to-ask

标签: c++ algorithm sorting intervals


【解决方案1】:

这是一个 O(n log n) 的算法的基本思想,我相信它可以更有效地完成:

1) 根据端点对所有区间进行排序,每个端点都是一个潜在的分割点,其中右侧的区间和左侧的区间不重叠

2) 现在扫描已排序的间隔,并为每个分离点记住左侧的最小成本间隔。

3) 根据起点对所有元素进行排序

4) 为每个分割点额外记住右侧的最小成本间隔(其起点在分割点之后)。这也可以通过从后到前排序元素的单次扫描来实现

5) 为每个分割点添加两个相应的成本并寻找最小值。

抱歉,由于我使用的是移动设备,所以这有点不正式。

【讨论】:

  • 我们可以等到你拿到你的电脑,不急着在手机上发布
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
相关资源
最近更新 更多