分治算法,动态规划,贪婪算法以及递归之间的区别与联系

活动选择问题|贪婪算法-1 阅读详情

最近愈加感觉算法的重要性,所以想要在近期把一起常用的算法思想回顾学习一下。。。

感觉算法学了不少,但是总体上,大框架上一直没有搞清楚,今天看到一篇博客,感觉写的不错,有助于更好的理解这几个算法的之间的关系,也有利于之后的学习。

在很多算法书中都是把贪婪选择即贪心算法排在第一个讲述,继而再讨论分治策略和动态规划。其实,分治策略才是最基础的,动态规划、贪婪选择可以说是建立在其基础上的(算法导论中就按照分治策略、动态规划、贪婪选择的顺序来讲的)。那分治策略、动态规划、贪婪选择以及递归之间到底有啥联系与区别呢?

1、分治策略(Divide and Conquer)

   将原问题分解为若干个规模较小但类似于原问题的子问题(Divide),递归的求解这些子问题(Conquer),然后再合并这些子问题的解来建立原问题的解。因为在求解大问题时,需要递归的求小问题,因此一般用递归的思想实现,即自顶向下。

2、动态规划(Dynamic Programming)

   动态规划其实和分治策略是类似的,也是将一个原问题分解为若干个规模较小的子问题,递归的求解这些子问题,然后合并子问题的解得到原问题的解。区别在于这些子问题会有重叠,一个子问题在求解后,可能会再次求解,于是我们想到将这些子问题的解存储起来,当下次再次求解这个子问题时,直接拿过来就是。其实就是说,动态规划所解决的问题是分治策略所解决问题的一个子集,只是这个子集更适合用动态规划来解决从而得到更小的运行时间。即用动态规划能解决的问题分治策略肯定能解决,只是运行时间长了。因此,分治策略一般用来解决子问题相互对立的问题,称为标准分治,而动态规划用来解决子问题重叠的问题。

   动态规划一般由两种方法来实现,一种为自顶向下的备忘录方式,用递归实现,一种为自底向上的方式,用迭代实现。

3、贪心选择(Greedy Algorithm)

   贪心算法在每一步都做出局部最优的选择,寄希望这样的选择能导致全局最优解。对,只是寄希望,因此贪心算法并不保证得到最优解,但是它对很多问题确实可以得到最优解,而且运行时间更短。那什么时候可以用贪心算法呢?当该问题具有贪心选择性质的时候,我们就可以用贪心算法来解决该问题。

   贪心选择性质:我们可以通过做出局部最优(贪心)来构造全局最优。只要我们能够证明该问题具有贪心选择性质,就可以用贪心算法对其求解。比如对于0-1背包问题,我们用贪心算法可能得不到最优解(当然,也可能会得到最优解),但对于部分背包问题,则可以得到最优解,贪心算法可以作为0-1背包问题的一个近似算法。

4、总结

   分治策略一般用于解决子问题相互独立的情况,一般用递归实现;而动态规划则用户解决子问题有重叠的情况,既可以用递归实现,也可以用迭代实现,贪心选择则用户解决具有贪心选择性质的一类问题,既可以用递归实现,也可以用迭代实现,因为很多递归贪心算法都是尾递归,很容易改成迭代贪心算法。

本文出自 “我的黑客” 博客,请务必保留此出处http://1661518.blog.51cto.com/1651518/1396943

动态规划在算法中的实践 为了提高算法的效率,动态规划是在算法实践中经常使用的一个思想,有些问题会非常适合使用动态规划的思想来设计算法。本文将借助LeetCode上的一些例子,来讲解和说明动态规划在算法案例中的一些实践。 阅读详情

相关推荐

《算法设计与分析基础》读书笔记

一、算法与问题 算法是解决问题的一系列步骤; 理解问题,设计算法的一般过程: 二、蛮力法 蛮力法是一种简单直观的解决问题的办法,常常直接基于问题的描述和所涉及的概念。蛮力法所能解决的问题域也是最广的,但是效率往往不高; 使用蛮力法的算法有: 1、冒泡排序,选择排序 2,、顺序匹配 3、穷举法 三、分治法 分治法设计步骤: 1、将问题实例划分为同一问题的较小的实

tingfeng96的专栏 3516

分治策略、动态规划、贪婪选择以及递归之间的关系与区别(-)

在很多算法书中都是把贪婪选择即贪心算法排在第一个讲述,继而再讨论分治策略和动态规划。其实,分治策略才是最基础的,动态规划、贪婪选择可以说是建立在其基础上的(算法导论中就按照分治策略、动态规划、贪婪选择的顺序来讲的)。那分之策略、动态规划、贪婪选择以及递归之间到底有啥联系与区别呢?1、分治策略(Divide and Conquer) 将原问题分解为若干个规模较小但类似于原...

weixin_33907511的博客 454

关于ADS重新安装失败的解决方案

ads卸载安装license被锁无法修改导致安装最后没有证书

weixin_47103290的博客 9701

