第四次作业
💡解答
-
选点问题的贪心策略
核心策略:按区间的右端点从小到大排序,依次选择每个区间的右端点作为选点,若当前区间已包含已选点则跳过,否则选择该区间的右端点。
步骤拆解:
1. 将所有区间按b_i升序排列;
2. 初始化第一个选点为第一个区间的右端点b_1,计数count=1;
3. 遍历后续区间,若当前区间的左端点a_i > 已选的最后一个点,则选择该区间的右端点b_i作为新选点,count++;
4. 遍历结束后,count即为最少选点数量。 -
贪心选择性证明
贪心选择性指:局部最优选择能导致全局最优解,证明如下:
1. 设最优解为S,第一个选点为x,按策略选的第一个点为b_1(第一个区间的右端点)。
由于所有区间按b_i排序,b_1是第一个区间的最小右端点,x \geq b_1;
2. 若x = b_1,则策略的第一个选择与最优解一致;
若x > b_1,将S中的x替换为b_1,新的点集S'仍能覆盖所有区间(因b_1 \in [a_1, b_1],且后续区间的b_i \geq b_1,原被x覆盖的区间仍会被b_1覆盖),即S'也是最优解;
3. 以此类推,每一步选择区间右端点的局部最优操作,最终能得到全局最优的选点集合。 -
时间复杂度分析
1. 排序阶段:对n个区间按右端点排序,使用快速排序/归并排序的时间复杂度为O(n\log n);
2. 遍历阶段:遍历n个区间做判断和选点,时间复杂度为O(n);
3. 总时间复杂度:O(n\log n) + O(n) = \boldsymbol{O(n\log n)},排序是算法的时间瓶颈。

浙公网安备 33010602011771号