动态规划和贪心法的区别

动态规划和贪心法的区别:1、解决的问题不同;2、能否获得最优解;3、算法复杂度不同。解决的问题不同是指,动态规划所需要解决的问题是一个大问题被划分为许多重叠的子问题,贪心算法解决的问题是当前时刻的最优选择对后续的决策所造成的影响是可估计的。

一、动态规划和贪心法的区别

1、解决的问题不同

  • 动态规划:动态规划所需要解决的问题是一个大问题被划分为许多重叠的子问题,子问题的解决可以被复用,因此动态规划需要处理的其实是子问题的最优解,然后根据子问题的最优解构建整体最优解。
  • 贪心法:贪心算法通常解决的问题是在做决策时,当前时刻的最优选择对后续的决策所造成的影响是可估计的,可以通过贪心策略来得到全局的最优解。这种策略是一种”即时”的策略,它做出的每个决策都必须是可行的,累计在一起才能得到整体最优解。

2、能否获得最优解

  • 动态规划:动态规划递归求解子问题并重用其解以避免重复计算,动态规划保证最优解,但速度较慢且更复杂。
  • 贪心法:贪心法在每一步都做出局部最优选择,而不考虑未来后果,贪心法通常更快更简单,但可能并不总是提供最优解。

3、算法复杂度不同

  • 动态规划:动态规划算法的时间复杂度和空间复杂度都相对较高,需要实现具体的算法优化,比如空间压缩等。
  • 贪心法:贪心算法通常比较简单,其时间复杂度可以做到线性级别,而且空间复杂度一般也比较低。

二、动态规划简介

动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。

动态规划的步骤:

  1. 定义子问题,即当前状态,也是需要存储的每个子问题的解。
  2. 找到问题到子问题的递推关系,即状态转移关系,一般表示为dp[i] = F(dp[i-1])。
  3. 确定计算顺序,并为状态数组进行初始化。
  4. 通过状态数组得到原问题的解。例如max(dp), dp[n-1]等形式。

三、贪心法简介

贪心算法是指从问题的初始状态出发,通过多次的贪心选择,最终得到整个问题的最优解。它是一种最接近人们日常思维的算法。由于贪心算法比较简单直观,因此在最优化问题中有着十分广泛的应用。

贪心策略通常只考虑当前局部最优策略,最终得到全局的最优解。这是由于问题本身包含特定的性质,保证了当前局部的贪心策略可以获得最优解。由于贪心的局部性,因此贪心算法往往比其他算法更加简单,易于实现。与此同时,一些直观的贪心策略虽然在局部是最优的,但是能否保证得到全局的最优解是贪心问题的关键。

​在实际问题中,贪心策略通常会将问题切分成不同的阶段,并通过一系列的贪心选择来得到一个问题的最优解,而每次的选择都是当前状态的一种最优选择,即贪心选择,然后问题被转化成一个相同形式的子问题。为了最终可以得到的最优解,贪心问题需要满足最优子结构和贪心选择的性质。最优子结构是指,一个问题的最优解包含其子问题的最优解;而贪心选择性质是指所求问题的整体最优解可以通过一系列的局部最优选择来达到,这两点就保证了贪心策略可以达到最优解。

求解过程:

  1. 将具体问题抽象成数学模型,并选择合适的贪心策略;
  2. 将要求解的问题分成若干个子问题;
  3. 寻求每个子问题的局部最优解;
  4. 将局部最优解整合得到全局最优解。

延伸阅读

贪心法求解的问题的特征

  1. 贪心选择性质:一个问题的整体最优解可通过一系列局部的最优解的选择达到,并且每次的选择可以依赖以前作出的选择,但不依赖于后面要作出的选择。这就是贪心选择性质。对于一个具体问题,要确定它是否具有贪心选择性质,必须证明每一步所作的贪心选择最终导致问题的整体最优解。
  2. 最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用贪心法求解的关键所在。在实际应用中,至于什么问题具有什么样的贪心选择性质是不确定的,需要具体问题具体分析。

文章标题:动态规划和贪心法的区别,发布者:Z, ZLW,转载请注明出处:https://worktile.com/kb/p/49296

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Z, ZLWZ, ZLW站长
上一篇 2023年4月14日
下一篇 2023年4月14日

