设X是实线上的一组n个区间。我们说如果X中的每个区间包含至少一个P点,则一组P点刺X.描述并分析一个有效算法来计算刺入X的最小点集。假设您的输入包含两个数组XL [1 .. n]和XR [1..n],表示X中间隔的左右端点。
有什么建议从哪里开始以及如何解决?贪心算法?霍夫曼的?
答案 0 :(得分:2)
这是我能想到的:
答案 1 :(得分:0)
这是一种贪婪的算法。
从第一个x坐标开始,一直到达第一个终点。标记该点,以及被该点刺伤的所有间隔被刺伤。对所有非刺穿阵列重复此操作,直到所有阵列都被刺伤。
证明:
假设有一个不包含第一个终点的最佳解决方案。然后第一个刺入点在该终点之前或之后。如果它在之后,那么它将不包括具有第一个终点的间隔,因此不是解决方案。
所以它必须在此之前。然后,如果第一个刺激点位于第一个终点之前,则包含第一个终点的解也是最优解,因为在此之前没有其他区间结束,因此没有区间不会被串联。
答案 2 :(得分:0)
以左点的非递减顺序对区间进行排序,并令 S 为包含所有 XL 和所有 XR 值的集合。最初,我们要覆盖最小的左点 xmin。我们必须采用 xL ≤ xmin 的区间之一:我们也可以采用具有最大 xR 的区间。重复这个过程,用 S 中大于这个最大 xR 的最小值更新 xmin。