贪心算法、分治算法和动态规划的区别

(1)分治法(divide and conquer method)

将原问题划分成若干个规模较小而结构与原问题相似的子问题,递归的解决这些子问题,然后再合其结果,就得到原问题的解。

特征:

  • 该问题的规模缩小到一定的程度就很容易解决
  • 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质
  • 利用该问题分解出的子问题的解可以合并为该问题的解;
  • 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题

(2)动态规划(dynamic programing method)

与分治法相似,也是通过组合子问题的解而解决整个问题。区别是,动态规划适用于分解得到的子问题往往不是相互独立的(重叠的子问题)。在这种情况下如果采用分治法,有些子问题会被重复计算多次,动态规划通过记录已解决的子问题,可以避免重复计算。

要素:最优子结构、重叠子问题

(3)贪心法(greedy method)

贪心在解决问题的策略上目光短浅,只根据当前已有的信息就做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。换言之,贪心法并不是从整体最优考虑,它所做出的选择只是在某种意义上的局部最优。这种局部最优选择并不总能获得整体最优解(Optimal Solution),但通常能获得近似最优解(Near-Optimal Solution)。

要素:贪心选择性质、最优子结构性质

动态规划的核心,先计算子问题,再由子问题计算父问题

贪心选择性质:一个全局最优解可以通过局部最(贪心)选择来达到。

1)分治法和动态规划法的区别

​ 共同点:二者都要求原问题具有最优子结构性质,都将原问题分成若干个子问题,然后将子问题的解合并,形成原问 题的解。

​ 不同点:动态规划法是将待求解问题分解成若干个相互重叠的子问题,而分治法是分解成若干个互不相交的子问题。利用分治法求解,这些子问题的重叠部分被重复计算多次。而动态规划法将每个子问题只求解一次并讲其保存在一个表格中,当需要再次求解此子问题时,只是简单地通过查表获得该子问题的解,从而避免了大量的重复计算。

动态规划适用于分解得到的子问题往往不是相互独立的。在这种情况下如果采用分治法,有些子问题会被重复计算多次,动态规划通过记录已解决的子问题,可以避免重复计算

2)动态规划法和贪心法的区别

共同点:

贪心算法和动态规划算法都要求问题具有最优子结构性质

不同点:

动态规划算法中,每步所做的选择往往依赖于相关子问题的解,因而只有在解出相关子问题时才能做出选择。

而贪心算法,仅在当前状态下做出最好选择,即局部最优选择,然后再去解做出这个选择后产生的相应的子问题。

贪心无法解决动态规划的问题,但是动态规划能解决贪心的问题。虽然能够应用贪心算法一定能够应用动态规划法,但是一般来说,贪心算法的效率高于动态规划法,因而还是应用贪心算法。

动态规划算法通常以自底向上的方式解各子问题,而贪心算法则通常以自顶向下的方式进行,以迭代的方式作出相继的贪心选择,每做一次贪心选择就将所求问题简化为规模更小的子问题。

贪心算法、分治算法和动态规划的区别相关推荐

  1. 五大常用经典算法—分治算法

    原文作者:bigsai 原文地址:五大常用算法:一文搞懂分治算法 目录 前言 分治算法介绍 分治算法经典问题 二分搜索 快速排序 归并排序(逆序数) 最大子序列和 最近点对 结语 前言 分治算法(di ...

  2. 五大常用算法——分治算法详解及经典例题

    一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最后子 ...

  3. 数据结构与算法--分治算法-最大子序列和问题

    分治算法 用于设计算法的一种常用技巧–分治算法(divide and conquer).分治算法由两部分组成: 分(divide):递归然后借机较小的问题(基础情况除外) 治(conquer):然后从 ...

  4. 算法- 分治算法(实现汉诺塔)

    package Algorithm.dac;public class Hannoitower {public static void main(String []args){hannoiTower(5 ...

  5. 比赛赛程安排算法--分治算法

    问题在注释中已说明,直接贴代码! /** bisaisaicheng.c** Created on: Nov 30, 2013* Author: bing** 每个选手必须与其他所有选手进行一次比赛, ...

  6. delaunay三角剖分算法——分治算法概述与实现1

    参考网址: https://www.cnblogs.com/zhiyishou/p/4430017.html https://www.cnblogs.com/soroman/archive/2007/ ...

  7. 数据结构与算法 / 分治算法

    一.本质 分而治之.将原问题拆分成 n 个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到了原问题的解. 二.实际应用 1.归并排序. 2.10 G的数据进行排序,而 ...

  8. 分治算法,动态规划算法和贪心算法的区别和联系

    分治算法,动态规划算法和贪心算法的区别和联系 (一)分治算法 分治算法为什么叫分治算法? 分治这个名字可以分成两部: 第一部分是分,表示把一个原问题分解成很多个小问题,逐个解决; 第二部分是治, 表示 ...

  9. 【Java -- 算法】分治算法、动态规划、回溯法、贪心算法

    前言 一句话理解四种算法思想 分治:分而治之,先解决子问题,再将子问题的解合并求出原问题. 贪心:一条路走到黑,选择当下局部最优的路线,没有后悔药. 回溯:一条路走到黑,手握后悔药,可以无数次重来.( ...

  10. 「五大常用算法」一文图解分治算法和思想

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 前言 分 ...

最新文章

  1. 2022-2028年中国金融安防行业深度调研及投资前景预测报告
  2. 如何在Vim中复制到剪贴板?
  3. 硬盘提示RAW的文件找回方法
  4. Codis的dashboard异常退出后,重新启动报异常的处理方法
  5. 数据交换格式Json与XML
  6. I00005 打印直角三角形字符图案
  7. python启蒙视频_python启蒙阶段
  8. C++ 读取结束的判断
  9. Android NDK: WARNING: Ignoring unknown import directory:错误解决方法
  10. expect免互交 常用编辑文本
  11. Spring Cloud Stream
  12. 20191216每日一句
  13. python存钱挑战_案例(4):52周存钱法
  14. Ubuntu打开wps文件缺少字体
  15. 锚文本链接用html怎么做,锚文本链接是什么?
  16. C# 更换微信小程序码中间的logo图层
  17. 直播中常用的美颜sdk动态贴纸功能是什么?技术怎么实现的?
  18. 关于Node里面的pause和pauseSchedulerAndActions
  19. css 毛玻璃_我写CSS的常用套路(附demo的效果实现与源码)
  20. 多益网络2020笔试题

热门文章

  1. 网络推广都有那些平台
  2. echarts折线图动态多条线
  3. OpenSSL简单使用
  4. php文章内链教程,怎么给文章关键词自动添加内链链接? - WordPress教程
  5. Python pandas 实现无缝衔接Bokeh
  6. 2023北京旅行计划 2023带父母北京旅行计划
  7. Google Play集成介绍
  8. GPU渲染管线之旅|04 纹理和采样
  9. Linux中安装的mysql查不到配置文件my.cnf
  10. Collections.sort方法对list排序的两种方式