分治策略(3篇)之贪婪选择

 第三篇:分治法之贪婪选择 目的:     本篇博客并不具体的讨论某一个算法,而是将同类型的问题集中展示,从而对分治法有       更进一步的认识。 目录:     1)问题1:部分背包问题     2)问题2:找零钱问题     3)问题3:教室规划问题     4)问题4:最小生成树问题     5)问题5:最优二叉树问题   问题1:部分背包问题(最大)     ...

JThirteen的专栏 1269

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法

beyond951的博客 7333

100G SR4 光模块设计

目前100G SR4 光模块主要采用COB 封装技术,在光电芯片键合(bonding)阶段,首先使用银胶将光芯片、电芯片精准固定在电路板规定位置上,该工序即为元件键合(die bonding);然后采用打线机进行金线键合(wire bonding),完成光模块内部的电气连接。在光路耦合阶段,采用8路阵列透镜组完成光路90°弯折及聚焦,并采用有源耦合的工艺进行光路的最终确认,该设计方案工艺简单、高效,借助全自动贴片机、打线机和耦合台就可实现100G SR4 光模块的大批量生产。

Flyin_Group的博客 1372

贪婪算法(Greedy Algorithms)

文章目录一,什么是贪婪算法二,最短路径三,使用贪婪解题策略的演算法3.1 活动选择问题3.2 贪婪选择(Greedy options)3.3 将动态规划解转化为贪婪解 一,什么是贪婪算法 解决最简化问题的演算法,其解题过程可看成是由一连串的决策步骤所组成,而每一步骤都有一组选择要选定。 贪婪演算法的特性是 每一次选择都采取区域最佳接(locally optimal solution),而透过每一个区域最佳解最后综合成为全域最佳解(globally optimal solution)从而将问题解决 一个贪婪

壮壮不太胖的学习笔记 1万+

一文详解声码器

声码器(Vocoder)是语音信号处理领域的核心技术,其本质是通过“分析 - 参数化 - 合成” 的闭环流程,实现语音的高效编码、转换或生成。它不仅是早期语音通信的关键工具,更是现代 AI 语音技术(如 TTS、语音转换)的核心组件。以下从原理、技术分类、关键模块、应用及发展趋势展开详细解析。

weixin_41413777的博客 1351

窥探贪心算法:从贪婪到最优,解密最佳选择之道

贪心算法是一种简单而强大的算法思想,常用于解决最优化问题。它的核心思想是在每一步选择中,都采取当前情况下最优的选择,而不考虑全局的最优解。贪心算法在很多实际问题中都有广泛的应用。例如,找零钱问题、任务调度、背包问题等。贪心算法通常适用于满足贪心选择性质和最优子结构性质的问题。

DevCorner的Pro技术博客 1189

用Virtuoso和Abstract完成gds2lef

需要用到的工具有virtuoso和abstract。 数模混合的项目通常需要模拟完成模块设计,把接去数字的pin打上label(text),数字的floorplan才能正式开始。 如果只需要简单的数字PR boundary和pin点位置,那么只使用virtuoso就够了,还想把模拟版图都转成lef就要用到abstract工具。 1.PR boundary+pin 1)在virtuoso中打开layout a) Gui操作: Create->P&R Objects->

m0_61544122的博客 8738

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 964

五大经典算法(贪婪、动态规划、分治、回溯、分支限界法)及其联系和比较

一、贪心法 贪心算法的定义: 贪心算法(也叫贪婪算法)是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到全局最优解,得到的是局部最优解,关键是贪心策略的选择,不同的贪婪策略会导致得到差异非常大的结果。选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。 解题的一般...

vivian_ll的博客 2万+

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1423

递推与递归,分治法、贪心、动态规划的区别

递推与递归,分治法、贪心、动态规划的区别动态规划 简介:贪心法 简介:动态规划法 与 分治法 比较:贪心法 与 动态规划法 比较:递推 和 递归 区别: 动态规划 简介: 动态规划(Dynamic Programming, DP) : 是一种用来解决一类 最优化问题 的算法思想。简单来说,动态规划将一个 复杂的问题分解成若干个子问题,通过综合子问题的最优解来得到原问题的最优解。需要注意的是,动态规...

weixin_40268470的博客 1850

Python编程基础05:运算符与表达式

文章目录一、算术运算符1、分类说明表2、注意事项3、案例演示任务1、计算成绩差与平均成绩课堂练习:编程处理带余除法。任务2、打印购物小票 运算符就是专门用于告诉程序执行特定运算或逻辑操作的符号。表达式是指由常量、变量和运算符组成的一个算式。编写程序对数据进行处理,其实处理就是对数据实施各种各样的运算,搞懂运算符与表达式是我们编写程序的基础性工作,本次讲课笔记通过案例讲解各种运算符的用法以及正确书写Python表达式的注意事项。 一、算术运算符 Python中的算术运算符就是用来处理四则运算的符号,也是

howard2005的专栏 3119

计算机控制技术及应用

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

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

分治算法介绍 分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)…… 分治法在每一层递归上都有三个步骤: 1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题 更多Jav

小男孩儿的博客 1330

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