相关推荐

  • 面向过程和面向对象的区别是什么

    面向对象与面向过程的区别如下:面向对象和面向过程都可以实现代码重用和模块化编程,但是面向对象的模块化更深,数据更封闭,也更安全,因为面向对象的封装性更强。面对对象的思维方式更加贴近于现实生活,更容易解决大型的复杂的业务逻辑。 一、区别 面向对象和面向过程都可以实现代码重用和模块化编程,但是面向对象的…

    2023年2月13日
    19300
  • 什么软件记工时最好

    记工时软件有:1、Toggl;2、RescueTime;3、 Clockify;4、Everhour。Toggl是一款功能强大的在线工时记录软件,能够方便地记录员工的时间和任务。该软件提供了简单易用的界面,使您可以快速开始记录时间。您可以在Toggl内创建项目和任务,然后开始计时。 1、Toggl …

    2023年2月27日
    10800
  • a标签是什么意思

    a标签定义超链接,用于从一个页面链接到另一个页面,a元素最重要的属性是 href 属性,它指定链接的目标。a标签的使用方法有:1、页面跳转;2、锚点链接;3、下载文件;4、创建email链接;5、创建Tel链接等。页面跳转是最常用的方法。 一、a标签的含义 a是HTML语言标签。a标签定义超链接,用…

    2023年3月17日
    24400
  • 哪些数据库适合聊天记录的管理,比较优缺点

    适合聊天记录管理的数据库有:一、MySQL;二、MongoDB;三、PostgreSQL;四、Redis。MySQL是一种开源的关系型数据库管理系统,被广泛用于Web应用程序和中小型企业。MySQL使用SQL语言进行数据管理,支持高并发和可扩展性。对于聊天记录管理,MySQL是一个不错的选择。 一、…

    2023年6月11日
    73000
  • apm是什么

    APM,全称可以为“应用性能管理”(Application Performance Management)或者“每分钟操作数”(Actions Per Minute),分别对应:1、应用性能管理的定义;2、每分钟操作数的解释;3、APM的应用。在IT领域,”应用性能管理”是用…

    2023年8月7日
    16600
  • Linux,数据库,适合干什么

    Linux是一种开源操作系统,适用于服务器、嵌入式系统、开发环境。数据库是用于存储、检索和管理组织化数据的软件系统,适用于任何需要管理大量数据的业务,如电子商务、健康医疗、金融。Linux的开放性和灵活性使其成为许多开发者的优选操作系统;数据库的高效数据管理则是现代业务运营的核心。 1、Linux …

    2023年7月12日
    14900
  • 好用的知识库管理系统有哪些

    这里整理了国内外较好用的10款知识库管理系统,适用对象从团队到个人,他们分别是:1、PingCode Wiki;2、Baklib;3、有道云笔记;4、印象笔记;5、RemNote;6、石墨文档;7、Notion;8、语雀;9、幕布;10、Obsidian。具体功能我们将在文章中介绍。 一、团队知识库…

    2022年3月18日
    1.1K00
  • jira如何实现项目管理

    jira做项目管理包括以下几点:需求管理;Sprint Planning;Sprint阶段;Sprint结束;发布上线。需求管理是由产品经理PO提出确定需要做的需求,然后在JIRA里自己的项目下,建立需求Issue,指派给PO。如果需求比较小,则建立需求的Issue类型选择Story。 需求管理 由…

    2023年3月30日
    25300
  • 产品质量管理流程目的

    产品质量管理流程目的有:1、树立企业形象;2、增强客户信心,扩大市场份额;3、改善现有管理加强质控,降低成本;4、销售管理。其中,树立企业形象是指,强化、规范企业管理,在宏观上树立优良企业形象,为企业发展创造良好的外部环境。 一、产品质量管理流程目的 1、树立企业形象 强化、规范企业管理,在宏观上树…

    2023年4月18日
    19800
  • WMS、ERP、进存销软件,三者到底有什么区别

    WMS、ERP、进销存软件都包含仓库管理模块,这是这三个软件的最大共性。仓储管理(包括原料、半成品、成品管理)又恰恰是多数企业内部管理中最重要的部分:采购、生产、销售都是以库存管理为连接点,库存也是生产企业的最重要的成本。 一、功能上的共性 WMS、ERP、进销存软件都包含仓库管理模块,这是这三个软…

    2023年5月7日
    8300

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部