贪心算法,递归算法,动态规划算法比较与总结

算法设计与分析练习题 第一章 下列关于算法的说法中正确的有( )。 Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 Ⅳ.算法执行后一定产生确定的结果 A. 1 个 B.2 个 C.3 个 D.4 个 T(n)表示当输入规模为 n 时的算法效率,以下算法效率最优的是( )。 A.T(n)= T(n-1)+1,T(1)=1 B.T(n)= 2n2 C.T(n)= T(n/2)+1,T(1)=1 D.T(n)=3nlog2n 什么是算法?算法有哪些特征? 证 阅读详情

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

       一>判定性问题

       二>最优化问题

       三>构造性问题

       四>计算性问题

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

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

 

 

标准分治

动态规划

贪心算法

适用类型

通用问题

优化问题

优化问题

子问题结构

每个子问题不同

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

只有一个子问题             

最优子结构

不需要

必须满足

必须满足

子问题数

全部子问题都要解决

全部子问题都要解决

只要解决一个子问题

子问题在最优解里

全部

部分

部分

选择与求解次序

先选择后解决子问题

先解决子问题后选择

先选择后解决子问题

 

分治算法特征:

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

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

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

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

【一】动态规划:

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

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

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

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

          缺点:空间需求大。

【二】贪心算法:

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

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

【三】分治算法:

        实质:递归求解

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

---------------------------------------------------------------------------------------------------------------------------

贪心算法:贪心算法采用的是逐步构造最优解的方法。在每个阶段,都在一定的标准下做出一个看上去最优的决策。决策一旦做出,就不可能再更改。做出这个局部最优决策所依照的标准称为贪心准则。

分治算法:分治法的思想是将一个难以直接解决大的问题分解成容易求解的子问题,以便各个击破、分而治之。 

动态规划:将待求解的问题分解为若干个子问题,按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。 

 

二、算法间的关联与不同 

1、分治算法与动态规划 

分治法所能解决的问题一般具有以下几个特征: 

① 该问题的规模缩小到一定程度就可以容易地解决。 

② 该问题可以分为若干个较小规模的相似的问题,即该问题具有最优子结构性质。 

③ 利用该问题分解出的子问题的解可以合并为该问题的解。

④ 该问题所分解出的各个子问题是相互独立的且子问题即之间不包含公共的子问题。 

上述的第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;

第二条特征是分治法应用的前提,它也是大多数问题可以满足的,此特征反映了递归思想的应用;

第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑贪心算法或动态规划算法;

第四条特征涉及到分治法的效率,如果各个子问题不是独立的,则分治法要做许多不必要的工作,重复地解公共的子问题。这类问题虽然可以用分治法解决,但用动态规划算法解决效率更高。 

当问题满足第一、二、三条,而不满足第四条时,一般可以用动态规划法解决,可以说,动态规划法的实质是: 分治算法思想+解决子问题冗余情况 

2、贪心算法与动态规划算法 

多阶段逐步解决问题的策略就是按一定顺序或一定的策略逐步解决问题的方法。分解的算法策略也是多阶段逐步解决问题策略的一种表现形式,主要是通过对问题逐步分解,然后又逐步合并解决问题的。     

贪心算法每一步都根据策略得到一个结果,并传递到下一步,自顶向下,一步一步地做出贪心决策。    

动态规划算法的每一步决策给出的不是唯一结果,而是一组中间结果,而且这些结果在以后各步可能得到多次引用,只是每走一步使问题的规模逐步缩小,最终得到问题的一个结果。

举例:如图1有一三角形数塔,求一自塔顶到塔底的路径,要求该路径上结点的值的和最大。 

 

贪心算法解题过程:自顶向下从第一层9开始,到第二层,选数值较大的15,第三层,在可选路径中选数值较大的8,同理,第四层选9,第五层选10,这样就确定了一条路径:9→15→8→9→10。 

动态规划算法接题过程:如图2,阶段1:自第五层开始,对经过第四层的2的路径,在第五层的19、7中选择数值较大的19,同理,对经过第四层18的路径,选10,对经过第四层9的路径,选10,对经过5的路径选16。

