刺破间隔的最小点数

时间:2014-03-22 18:32:18

标签: algorithm huffman-code greedy

设X是实线上的一组n个区间。我们说如果X中的每个区间包含至少一个P点,则一组P点刺X.描述并分析一个有效算法来计算刺入X的最小点集。假设您的输入包含两个数组XL [1 .. n]和XR [1..n],表示X中间隔的左右端点。

有什么建议从哪里开始以及如何解决?贪心算法?霍夫曼的?

3 个答案:

答案 0 :(得分:2)

这是我能想到的:

  1. 按终点排序间隔
  2. 完成每个间隔。如果未覆盖间隔(您只需要使用当前间隔检查最后添加的点),请在结束点放置一个点

答案 1 :(得分:0)

这是一种贪婪的算法。

从第一个x坐标开始,一直到达第一个终点。标记该点,以及被该点刺伤的所有间隔被刺伤。对所有非刺穿阵列重复此操作,直到所有阵列都被刺伤。

证明
假设有一个不包含第一个终点的最佳解决方案。然后第一个刺入点在该终点之前或之后。如果它在之后,那么它将不包括具有第一个终点的间隔,因此不是解决方案。
所以它必须在此之前。然后,如果第一个刺激点位于第一个终点之前,则包含第一个终点的解也是最优解,因为在此之前没有其他区间结束,因此没有区间不会被串联。

答案 2 :(得分:0)

以左点的非递减顺序对区间进行排序,并令 S 为包含所有 XL 和所有 XR 值的集合。最初,我们要覆盖最小的左点 xmin。我们必须采用 xL ≤ xmin 的区间之一:我们也可以采用具有最大 xR 的区间。重复这个过程,用 S 中大于这个最大 xR 的最小值更新 xmin。