算法与数据结构回顾篇(1):算法分析方法

算法分析类型

算法分析类型包括分治法、动态规划法、回溯法、分支界限法和贪心法,接下来我们将对这些算法分析方法一一回顾学习。

分治法

方法原理:

核心思想在于‘分而治之’,原理是首先将一个复杂混合的问题拆解为两个或多个相同的子问题,然后将子问题依然用分治法进行处理,知道子问题可以直接求解,最终按照问题的拆解顺序,从子问题开始逐步将问题合并为一个大的子问题,层层向上,最后得到该实际问题的解。

适用条件:

(1)子问题相互独立

(2)原问题在小规模情况下成立,有解

(3)拆分得到子问题的解之间可以合并

实现步骤:

(1)分解问题;(2)解决子问题;(3)合并解

分治法常常使用递归的方式进行求解,比如二分查找、归并排序、快速排序等等

动态规划法

原理:

一个从初始状态开始计算结果,后续的计算都依赖于前一个计算结果的状态,最终获得解的过程。常用于求解重叠子问题和最优子结构问题,动态规划可以将重复计算简化为计算一次就放入到结果表中,在下次计算时就直接从结果表中查询。

适用条件:

(1)具有最优子结构性质:表示一个问题的最优解所包含的所有问题的解也是最优的

(2)子问题重叠性质:表示把一个大的问题拆解为若干的子问题过程中,在不同的问题中会重复计算某些问题

实现步骤:

(1)划分问题

(2)确定状态和状态变量

(3)确定状态转移过程

(4)寻找终止条件

动态规划可以解决背包问题、求解最长公共子序列、维特比算法等问题

回溯法

原理:

回溯的含义是当发现当前已经不满足求解的条件时,采用‘回退’的方式,尝试其他的方法对问题求解,也是一种不断枚举的过程。然而这种尝试是有选择性的,选择当前条件与目标的最优匹配进行尝试,失败回退到上一步,常常是深度优先的方式进行尝试。

实现步骤:

(1)确定存在最优解的解空间,

(2)确定回溯的尝试规则与路径寻找的方式

分支界限法

原理:

相比于回溯法的深度优先的方式,分支界限法使用的是广度优先或最小代价的方式对问题求解。首先通过在路径选择处,生成其所有的下一分支,计算每个分支的某个条件限定值(分支的界限),然后从分支中选出某一节点作为最优解的分支下一起始点。

分支界限的核心思想是确定分支的上下界,并移除不满足条件的分支。

分支选择方式 :

(1)FIFO:先进先出

(2)最小代价:从当前分支中选择代价最小的,是基于优先队列的方式

鉴于回溯法和分支界限法的类似性,这里举个例子加深区分它们:

例如,将一堆质量相等的货物放到两辆货车中,确定最优的装载方案?

回溯法的思路是首先尽可能的使第一辆货车装满,然后将剩下的货物装载到第二辆车

分支界限法可能选择最小的代价(每辆车剩余的装载量),因此会在两辆车之间交替添加货物

贪心法

原理:

所谓贪心,是当前求解的过程在当前条件下是最好的选择,属于局部最优解,所以贪心算法适用于可以通过局部最优解获得全局最优解的问题

实现步骤:

(1)数学模型描述问题

(2)拆解问题,求解子问题的局部最优解

(3)合并局部最优解

贪心策略的选择是求解此类问题的关键所在,例如10个盒子中有很对数字,要求所有盒子的最小值,那么只需要将10个盒子中的每个盒子的最小值取出然后找出原问题的最小值即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值