以上是一次决策过程,也是一次递推过程和降阶过程。因为以上的决策结果将5阶数塔问题变为4阶子问题,递推出第四层与第五层和为: 
         21(2+19),28(18+10),19(9+10),21(5+16) 
用同样的方法还可以将4阶数塔问题变为3阶数塔问题,……,最后得到1阶数塔问题,这样也确定了一条路径:9→12→10→18→10,就是真个问题的最优解。 

显然,以上数塔问题用贪心算法得不到最优解,这里只是用作与动态规划算法的比较。 


三、适用条件 
贪心算法:

①贪心选择性质:在求解一个问题的过程中,如果再每一个阶段的选择都是当前状态下的最优选择,即局部最优选择,并且最终能够求得问题的整体最优解,那么说明这个问题可以通过贪心选择来求解,这时就说明此问题具有贪心选择性质。

②最优子结构性质:当一个问题的最优解包含了这个问题的子问题的最优解时,就说明该问题具有最优子结构。 

分治算法:见二、算法间的关联与不同中的①②③④。 

动态规划:  

①最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。

②无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

③有重迭子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。 

四、优势:

采用动态规划方法,可以高效地解决许多用贪婪算法或分而治之算法无法解决的问题。

但贪心算法也有它的优势:构造贪心策略不是很困难,而且贪心策略一旦经过证明成立后,它就是一种高效的算法。

算法基础 - 枚举/递归/动归/深广搜/二分/贪心 笔记内容来源课程 https://www.coursera.org/learn/suanfa-jichu 枚举 概念 基于已有知识进行答案猜测的求解策略 对解集合中的每一项根据条件进行检验 不重复检验 很多情况下枚举意味着使用循环 一般性 + 完备性 分析 原子 - 局部 - 整体 拆分出原子操作,分析每个原子操作的影响、规律 确定枚举对象、范围和判定条件 逐一枚举可能的解并验... 阅读详情

相关推荐

帆软报表导出各种格式之后台导出

我们前面介绍了帆软报表在界面上的导出是通过类似的URL:http://localhost:8075/webroot/decision/view/report?op=export&sessionID=10653244-3e46-408c-bc54-f89a214a9bc7&format=image&extype=PNG 来完成的,就是带OP=export以及format参数来完成的。如果不从界面传参数,比如我们自己实现了一个HTTP接口,也可以通过传参数format来完成各种格式的导

帆软爱好者的专栏 4270

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

分治算法,动态规划算法和贪心算法的区别和联系 (一)分治算法 分治算法为什么叫分治算法? 分治这个名字可以分成两部: 第一部分是分,表示把一个原问题分解成很多个小问题,逐个解决; 第二部分是治, 表示把得到的子问题的解再合起来,得到原问题的解. 我们以归并排序为例子,来解释分治算法. 我们要对一整个数组排序,我们不妨可以对数组的左半边排序,再对右半边排序,对于左右半边的数组来说,我们仍然对其分成左右两半排序,以此类推,最后分的不能再分的时候,我们对最终得到的子问题进行解决,再把子问题的解一层一层地合并,最

CK1513710764的博客 6260

实战|2026美团&大众点评餐饮数据抓取:Playwright/Selenium反爬全攻略

核心结论:2026年美团&大众点评的反爬核心是“多维度风控”,需组合使用“住宅IP+设备指纹伪装+真人行为模拟+动态验证处理”,Playwright是最优工具,Selenium仅作为补充。效率优化:单机爬取速度建议控制在“每小时500-800条”,避免高频请求触发风控;分布式爬取需确保每个节点使用独立住宅IP,且行为轨迹不一致。扩展方向集成WASM解密工具,破解2026年美团的Token加密;用AI识别动态点选验证,提升验证通过率;对接大数据平台,对抓取的餐饮数据进行可视化分析。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2466

Gale-Shapley算法,匈牙利算法和KM算法三种匹配算法的总结

