带你读《图解算法小抄》二十二、贪心算法(1)

简介: 带你读《图解算法小抄》二十二、贪心算法(1)

二十二、贪心算法

访问 www.coding-time.cn 阅读原文动画效果,体验更佳。


1.贪心算法


在计算机科学中,贪心算法(Greedy Algorithm)和动态规划(Dynamic Programming)是两种常见的算法设计策略。虽然它们都属于算法设计领域,但在解决问题时采用了不同的思路和方法。

1贪心算法

贪心算法是一种简单而直观的算法策略,它在每一步选择中都采取当前状态下最优的选择,以期望得到全局最优解。贪心算法的核心思想是每次都做出局部最优的选择,希望通过局部最优解的组合来达到全局最优解。

 

贪心算法的特点包括:

 

  • 贪心选择性质:每次选择局部最优解,不考虑全局最优解。
  • 无后效性:当前的选择不会影响以后的选择。
  • 子问题最优性:通过局部最优解来求解整体最优解。

贪心算法通常适用于满足贪心选择性质和无后效性的问题,而不是所有问题都适合使用贪心算法。因为贪心算法往往忽略了问题的整体结构,可能无法得到全局最优解。

2动态规划

动态规划是一种将复杂问题分解成简单子问题并进行逐步求解的策略。它将问题划分为若干个子问题,并保存子问题的解,以便在需要时进行查找和复用。动态规划的核心思想是通过记忆化存储中间结果,避免重复计算,以提高效率。

 

动态规划的特点包括:

  • 最优子结构:问题的最优解包含了子问题的最优解。
  • 重叠子问题:问题可以被分解为多个重叠的子问题。
  • 状态转移方程:通过定义递推关系来计算问题的解。

动态规划通常适用于满足最优子结构和重叠子问题性质的问题,它能够通过保存中间结果来避免重复计算,从而提高算法的效率。

3区别与选择

贪心算法和动态规划在算法设计策略上存在明显的区别。贪心算法在每个步骤都选择局部最优解,希望通过局部最优解的组合达到全局最优解。它通常比较简单且高效,但不能保证得到全局最优解。

 

相反,动态规划通过将问题分解为子问题,并保存子问题的解,以便在需要时进行查找和复用。它能够得到全局最优解,但相对而言更复杂且计算开销较大。

 

选择使用贪心算法还是动态规划取决于问题的特性。如果问题满足贪心选择性质和无后效性,且局部最优解能够导致全局最优解,那么贪心算法是一个不错的选择。但如果问题具有最优子结构和重叠子问题性质,并且问题规模较大,那么动态规划可能更适合。

4伪代码框架

以下是贪心算法和动态规划的伪代码框架示例,用于展示两种算法的基本结构和思路:

贪心算法伪代码框架

function greedyAlgorithm(problem) {
  initialize solution;
  while (solution is not complete) {
    make a greedy choice;
    update solution;
  }
  return solution;
}


带你读《图解算法小抄》二十二、贪心算法(2)https://developer.aliyun.com/article/1347852?groupCode=tech_library

相关文章
|
8月前
|
算法
算法:贪心算法的原理和基本思路
算法:贪心算法的原理和基本思路
|
19天前
|
算法
算法人生(3):从“贪心算法”看“战胜拖延”(完美主义版)
本文探讨了拖延症的一个常见原因——完美主义,并从贪心算法的角度提供启示。贪心算法通过局部最优决策逼近全局最优解,不保证全局最优,但寻求满意解。完美主义者的拖延源于高标准、过度关注细节、压力和时间管理困难。为解决这个问题,建议接受不完美,设定合理目标,追求良好效果,以及培养时间管理技巧。通过实例说明,调整心态和策略,可以提高工作效率并克服拖延。
|
19天前
|
算法 调度 C语言
算法--贪心算法
贪心算法是每次选择当前最优解,期望达到全局最优,适用于有最优子结构的问题。它不回退,与动态规划不同。适用于分数背包问题,但0-1背包问题可能无法保证最优解。常见应用包括找零、最小生成树、单源最短路径和任务调度。贪心算法步骤包括建模、分问题、求局部最优解及整合。尽管简单,但需谨慎评估是否适用,例如0-1背包问题可能需用动态规划求解。
21 1
|
19天前
|
算法 程序员
贪心算法(被黑心公司强迫写的降薪算法)
贪心算法(被黑心公司强迫写的降薪算法)
|
19天前
|
算法 调度 C++
[数据结构与算法]贪心算法(原理+代码)
[数据结构与算法]贪心算法(原理+代码)
|
19天前
|
人工智能 算法 Java
【算法设计与分析】— —单源最短路径的贪心算法
【算法设计与分析】— —单源最短路径的贪心算法
39 0
|
19天前
|
存储 算法 Java
【算法设计与分析】— —实现最优载的贪心算法
【算法设计与分析】— —实现最优载的贪心算法
35 1
|
19天前
|
存储 算法 Java
【算法设计与分析】— —实现活动安排问题的贪心算法。
【算法设计与分析】— —实现活动安排问题的贪心算法。
88 0
|
19天前
|
算法 调度 Python
Python高级算法——贪心算法(Greedy Algorithm)
Python高级算法——贪心算法(Greedy Algorithm)
241 3
|
19天前
|
存储 算法 程序员
【算法训练-贪心算法 一】买卖股票的最佳时机II
【算法训练-贪心算法 一】买卖股票的最佳时机II
38 0