kafkahaomei

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1. 选点问题分析
    问题描述
    给定n个区间[lᵢ, rᵢ],选择最少的点,使得每个区间至少包含一个点。
    我的贪心策略
    我采用按右端点排序的贪心策略:
    算法步骤:
  2. 将所有区间按右端点从小到大排序
  3. 初始化选择的点集为空,计数器count=0
  4. 遍历排序后的区间:
    如果当前区间不包含任何已选择的点
    则选择当前区间的右端点作为新点
    计数器加1
  5. 返回计数器count
    证明贪心选择性质
    定义
    设区间集S按右端点排序:r₁ ≤ r₂ ≤ ... ≤ rₙ
    设OPT是最优解的点集
    设ALG是按上述算法得到的点集
    证明:
    定理1(贪心选择性质):存在一个最优解,其第一个点选择r₁。
    证明:
    设OPT是一个最优解,p₁是OPT中编号最小的点。
  6. 如果p₁ = r₁,定理成立
  7. 如果p₁ < r₁:
    由于r₁是第一个区间的最右端点,区间[l₁, r₁]必须包含一个点
    p₁在[l₁, r₁]中,且p₁ < r₁
    将p₁替换为r₁,所有包含p₁的区间仍然被覆盖
    得到的新解仍然是可行的,且点数不变
  8. 如果p₁ > r₁:
    p₁不在区间[l₁, r₁]中,矛盾(因为OPT必须覆盖所有区间)
    因此,存在最优解以r₁为第一个点。
    定理2(最优子结构):设S'是不被点r₁覆盖的剩余区间集合,则原问题的最优解包含子问题S'的最优解。
    证明:
    设原问题的最优解为OPT,包含点r₁。
    删除所有包含r₁的区间后,剩余区间集为S'。
    OPT中除r₁外的点构成S'的一个覆盖。
    由于OPT是最优的,这些点也是S'的最优覆盖。
    定理3(算法正确性):通过数学归纳法
    基础:当n=1时,选择r₁显然最优
    归纳:假设对前k-1个区间算法最优
    对前k个区间,算法选择r₁,然后递归解决S'
    由定理1和2,这构成整体最优解
    时间复杂度分析
    设n为区间数量:
  9. 排序阶段:O(n log n)
    使用快速排序或归并排序
  10. 扫描阶段:O(n)
    只需遍历一次排序后的区间
  11. 总时间复杂度:O(n log n)
    排序是主要开销
    空间复杂度:
    O(n):存储区间数据
    O(1):额外空间(不考虑输入存储)
  12. 对贪心算法的理解
    基本概念
    贪心算法是一种局部最优导向全局最优的算法设计范式。它在每一步都做出在当前状态下看起来最好的选择,希望这样的局部最优选择能导致全局最优解。
    核心特征
  13. 局部最优选择:每一步只考虑当前最优,不考虑长远影响
  14. 无后效性:一旦做出选择,不再改变
  15. 自顶向下:从初始问题出发,逐步做出选择
    贪心算法的三要素
  16. 贪心选择性质
    定义:所求问题的整体最优解可以通过一系列局部最优选择达到。
    关键:可以通过贪心选择来构造最优解,且每一步的选择只依赖于之前的选择,不依赖于将来的选择。
    证明方法:
    交换论证:证明可以用贪心选择替换最优解中的选择
    归纳法:数学归纳证明
    拟阵理论:某些问题可形式化为拟阵贪心
  17. 最优子结构
    定义:问题的最优解包含其子问题的最优解。
    意义:保证了贪心选择的递归正确性。一旦做出贪心选择,剩余问题与原问题具有相同结构。
  18. 贪心策略
    定义:确定每一步如何选择的具体规则。
    常见策略:
    最短路径:Dijkstra算法(选择当前距离最小的点)
    最小生成树:Prim算法(选择连接树的最小边)
    区间问题:按端点排序
    哈夫曼编码:合并频率最小的节点
posted on 2025-12-22 20:50  卡芙卡豪美  阅读(0)  评论(0)    收藏  举报