1.作业选点问题

我的贪心策略
就盯着最早结束的考试来安排巡视

具体做法:
1.把所有考试按“结束时间从早到晚”排序
2.选第一个考试(最早结束的)的“结束时间”作为巡视点
3.所有被这个时间点覆盖到的考试(开始时间 ≤ 这个点 ≤ 结束时间)都算巡视过了,划掉
4.重复第2步,直到所有考试都被覆盖

为什么这个策略是对的?
“关键思想”:最早结束的考试是最“紧急”的,如果你不选它的结束时间,它可能就没机会被覆盖了。

证明的核心:
假设最优解没选最早结束考试I₁的结束时间e₁
但I₁必须被覆盖,所以最优解肯定在I₁期间选了某个时间p
把p换成e₁:所有原来被p覆盖的考试,e₁也能覆盖(因为e₁更靠后)
所以换成e₁后不会更差,甚至可能更好

说白了:选最早结束的时间点“不亏”,而且可能是“最赚”的。

时间复杂度
排序需要O(n log n)时间(这是大头)
后面一遍扫描O(n)
总共O(n log n)

2.我对贪心算法的理解

贪心算法就是:眼前最优,一路走到黑。

贪心算法的“性格”
优点:
-简单直接,不绕弯子
-速度快,不想太多
-代码通常很短

缺点:
-有点“短视”,可能为了眼前利益错过更好的全局方案
-不是所有问题都能用
-用错了会翻车

什么时候能用贪心?
两个条件必须满足:
1.贪心选择性质:局部最优能导致全局最优(做了选择不后悔)
2.最优子结构:大问题的最优解包含小问题的最优解

和其他算法的关系

  • vs 动态规划:贪心更“果断”,选了就不回头;动态规划更“谨慎”,会记录各种可能
  • vs 回溯:贪心一条路走到底;回溯会试错、会回头

个人体会
贪心算法教我们:有些问题,想太多反而不好。只要你能证明“眼前最好的选择就是全局最好的选择”,那就大胆地一路贪心下去。
但关键证明:你怎么知道这个选择不会在未来吃亏?很多贪心算法题难就难在证明上,代码反而简单。
就像这个作业选点问题:直觉上选最早结束的时间点很合理,但你需要严格证明它不会导致后续需要更多点。

posted on 2025-12-26 16:44  陈祉夷  阅读(2)  评论(0)    收藏  举报