最近接触的匹配算法有三种:Gale-Shapley算法,匈牙利算法和KM算法 。 Gale-Shapley算法: 是用来求得一个稳定匹配使用的,它又称为 “ 求婚-拒绝算法 ”,可以说这个算法的名字起得也是非常知名达意了。 就拿男人向女人求婚打比方,为了使最后匹配得到的匹配集趋于稳定,就是说当前男人和女人的关系是相对稳定的,不会说存在两对男女,其中一对的男人和另一对的女人之间的好感比他们当前...

allenwakler的博客 4799

【报错】open /var/lib/docker/tmp/docker-import-863402796/bin/json: no such file or directory

然后,通过docker images可以看到镜像已经加载进来了。然后,通过docker images可以看到镜像已经加载进来了。

静谧、淡雅 6227

2024年11月架构设计师案例分析真题回顾,附参考答案、解析及所涉知识点(二)

软考高级系统架构设计师考试包含三个科目:信息系统综合知识、案例分析和系统架构设计论文。考试形式为机考。本文主要回顾2024年下半年(2024-11-10)系统架构设计师考试上午第二科案例分析的题目,同时附带参考解答、解析和所涉知识点。

一几文的编程学习笔记。 1664

四大算法思想:贪心,分治,回溯,动态规划

这里写目录标题1 贪心算法1.1 介绍1.2 案例(最短路径)2 分治算法2.1 介绍2.2 基本思想2.3 解题步骤2.4 应用场景2.5 分治与递归的联系2.6 案例(海量数据处理)2.6.1 题目要求2.6.2 解题思路3 回溯算法3.1 介绍3.2 解题步骤3.3 案例(八皇后问题)3.3.1 问题描述3.3.2 解题思路3.3.3 代码示例(Java)4 动态规划4.1 介绍4.2 应用场景 1 贪心算法 1.1 介绍 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择

sc179的博客 1万+

【NVIDIA GR00T N1 从入门到精通】第1章 环境搭建与基础配置 第2章 数据准备与格式转换

针对新型机器人形态的适配,需完成从硬件接口到数据模式的完整配置流程。创建modality_config.py文件自定义形态配置通过继承基类实现。配置类需实例化以下组件:状态模态定义(观测空间)、动作模态定义(动作空间)、相机模态定义(视觉输入)、可选的标注模态定义(语言指令或成功判定)。每个模态配置指定数据类型、形状、归一化统计量以及时序采样策略。状态模态配置状态配置的核心参数包括与。定义策略观测的历史时域窗口,对于高动态操作(如投掷、击打),需扩展历史窗口以捕捉运动趋势;

VectorShift的博客 96

数据结构算法--递归、分治、贪心、回溯和枚举详解

顾名思义,分而治之;将复杂大问题分成两个或多个相似小问题,各个子问题相互独立,先求解小问题,最后求解大问题。大问题复杂度过高,则分解为各个子问题,每个子问题寻找最优解,合并为全局解,全局解不一定最优。针对每一步搜索试探解决方案,如果不满足期望结果,则回溯回去重新选择。将问题所有可能的答案枚举,根据条件判断是否合适,合适则保留,否则丢弃。

jy18817386398的博客 1169

Ubuntu零基础入门到精通【3.10讲】:旧版本 Ubuntu 升级与迁移路线:从 20.04 到 24.04 的完整实战指南

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 1250

详细介绍用MATLAB实现基于A*算法的路径规划(附完整的代码,代码逐行进行解释)(一)--------A*算法简介和环境的创建

   本系列文章主要介绍基于A*算法的路径规划的实现,并使用MATLAB进行仿真演示。    一、 A*算法简介       A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。      公式表示为: f(n)=g(n)+h(n),其中, f(n) 是从初始状态经由状态n到目标状态的代价估计,g(n) 是在状态空间中从初始状态到状态n的实际代价,h(n) 是从状态n到目标状态的最佳路径的估计代价。

慕羽★的博客 7万+

什么是算法?算法设计有哪些基本方法?

