4种算法思想比较与联系

如果将贪心,分治,回溯和动态规划四种算法思想分类,那贪心,回溯,动态规划可归为一类,而分治单独可以作为一类,因为它跟其他是三个都不大一样。
因为前三个算法解决问题的模型,都可以抽象成多阶段决策最优解模型,而分治算法解决问题尽管大部分也还是最优解问题,但大部分都不能抽象成多阶段决策模型。
回溯算法,是个万金油。基本上能用动态规划,贪心解决的问题,都可以用回溯算法解决。回溯算法相当于穷举搜索。穷举所有的情况,然后对比得到最优解。不过,回溯算法的时间复杂度非常高,是指数级别的,只能用来解决小规模数据的问题。对于大规模的数据问题,用回溯算法解决的执行效率很低。
动态规划算法,尽管比较回溯算法高效,但是,并不是所有问题都可以用动态规划来解决。能用动态规划解决的问题,需要满足三个特征:最优子结构,无后效性和重复子问题。在重复子问题这一点上,动态规划和分治算法的区分非常明显,分治算法要求分割成子问题,不能有重复字问题,而动态规划正好相反,动态规划之所以高效,就是因为回溯算法实现中存在大量的重复子问题。
贪心算法:实际上是动态规划算法中一种比较特殊情况。他解决问题更加高效,代码实现也更加简洁。不过,他可以解决的问题也更加有限。他能解决的问题需要满足三个条件,最优子结构,无后效性和贪心选择性
其中,最优子结构,无后效性跟动态规划中的无异。“贪心选择性”的意思是,通过局部最优的选择,能产生全局的最优选择。每个阶段,我们都选择当前看起来最优的决策,所以阶段的决策完成之后,最终由这些局部最优解构成全局最优解。

【数据结构与算法】【算法思想】【联系与区别】回溯 贪心 动态规划 分治相关推荐

  1. (王道408考研数据结构)第六章图-第四节5:最短路径之弗洛伊德算法(思想、代码、演示、答题规范)

    文章目录 一:动态规划基本思想 二:弗洛伊德(Floyd)算法基本思想 三:弗洛伊德(Floyd)算法代码实现 四:弗洛伊德(Floyd)算法代码视频演示 五:弗洛伊德(Floyd)算法代码答题规范 ...

  2. (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...

  3. (王道408考研数据结构)第六章图-第四节3:最短路径之BFS算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法基本思想 二:BFS算法代码 三:反思 最短路径shortestpath):主要有以下两类最短路径问题 单源最短路径问题:一个顶点到其他顶点最短路径 迪杰斯特拉算法(dijks ...

  4. (王道408考研数据结构)第六章图-第四节1:最小生成树之普利姆算法(思想、代码、演示、答题规范)

    文章目录 一:普利姆(Prim)算法算法思想 二:普利姆(Prim)算法注意点 三:普利姆(Prim)算法代码实现 四:普利姆(Prim)算法代码视频演示 五:普利姆(Prim)算法动画演示 六:普利 ...

  5. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-哈希表

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  6. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-堆和优先队列(一)

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

  7. 常用数据结构以及数据结构的排序算法

    2019独角兽企业重金招聘Python工程师标准>>> 数组 (Array) 在程序设计中,为了处理方便, 把具有相同类型的若干 变量按有序的形式组织起来.这些按序排列的同类数据元素 ...

  8. 数据结构与算法—最小生成树(Prim算法和Kruskal算法算法详解)

    前言 在数据结构与算法的图论中,(生成)最小生成树算法是一种常用并且和生活贴切比较近的一种算法.但是可能很多人对概念不是很清楚.我们看下百度百科对于最小生成树定义: 一个有 n 个结点的连通图的生成树 ...

  9. 【从蛋壳到满天飞】JS 数据结构解析和算法实现-集合和映射

    前言 [从蛋壳到满天飞]JS 数据结构解析和算法实现,全部文章大概的内容如下: Arrays(数组).Stacks(栈).Queues(队列).LinkedList(链表).Recursion(递归思 ...

最新文章

  1. 【转载】Asp.Net 全生命周期
  2. ksql中定义的本体在dataModel中不存在
  3. ORACLE HANDBOOK系列之九:时间与时区(Time and Time Zone)
  4. .frm_.myd_myi转换为.sql导入mysql数据库_把.frm,.myd,myi转换为.sql导入数据库
  5. php mysql 双条件排序,PHP-MySQL联合查询,按2个变量排序
  6. SmartFoxServer资料
  7. VC6重载字体对话框,去除颜色下拉框
  8. Flink 1.11 与 Hive 批流一体数仓实践
  9. 静态static java
  10. 4一20ma电流有源与无源区别_【知识分享】信号的有源与无源(2)
  11. 数据结构与算法 完整版单链表(附GIF)
  12. User Agent跨站攻击
  13. T-SQL常用日期函数
  14. 五一期间完成了某市交警系统的一个系统升级迁移项目
  15. Springboot使用@Scheduled多节点启动时调度重复执行
  16. laaS平台架构介绍
  17. 中央电大 c语言程序设计a 试题,最新中央电大2008年秋C语言程序设计A试题5.doc
  18. vdat文件怎么转成mp4文件
  19. 看看乔帮主留下的世界
  20. shell循环loop

热门文章

  1. 11.m进制转十进制
  2. 【c++ primer读书笔记】【第2章】变量和基本类型
  3. emacs中安装markdown-mode
  4. 又双叒叕 - 中国汉字的奇妙
  5. Android View生命周期
  6. mac安装mysql记录,使用zsh
  7. 微信公众号 模版消息 跳转到小程序报错{ errcode: 40013, errmsg: 'invalid appid hint: [cC6RwA09011295]' }
  8. c语言编写pdf,编写并运行C语言程序.pdf
  9. MySQL中count(*)用法
  10. ADO.NET多值查询