你能帮我找一个覆盖线段的贪心算法吗?

时间:2016-12-22 07:17:55

标签: algorithm math optimization

问题是:给定n段线(进入X轴),坐标为[Li,Ri](坐标可以为负数)。您将选择覆盖整个段[0,M]的最小段数。

在这里我做了什么:实际上我按照起始坐标(Li)按升序对段进行了排序。然后选择以最小的Li开头的段,然后选择最大的段。

但我的算法对某些情况不起作用。你们这个问题还有其他想法吗?请给我一些解决这个问题的提示。

2 个答案:

答案 0 :(得分:1)

首先删除具有R < 0的细分。在剩余的细分中,您必须至少选择一个细分L <= 0 <= R。选择具有R的细分中具有最大L <= 0的细分受众群没有任何损失。 用[R, M]代替[0, M]冲洗并重复。

答案 1 :(得分:1)

  1. 通过增加李来对细分进行排序。

  2. 设L = 0,覆盖最左边的横坐标。

  3. 只要Li <= L,就扫描列表,同时记住Ri最大的段。

  4. 设置L = Ri并继续扫描(3),除非列表用尽。

  5. 主循环的不变量表示&#34;已扫描的段最小覆盖[0,L],其余段覆盖[L,M](尽管不是最低限度)&#34;。