带你读《图解算法小抄》二十二、贪心算法(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

相关文章
|
2月前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
66 2
|
7月前
|
算法 C++ Python
数据结构与算法===贪心算法
数据结构与算法===贪心算法
|
3月前
|
算法 Java C++
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
【贪心算法】算法训练 ALGO-1003 礼物(C/C++)
|
4月前
|
算法 前端开发
一文了解贪心算法和回溯算法在前端中的应用
该文章深入讲解了贪心算法与回溯算法的原理及其在前端开发中的具体应用,并通过分析LeetCode题目来展示这两种算法的解题思路与实现方法。
|
5月前
|
算法
【算法】贪心算法——柠檬水找零
【算法】贪心算法——柠檬水找零
|
5月前
|
算法
【算法】贪心算法简介
【算法】贪心算法简介
128 0
|
6月前
|
算法 Python
Python算法高手进阶指南:分治法、贪心算法、动态规划,掌握它们,算法难题迎刃而解!
【7月更文挑战第10天】探索Python算法的精华:分治法(如归并排序)、贪心策略(如找零钱问题)和动态规划(解复杂问题)。通过示例代码揭示它们如何优化问题解决,提升编程技能。掌握这些策略,攀登技术巅峰。
153 2
|
6月前
|
存储 算法 Python
Python算法界的秘密武器:分治法巧解难题,贪心算法快速决策,动态规划优化未来!
【7月更文挑战第9天】Python中的分治、贪心和动态规划是三大关键算法。分治法将大问题分解为小问题求解,如归并排序;贪心算法每步选局部最优解,不保证全局最优,如找零钱;动态规划存储子问题解求全局最优,如斐波那契数列。选择合适算法能提升编程效率。
76 1
|
6月前
|
存储 算法 大数据
Python算法高手的必修课:深入理解分治法、贪心算法、动态规划,让你的代码更智能!
【7月更文挑战第9天】在Python算法学习中,分治法(如归并排序)将大问题分解为小部分递归解决;贪心算法(如货币找零)在每步选择局部最优解尝试达到全局最优;动态规划(如斐波那契数列)通过存储子问题解避免重复计算,解决重叠子问题。掌握这三种方法能提升代码效率,解决复杂问题。
60 1
|
6月前
|
算法 索引 Python
逆袭算法界!Python分治法、贪心算法、动态规划深度剖析,带你走出算法迷宫!
【7月更文挑战第8天】分治法,如快速排序,将大问题分解并合并解;贪心算法,选择局部最优解,如活动选择;动态规划,利用最优子结构避免重复计算,如斐波那契数列。Python示例展示这些算法如何解决实际问题,助你精通算法,勇闯迷宫。
54 1

热门文章

最新文章