【算法导论】贪心算法,递归算法,动态规划算法总结
一般实际生活中我们遇到的算法分为四类:
一>判定性问题
二>最优化问题
三>构造性问题
四>计算性问题
而今天所要总结的算法就是着重解决 最优化问题
《算法之道》对三种算法进行了归纳总结,如下表所示:
标准分治 |
动态规划 |
贪心算法 |
|
适用类型 |
通用问题 |
优化问题 |
优化问题 |
子问题结构 |
每个子问题不同 |
很多子问题重复(不独立) |
只有一个子问题 |
最优子结构 |
不需要 |
必须满足 |
必须满足 |
子问题数 |
全部子问题都要解决 |
全部子问题都要解决 |
只要解决一个子问题 |
子问题在最优解里 |
全部 |
部分 |
部分 |
选择与求解次序 |
先选择后解决子问题 |
先解决子问题后选择 |
先选择后解决子问题 |
分治算法特征:
1)规模如果很小,则很容易解决。//一般问题都能满足
2)大问题可以分为若干规模小的相同问题。//前提
3)利用子问题的解,可以合并成该问题的解。//关键
4)分解出的各个子问题相互独立,子问题不再包含公共子问题。 //效率高低
【一】动态规划:
依赖:依赖于有待做出的最优选择
实质:就是分治思想和解决冗余。
自底向上(每一步,根据策略得到一个更小规模的问题。最后解决最小规模的问题。得到整个问题最优解)
特征:动态规划任何一个i+1阶段都仅仅依赖 i 阶段做出的选择。而与i之前的选择无关。但是动态规划不仅求出了当前状态最优值,而且同时求出了到中间状态的最优值。
缺点:空间需求大。
【二】贪心算法:
依赖:依赖于当前已经做出的所有选择。
自顶向下(就是每一步,根据策略得到一个当前最优解。传递到下一步,从而保证每一步都是选择当前最优的。最后得到结果)
【三】分治算法:
实质:递归求解
缺点:如果子问题不独立,需要重复求公共子问题
转载于:https://www.cnblogs.com/JPAORM/archive/2011/11/29/2510080.html
【算法导论】贪心算法,递归算法,动态规划算法总结相关推荐
- 【算法导论06】递归算法-perm算法
06递归算法-perm算法 问题描述: 给定一个含有n个数字的序列,设计算法对该序列进行全排列. 思路分析: 对n个数字序列进行全排列,最简单的思考方式是将n个数字依次作为序列的开头,得到n个n维序列 ...
- 算法导论之图的基本算法
图是一种数据结构,有关图的算法是计算机科学中基础性的算法.这个论述恰如其分. 图的基本算法包括图的表示方法和图的搜索方法.图的搜索技术是图算法领域的核心,有序地沿着图的边访问所有顶点,可以发现图的结构 ...
- 【算法导论学习-29】动态规划经典问题02:最长公共子序列问题(Longest common subsequence,LCS)...
2019独角兽企业重金招聘Python工程师标准>>> 问题描述:序列X={x1,x2,-,xn},Y={y1,y2,-,yn},当Z={z1,z2-,zn}是X的严格递增下标顺序( ...
- 《算法导论》15章-动态规划 15.1 钢条切割(含有C++代码)
一.引入 动态规划方法通常用来求解最优化问题(optimizationproblem).这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解.我们称这样的解为问 题 ...
- 程序员的算法课(5)-动态规划算法
前言 众所周知,递归算法时间复杂度很高为(2^n),而动态规划算法也能够解决此类问题,动态规划的算法的时间复杂度为(n^2).动态规划算法是以空间置换时间的解决方式. 一.什么是动态规划 动态规划(D ...
- 算法 64式 8、动态规划算法整理_第1部分_1到15题
1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...
- 算法 64式 8、动态规划算法整理
1 算法思想 动态规划 1.1含义 把问题分解成多阶段或多个子问题,顺序求解各个子问题,最后一个子问题就是初始问题的解. 概念 阶段: 问题分成的顺序的几个环节.例如最长递增子序列中每个字符就是一个阶 ...
- 算法导论中C语言代码,算法导论-学习笔记与进度
算法导论 阅读进度 第一部分 基础知识 第一章 计算中算法的角色 Done 1.1 算法 输入与输出 算法可以解决哪些问题 数据结构 技术 一些比较难的问题 1.2 作为一种技术的算法 效率 算法和其 ...
- 算法导论 pdf_学习数据结构和算法最好的书是什么?
----------- 通知:如果本站对你学习算法有帮助,请收藏网址,并推荐给你的朋友.由于 labuladong 的算法套路太火,很多人直接拿我的 GitHub 文章去开付费专栏,价格还不便宜.我这 ...
- 算法导论——24.2 DAG最短路径算法java实现
介绍 Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题,但是对于DAG,可以有更加简化的算法去计算,使得时间复杂度更低. 针对DAG的特点,以拓扑排序为基础,提出了解 ...
最新文章
- 女士做软件测试的利弊有哪些?
- php发送指令,PHP发送AT指令实例代码
- Xamarin iOS项目找不到模拟器
- python+xlrd+echarts数据可视化demo
- 【bzoj3544】[ONTAK2010]Creative Accounting 前缀和+STL-set
- 【Linux】一步一步学Linux——dpkg-split命令(274)
- POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)
- mysql 动态加载数据库数据库连接,如何根据每个客户端动态连接mysql数据库?
- ArrayList与Vector的区别
- 手把手教你实现——Python文字(汉字)转语音教程,举一反三~
- 【汇编】DOS系统功能调用(INT 21H)
- 驾照-办理期满换驾驶证
- 使用Vue制作幻灯片
- Tcp/ip协议 详解
- 安卓java的提示错误怎么办_java – Android,如何从try的错误中显示一个对话框?...
- mysql—自增长和索引
- termux入门安装
- metalink简介
- 怎么理解CPU密集型和I/O密集型
- 天行数据图文类免费API接口列表
热门文章
- 【BZOJ】【3301】【USACO2011 Feb】Cow Line
- git clone加速(github加速)
- 4款最具影响力的自助式BI工具
- php和会计,财务跟会计有什么区别
- 基于simulink的光伏电站仿真_基于 Carsim 2016 和 Simulink的无人车运动控制联合仿真(二)...
- tomcat 启动需要java环境吗?_三分钟教你Windows环境下,如何设置Tomcat随机自动启动?...
- linux无缝升级的版本,Angular 1 和 Angular 2 集成:无缝升级的方法
- 不忽略空值null的聚合函数_sqlzoo 练习题答案 聚合函数 和 空值 部分
- python类加载_如何重新加载一个类在python shell?
- 自研分布式web漏洞扫描平台WDScanner