分治法的基本思想_算法的基本设计方法

算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。算法常常含有重复的步骤和一些比较或逻辑判断,不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

e3028bcfd46f272a6895860712e61c1a.png

几个基本的算法设计方法

1、递归和递推

递归是设计和描述算法的一种有力的工具,由于它在复杂算法的描述中被经常采用,递归算法是把大问题分解成相对较小的问题的过程。而递推就是从小问题逐步推导出大问题的过程,利用问题本身所具有的一种递推关系求问题解的一种方法。无论递归还是递推,都应该有初始状态。

2、搜索、枚举及优化剪枝

搜索技术主要包括广度优先搜索和深度优先搜索。搜索在所有算法中既是最简单也是最复杂的算法。说它简单,是因为算法本身并不复杂,实现容易。说它最复杂,是因为要对搜索的范围进行一定的控制,不然就会出现超时等问题。

当其余算法都无法对问题进行求解时,搜索或许是唯一可用的方法。有时问题解空间相当庞大,完全遍历解空间是不现实的,此时需要充分发掘求解问题所包含的约束条件,在搜索过程中应用这些条件进行剪枝,从而减少搜索量。

3、动态规划(简称DP)

动态规划的特点是能够把很复杂的问题分解成一个个阶段来处理的递推方法,动态规划必须符合两个特点:无后效性(一个状态的抉择不会影响到更大问题的状态的抉择)及最优化原理(一个大问题的最优性必须建立在其子问题的最优性之上)。

动态规划法所采用的基本方法就是简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有用,把所有子问题的解存于该数组中。

4、贪心法

贪婪法是一种不追求最优解,只希望得到较为满意解的方法。其具体策略是并不从整体最优上加以考虑,而是选取某种意义下的局部最优解。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。当然使用贪心算法时,要使得到的结果也是整体最优的。

5、分治、构造等

分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。构造是指按照一定的规则结构学习,产生解决问题的方法。

任何一个可以用计算机求解的问题所需的计算时间都与其规模N有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。这两种算法都是在合理的分析题目后,通过一定的规律性推导,从而解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值