使用切绳子问题详解分治法、动态规划法和贪婪算法

不多bb,直接上代码 /* *1. 以剑指Offer的切绳子问题为例,演示回溯法、动态规划法、贪婪算法的基本思想,以及它们之间的区别 */ public class Algorithms { public static void main(String[] args) { int lengthOfScope = 13; System.out.println("dynamicProgramingAlgorithm:" + dynamicProgramingAlgor

qq_41131223的博客 882

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

分治、动态规划、贪婪 之 算法分析

分治、动态规划、贪婪 之 算法分析 分治与动态规划都用到了递归的思想,但是对他们之间的区别在概念上一直比较模糊,今天附带贪婪选择稍微整理一下他们。 算法之道上说,标准分治、动态规划、贪婪选择称得上是孙子兵法的下、中、上策。标准分治虽然将大问题分解成小问题,但是每个小问题都需要解决,相当于逢城必攻实属下策;动态规划则聪明地发现,很多子问题都相同,那么重复的子问题可以不用重复计算,就是不...

weixin_30702413的博客 108

13算法策略总结与比较

算法策略间的比较 算法策略和算法是有区别的,它们是算法设计中的两个方面,算法策略是面向问题的,算法是面向实现的;但二者又是不可分的,首先是通过算法策略才找出解决问题的算法,其次对于用不同算法求解的问题算法策略是自然不同的。 “贪婪算法” 这些策略求解的是最简单的一类问题,或者说是对问题要求最严格的算法策略。“贪婪算法”解决这类问题是按一定顺序(从前向后或从后向前等)一定...

weixin_30359021的博客 825

分治,动态规划和贪婪算法

分治,动态规划和贪婪算法都是将大的问题分解成小的问题解决的方法,不同的是: 分治只是简单的将大的问题分解成小的问题,比如斐波那契数列的递归算法就是分治算法,他将求第n个斐波那契数列的问题分解成求第n-1个和n-2个的和,这个和继续使用递归算法求出。 动态规划也是将大的问题分解为小的问题,但是它一种解决又互相重叠的小的问题的算法,如果只是分解,这些小的问题有可能会重复计算,从而增加计算量,而

481

算法笔记:详细总结分治法,动态规划,贪心算法以及各算法典型例题

文章目录一,三种算法的基本思想分治法动态规划贪心算法二,三种算法的对比分治与动态规划。贪心与动态规划。三,三种算法的基本题型(不断更新中。。。)分治法动态规划贪心 一,三种算法的基本思想 分治法 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的问题,这些子问题互相独立且与原问题相同(所以可以递归,递归地解这些子问题,然后将各个子问题的解合并得到原问题的解。 动态规划 动态规划算法和分治法...

i6223671的博客 1795

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

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

⛄ 1721

关于动态规划和贪婪算法

最近想学点什么,所以就做了,先从动态规划开始吧。   下面是搬运的概念:   动态规划 (Dynamic Programic) 是计算机科学领域的一个概念,它是一种特殊的分治思想,利用它可以实现时间复杂度的优化。 Dynamic 动态,即会变化的 Programming 应理解为“表格法”合起来动态规划就是用一张可变的表格来存储运算结果 ——参考《算法导论》   顺便理一理和它相关的...

Kurapika47的博客 1007

贪心算法与动态规划概念解析及二者区别

1 贪心自顶向下求解,动态规划自底向上求解; 2 贪心最优解一定包含上一步的最优解,动态规划最优解不一定包含上一步的最优解; 3 贪心不能保证全局最优,动态规划(本质是穷举法)能保证全局最优; 4 贪心复杂度较低,动态规划复杂度较高;

sc179的博客 4644

算法:递归,动态规划,回溯,贪婪算法

系列文章: 回溯算法和动态规划,到底谁是谁爹?文末送书https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484852&idx=1&sn=85b50b8b0470bb4897e517955f4e5002&chksm=9bd7fbbcaca072aa75e2a241064a403fde1e579d57ab846cd8537a54253ceb2c8b93cc3bf38e&scene=21#wechat_red

fdsafwagdagadg6576的专栏 296

算法设计与分析-王晓东(第三版)简答题复习

第一章 算法引论 1.1 什么是算法?算法与程序有什么区别? 通俗地讲,算法是指解决问题的方法或过程。严格地讲,算法是满足下述性质的指令序列: (1)输入:有零个或多个外部量作为算法的输入; (2)输出:算法产生至少一个量作为输出; (3)确定性:组成算法的每条指令是清晰的、无歧义的; (4)有限性:算法中每条指令的执行次数有限,执行每条指令的时间也有限。 程序与算法不同。程序是算法用某种程序设计语言的具体实现。程序可以不满足算法的性质(4)即有限性。 1.2 如何评价一个算法的优劣? (1)正确性 能正确

一只快乐的小蒟蒻~ 3365
上一篇: 跳跃游戏(一,二)
下一篇: 从硬币找零问题:看分治/动态规划/贪心算法的区别与联系
NFMSR
博客等级 码龄11年 59粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值