贪心算法总结

一、基本思想

–>归纳、分析、选择正确合适的贪心策略

在每一个局部阶段,都做一个在当前“看上去”最优的决策,并期望通过每一次所做的局部最优选择产生出一个全局最优解。做出贪心决策的依据称为“贪心策略”。贪心策略一旦做出,就不可再更改。

二、3种证明方法(反证法,构造法,调整法)

1、反证法

用贪心的策略,依次构造出一个解 S1,假设最优解 S2 不同于S1,可以证明是矛盾的,从而得出 S1 就是最优解。(举出反例

eg:n个字符串凑成最大整数
->将 A+B 与 B+A 相比较,如果前者大于后者,则认为 A>B。

2、构造法

根据描述的算法,用贪心的策略依次构造出一个解,可证明一定是合法的解。即用贪心法找可行解。(举例子)

eg:取火柴游戏(博弈论)
->转成二进制后,进行异或。为0则先取必败;为1则先取必胜

3、调整法

用贪心的策略,依次构造出一个解 S1。假设最优解 S2 不同于 S1,找出不同之处,在不破坏最优性的前提下,逐步调整 S2,最终使其变为 S1,从而 S1 也是最优解。(调整a[i]和a[j]进行比较)

eg:排队接水
->把接水时间少的人尽可能排在前面

三、实时调整类贪心

–>每做一步决策都得重新调整决策

eg:桐桐的新闻系统
->将间隔从小到大排序,输出一个(出队)后将它加上间隔再入队

四、贪心的常见模型

  • 货币选择问题
    –>化异为同(先选面值大的,再选小的)
  • 区间调度问题
    –>以结束时间递增排序
  • 部分背包问题
    –>按照单位价值递减排序
  • 区间相关问题
    (1)选择不相交区间:
    数轴上有 n 个开区间。选择尽量多个区间,使得这些区间两两没有公共点。
    –>按照右端点递增排序
    (2)区间选点问题:
    数轴上有 n 个闭区间。取尽量少的点,使得每个区间内都至少有一个点。
    –>按照右端点递增排序&&左端点递减排序
    (3)区间覆盖问题:
    数轴上有 n 个闭区间,选择尽量少的区间覆盖一条指定线段。
    –>按照左端点递增排序
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在Python中,可以使用贪心算法来解决多种问题,如活动安排、哈夫曼编码、背包问题、最短路径、最优装载和最小生成树等。其中,活动安排问题是贪心算法的一个经典应用之一。贪心算法通过每一步选择局部最优解来达到全局最优解的目标。 关于Python实现贪心算法和活动安排问题,有一篇文章提供了详细的介绍和实例代码。这篇文章讨论了如何使用Python实现贪心算法解决活动安排问题,可以作为参考。 总结来说,Python可以用来实现贪心算法,并且可以通过贪心算法解决活动安排等一系列问题。如果你对Python实现贪心算法感兴趣,可以参考相关的资料和文章进一步学习和实践。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [greedy_哈夫曼编码_活动安排_背包问题_python_贪心算法_](https://download.csdn.net/download/weixin_42691388/27658494)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [浅谈Python实现贪心算法与活动安排问题](https://download.csdn.net/download/weixin_38623255/12871404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值