贪心算法python

贪心算法的基本概念

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优(即局部最优)的决策,从而希望导致全局最优解的算法策略。贪心算法通常用于解决最优化问题,如最短路径、最小生成树、任务调度等。

贪心算法的特点

  • 局部最优选择:每一步都选择当前最优解,不考虑后续步骤的影响。
  • 无后效性:当前的选择不会影响后续步骤的选择。
  • 高效性:通常时间复杂度较低,适合解决大规模问题。
  • 不保证全局最优:在某些问题中,贪心算法可能无法得到全局最优解。

贪心算法的适用条件

贪心算法适用于满足以下两个条件的问题:

  1. 贪心选择性质:问题的全局最优解可以通过一系列局部最优选择得到。
  2. 最优子结构:问题的最优解包含其子问题的最优解。

贪心算法的经典问题

1. 活动选择问题

给定一组活动,每个活动有开始时间和结束时间,要求选择尽可能多的互不重叠的活动。

贪心策略:每次选择结束时间最早的活动。

python 复制代码
def activity_selection(start, finish):
    activities = list(zip(start, finish))
    activities.sort(key=lambda x: x[1])
    selected = [activities[0]]
    last_finish = activities[0][1]
    
    for activity in activities[1:]:
        if activity[0] >= last_finish:
            selected.append(activity)
            last_finish = activity[1]
    return selected
2. 霍夫曼编码

霍夫曼编码是一种用于数据压缩的贪心算法,通过构建最优前缀码来最小化编码长度。

贪心策略:每次合并频率最低的两个节点。

3. 最小生成树(Prim算法和Kruskal算法)

Prim算法和Kruskal算法都是贪心算法,用于构建图的最小生成树。

Prim算法:每次选择与当前树连接的最小权值边。

Kruskal算法:每次选择全局最小权值边,确保不形成环。

贪心算法的局限性

贪心算法并不总是能得到全局最优解。例如,在背包问题中,贪心算法可能无法得到最优解,除非问题满足特定条件(如分数背包问题)。

贪心算法的实现步骤

  1. 问题建模:将问题转化为适合贪心策略的形式。
  2. 选择贪心策略:确定每一步的局部最优选择标准。
  3. 验证贪心性质:确保贪心策略能导致全局最优解。
  4. 实现算法:编写代码实现贪心策略。

贪心算法与动态规划的区别

  • 贪心算法:每一步的选择不可回退,通常更高效。
  • 动态规划:保存子问题的解,避免重复计算,适用于有重叠子问题的情况。
相关推荐
hetao173383712 分钟前
2026-09-01~09-04 hetao1733837 的刷题记录
c++·算法
Evand J30 分钟前
【MATLAB例程,图像滤波5】 反谐波均值滑动窗口滤波(CHMF)图像降噪与质量评价,附代码下载链接
图像处理·算法·计算机视觉·matlab·均值算法·滑动窗口滤波·均值滑动
血小板要健康1 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
a187927218311 小时前
【算法】回溯算法(三):三记重锤与 N 皇后——记忆化、状态设计与三层漏斗
算法·leetcode·go·剪枝·回溯·n皇后·算法讲解
HugoStudio_SWAN3 小时前
洛谷 P1420 / P1179 / B4262 最长连号、数字统计与词频统计——统计的三种面孔
c++·学习·程序人生·算法
青 春 记 忆4 小时前
LeetCode 350. 两个数组的交集 II|Python 解法详解
python·算法·leetcode
阳明山水4 小时前
销量预测2025—2026:从模型竞赛到系统融合的范式转型
人工智能·深度学习·算法·机器学习·架构
桐盛科技5 小时前
拒绝“漂绿”风险:基于边缘计算的碳排放数据清洗算法与实时校验逻辑
人工智能·算法·边缘计算
Tongzhi20265 小时前
通芝科技考勤软件三大发展趋势:AI大模型、无感识别与数据底座
大数据·科技·算法·爬山算法
eBest数字化转型方案5 小时前
Route Optimization for FMCG:多目标排线算法的工程实现
大数据·人工智能·算法