CS-Wiki CS-Wiki
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Redis
  • 设计模式
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Kafka
  • 校招扫盲
  • 项目推荐
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Redis
  • 设计模式
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Kafka
  • 校招扫盲
  • 项目推荐
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
  • 刷题模板汇总
  • 一些刷题小技巧
  • 整数 and 位运算

  • 数组

  • 链表

  • 哈希表

  • 字符串

  • 栈

  • 队列

  • 二叉树

  • 前缀树

  • 二分查找

  • 双指针法

  • 区间求和问题

  • 排序

  • 回溯算法

  • 贪心算法

    • 贪心算法理论基础
      • 1. 什么是贪心算法
      • 2. 贪心算法的基本要素
      • 3. 贪心算法和动态规划算法
      • 4. 贪心策略在图算法中的应用
    • 找零
    • 柠檬水找零
    • 分发饼干
    • K 次取反后最大化的数组和
    • 加油站
    • 分发糖果
    • 根据身高重建队列
    • 划分字母区间
    • 单调递增的数字
    • 监控二叉树
    • 使数组变成交替数组的最少操作数
    • 剑指 Offer 14- II - 剪绳子 II
    • 区间调度问题

  • 动态规划

  • 图

  • 数学

  • 自动机

  • 海量数据和空间限制

  • 05-数据结构与算法
  • 贪心算法
小牛肉
2022-03-20
目录

贪心算法理论基础

# 1. 什么是贪心算法

⭐ 贪心算法总是做出在当前看来是最优的选择,也就是说,贪心算法并不从整体最优上考虑,所作的选择只是局部最优选择。

虽然贪心算法不是对所有问题都能得到整体最优解,但对很多问题都能产生整体最优解,或者最优解的很好的近似解。

# 2. 贪心算法的基本要素

动态规划问题的两个基本性质:

  • 最优子结构
  • 子问题重叠性质

而贪心算法的两个基本性质:

  • 最优子结构

  • 贪心选择性质

    贪心选择性质是指:所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到

# 3. 贪心算法和动态规划算法

💡 贪心选择性质是贪心算法与动态规划算法的主要区别:

  • 在动态规划算法中,每步所做的选择依赖于相关子问题的解,所以只有解决相关子问题后,才能做出选择。
  • 而在贪心算法中,仅在当前状态下做出最好选择,即局部最优选择,再去解做出这个选择后产生的相应的子问题。也就是说,贪心算法所做的贪心选择可以依赖过去所做过的选择,但绝不依赖将来所作的选择,也不依赖子问题的解。

⭐ 正是由于这种差别,动态规划算法是自底向上的,而贪心算法是自顶向下的,以迭代的方式做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为规模更小的子问题。

# 4. 贪心策略在图算法中的应用

几个重要的图算法基本都使用了贪心策略,详细可见【图】相关章节

  • 单源最短路径:Dijkstra 算法

  • 最小生成树:

    • Prim 算法
    • Kruskal 算法

🎁 公众号

各位小伙伴大家好呀,叫我小牛肉就行,目前在读东南大学硕士,上方扫码关注公众号「飞天小牛肉」,与你分享我的成长历程与技术感悟~

帮助小牛肉改善此页面 (opens new window)
Last Updated: 2023/02/16, 11:27:10
向下的路径节点之和
找零

← 向下的路径节点之和 找零→

最近更新
01
关于编程满天星
02
让我来告诉你 Java 程序员是怎么一步一步从入行到被裁的
06-08
03
Vision Pro,未来已来
06-06
更多文章>
Theme by Vdoing | Copyright © 2019-2023 飞天小牛肉 | 皖ICP备2022008966号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式