一般实际生活中我们遇到的算法分为四类:

一>判定性问题

二>最优化问题

三>构造性问题

四>计算性问题

而今天所要总结的算法就是着重解决 最优化问题

《算法之道》对三种算法进行了归纳总结,如下表所示:

标准分治

动态规划

贪心算法

适用类型

通用问题

优化问题

优化问题

子问题结构

每个子问题不同

很多子问题重复(不独立)

只有一个子问题

最优子结构

不需要

必须满足

必须满足

子问题数

全部子问题都要解决

全部子问题都要解决

只要解决一个子问题

子问题在最优解里

全部

部分

部分

选择与求解次序

先选择后解决子问题

先解决子问题后选择

先选择后解决子问题

分治算法特征:

1)规模如果很小,则很容易解决。//一般问题都能满足

2)大问题可以分为若干规模小的相同问题。//前提

3)利用子问题的解,可以合并成该问题的解。//关键

4)分解出的各个子问题相互独立,子问题不再包含公共子问题。 //效率高低

【一】动态规划:

依赖:依赖于有待做出的最优选择

实质:就是分治思想和解决冗余。

自底向上(每一步,根据策略得到一个更小规模的问题。最后解决最小规模的问题。得到整个问题最优解)

特征:动态规划任何一个i+1阶段都仅仅依赖 i 阶段做出的选择。而与i之前的选择无关。但是动态规划不仅求出了当前状态最优值,而且同时求出了到中间状态的最优值。

缺点:空间需求大。

【二】贪心算法:

依赖:依赖于当前已经做出的所有选择。

自顶向下(就是每一步,根据策略得到一个当前最优解。传递到下一步,从而保证每一步都是选择当前最优的。最后得到结果)

【三】分治算法:

实质:递归求解

缺点:如果子问题不独立,需要重复求公共子问题

转载于:https://www.cnblogs.com/JPAORM/archive/2011/11/29/2510080.html

【算法导论】贪心算法,递归算法,动态规划算法总结相关推荐

  1. 【算法导论06】递归算法-perm算法

    06递归算法-perm算法 问题描述: 给定一个含有n个数字的序列,设计算法对该序列进行全排列. 思路分析: 对n个数字序列进行全排列,最简单的思考方式是将n个数字依次作为序列的开头,得到n个n维序列 ...

  2. 算法导论之图的基本算法

    图是一种数据结构,有关图的算法是计算机科学中基础性的算法.这个论述恰如其分. 图的基本算法包括图的表示方法和图的搜索方法.图的搜索技术是图算法领域的核心,有序地沿着图的边访问所有顶点,可以发现图的结构 ...

  3. 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)...

    2019独角兽企业重金招聘Python工程师标准>>> 问题描述:序列X={x1,x2,-,xn},Y={y1,y2,-,yn},当Z={z1,z2-,zn}是X的严格递增下标顺序( ...

  4. 《算法导论》15章-动态规划 15.1 钢条切割(含有C++代码)

    一.引入 动态规划方法通常用来求解最优化问题(optimizationproblem).这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解.我们称这样的解为问 题 ...

  5. 程序员的算法课(5)-动态规划算法

    前言 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2).动态规划算法是以空间置换时间的解决方式. 一.什么是动态规划 动态规划(D ...

  6. 算法 64式 8、动态规划算法整理_第1部分_1到15题

    1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...

  7. 算法 64式 8、动态规划算法整理

    1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...

  8. 算法导论中C语言代码,算法导论-学习笔记与进度

    算法导论 阅读进度 第一部分 基础知识 第一章 计算中算法的角色 Done 1.1 算法 输入与输出 算法可以解决哪些问题 数据结构 技术 一些比较难的问题 1.2 作为一种技术的算法 效率 算法和其 ...

  9. 算法导论 pdf_学习数据结构和算法最好的书是什么?

    ----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...

  10. 算法导论——24.2 DAG最短路径算法java实现

    介绍 Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题,但是对于DAG,可以有更加简化的算法去计算,使得时间复杂度更低. 针对DAG的特点,以拓扑排序为基础,提出了解 ...

最新文章

  1. 女士做软件测试的利弊有哪些?
  2. php发送指令,PHP发送AT指令实例代码
  3. Xamarin iOS项目找不到模拟器
  4. python+xlrd+echarts数据可视化demo
  5. 【bzoj3544】[ONTAK2010]Creative Accounting 前缀和+STL-set
  6. 【Linux】一步一步学Linux——dpkg-split命令(274)
  7. POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)
  8. mysql 动态加载数据库数据库连接,如何根据每个客户端动态连接mysql数据库?
  9. ArrayList与Vector的区别
  10. 手把手教你实现——Python文字(汉字)转语音教程,举一反三~
  11. 【汇编】DOS系统功能调用(INT 21H)
  12. 驾照-办理期满换驾驶证
  13. 使用Vue制作幻灯片
  14. Tcp/ip协议 详解
  15. 安卓java的提示错误怎么办_java – Android,如何从try的错误中显示一个对话框?...
  16. mysql—自增长和索引
  17. termux入门安装
  18. metalink简介
  19. 怎么理解CPU密集型和I/O密集型
  20. 天行数据图文类免费API接口列表

热门文章

  1. 【BZOJ】【3301】【USACO2011 Feb】Cow Line
  2. git clone加速(github加速)
  3. 4款最具影响力的自助式BI工具
  4. php和会计,财务跟会计有什么区别
  5. 基于simulink的光伏电站仿真_基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(二)...
  6. tomcat 启动需要java环境吗?_三分钟教你Windows环境下,如何设置Tomcat随机自动启动?...
  7. linux无缝升级的版本,Angular 1 和 Angular 2 集成:无缝升级的方法
  8. 不忽略空值null的聚合函数_sqlzoo 练习题答案 聚合函数 和 空值 部分
  9. python类加载_如何重新加载一个类在python shell?
  10. 自研分布式web漏洞扫描平台WDScanner