代码简洁:直接递归的代码通常较为简洁,易于理解和实现。自然表达:对于某些问题,如树的遍历、图的搜索等,直接递归能够自然地表达问题的结构。

破损的天堂鸟博客 2738

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

贪心、递归、递推以及动态规划算法的分析与对比

PS:   头一次规规矩矩的按照论文的格式写文章,呵呵。虽然是小儿科的不能再小儿科的东西了。。不过。。也忽悠了6000多字~~嘿嘿。。肯定写的不好,第一次嘛。。所以。。接受大家一切批评哈!。。。文章NOI专刊的编辑正在审。。还不知道能不能发。。嘿嘿。。期待啊。。先发我BLOG里。。大家批评下。。       贪心、递归、递推以及动态规划算法的分析与对比 王喆 天

xyjikl 883

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

一般实际生活中我们遇到的算法分为四类: 一>判定性问题 二>最优化问题 三>构造性问题 四>计算性问题 而今天所要总结的算法就是着重解决 最优化问题 《算法之道》对三种算法进行了归纳总结,如下表所示: 标准分治 动态规划 贪心算法 适用类型 通用问题 优化问题 优化问题

小田的专栏 2670

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【动态规划和分治法以及贪心算法】

动态规划&&分治法&&贪心算法 动态规划 动态规划是一种算法思想,这总算法总是把一个大的问题分成若干个往往有着重叠的子问题,通过对子问题的求解来自底向上的得到大的问题的解。动态规划算法为了提高效率总是会在求解过程中用一个表格来记录中间解的值,这样遇到重叠的子问题时就可以直接查表而不用重复计算。而且,动态规划问题中,当前的结构由过去的结果得到,当前的选择却不受过去选择的影响。 可以用动态规划算法求解的问题必须拥有“最优子结构”和“重叠子问题”这两大性质。最优子结构的证明往往使用

qq_44492587的博客 1316

算法-智能算法/传统算法-多种算法介绍及异同点

一:描述分治法,贪心算法,动态规划算法,回溯算法,分支限界的基本思想,适用范围和应用 1.1分治法 1.1.1 基本思想 将规模为n的问题分解为k个规模较小的子问题,使这些子问题相互独立可分别求解,再将k个子问题的解合并成原问题的解.如子问题的规模仍很大,则反复分解直到问题小到可直接求解为止.在分治法中,子问题的解法通常与原问题相同,从而导致递归过程. 1.1.2 适用范围 该问题的规模缩小到一定的程度就可以容易地解决;该问题可以分解为若干个规模较小的相同问题;分解出...

数据挖掘+大数据研发+算法学习 3091

Python数据结构与算法-动态规划(钢条切割问题)

python数据结构与算法

little_limin的博客 1943

算法导论程序40--贪心算法(活动选择问题)

一个调度竞争共享资源的多个活动的问题,目标是选出一个最大的互相兼容的活动集合。 假定有一个n个活动的集合S={a1,a2,...,an},这些活动使用同一个资源,而这个资源在某个时刻只能供一个活动使用。 每个活动ai都有一个开始时间si和一个结束时间fi。其中0= 如果两个活动ai和aj满足[si, fi)和[sj, fj)不重叠,则称它们是兼容的。 在活动选择问题中,我们希望选出

勇气与行动 1368

算法设计与分析笔记

1.1贪心算法. 1.2蛮力算法. 1.3计算复杂度. 1.4货郎问题与计算复杂性. 1.5算法及时间复杂度. 1.6算法的伪码表示. 1.7函数的渐近的界. 1.8有关函数渐近的界的定理. 1.9几类重要的函数. 2.1序列求和的方法. 2.2递推方程与算法分析. 2.3迭代法求解递推方程. 2.4递归树. 2.5主方法(主定理) 3.1分治策略. 3.2递推方程的求解: 3.3芯片测试的分治算法. 3.4快速排序. 3.5幂乘问题(分...

Hdhdi的博客 1007
上一篇: 15道使用频率极高的基础算法题
下一篇: 《数据结构与算法分析》学习笔记
zero_china
博客等级 码龄16年 10粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值