现代算法归纳

前言:

       我的成果在这里给大家展示,自己总结的,要是你觉得我的东西是rubbish的话大可不看哈。。。。我就一菜鸟,想知道更加详细的,就找大师去吧。


传统算法中,这里包含了9中算法:枚举法、局部搜索法、线性规划法、分治法、贪心法、动态规划 法、回溯法、分支定界法及最后讲的A*算法。在生活中有很大用途的解决问题的方法。

分诉:

1)        枚举法(穷举法)就是把所有的可能都一一列举出来,也就是把整个样本空间列出来。然后在进行比较,得到适合或者想要的答案。

优点:一定能找到解决方案且打出的答案一定有正确的,思路也比较简单。

缺点:会做很多无用功,类似于不需要的解或者不正确的解都会被列出来。运算量比较大,效率低,占空间。

在一般问题规模不是很大的情况下,都是可以考虑枚举型的。

 
   

2)       局部搜索法:在搜索空间先找一个解,把它定义成当前的解,在它的临近点中找另一个解并和当前的解进行比较,若是由于当前解得话,则替换当前解,否者就放弃新解,再找下一个新解。重复,直到找不到新解为止。

优点:a,简单、通用、有效。在优化模型中,只要找相邻点就能用局部搜索法。

缺点:对解空间进行按邻域搜索,虽然是很通用,但是依赖于领域空间啊的结构和初解的选举,及进行搜索的规则,并不能保证全局的最优化。

 

3)        线性规划法:我觉得是应用最多的一个了。比如说有一个项目有N多个变量,这些变量在满足M多个约束后要达到最优解(极值)。首先,确定目标变量、找到约束条件、找目标函数、找最优解。它用来求最优解(极值),找出多变量的一组解。应为函数要求是线性函数,约束也是线性的,所以一般来说极值都在边界上。

一大特点:很直观,实用,满足条件即为解。但是不好的一面是,极值不一定存在,很可能出现这种情况,有N个满足条件的解方案,但是最优解就是找不到,导致找不到解。

应用领域:比如说一定量的原料,在生产成本和盈利的约束下,如何实现利润的最大化;运输时走哪条路线,在油费和关卡费的约束下花费最少;及一些人力物力最大化的分配时;布局问题上(例:面积最大)都是很好的解决方法。

 
   
 

4)        分治法:将一个问题规模N分解成M个小规模的子问题,要求K个子问题相互独立答那性质与原问题规模性质相同。分别求出各个子问题的解后在联系在一起成为原问题的解。

特点:M个子问题是原问题的一个划分,当子问题小到一定的规模时就很容易的解决;原问题N可以有多种不同结构的M个子问题;其中关键的是分解出来的子问题的解可以合并为该问题的解。可以在求最大最小值的时候适用分治法。

 
   
 


5)       贪心法:是一种不要求达到最好,只要有解就OK的算法。常把当前情况为基础做最优选着,不考虑整体情况,是局部的最优解。通过N次的贪心选择得到整体的解方案。(所以贪婪法不要回溯)

优点:它可以很快找到解方案,因为它找到第一个结束搜索了。

缺点:不一定能到到整体的最优解。应用:背包旅游问题。

 
   
 


6)       动态规划法:将求解问题分解成N个相互重叠的子问题,每个字问题对应于一个决策过程,分析问题是否满足最优解,即递推公式,来实现动态规划过程。应用动态规划法的条件:最优子结构、以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。当然,在动态规划法中,由于存在重叠的子问题,于是会用一个基本表或者是存储空间把所有子问题的解存在来(解决重复求解子问题的问题)。

特点:在任一个阶段,最佳的决策序列和该阶段以前的决策无关;递推的找出最佳决策的方案。

例子:比如说找矩阵连乘的最优方案、背包问题等等。

 
   
 


7)       回溯法:一种选优搜索法,按选优的条件向前搜索,以达到目标。但探索到某一不是,发现原先的选择并不优或者说达不到目标是,就会退回上一步重新选择另外的路继续搜索。在数据结构中叫做深度优先搜索

关键:就是回溯的过程。应用:它主要用来解决一些要经过许多步骤才能完成的,而每个步骤都有若干种可能的分支,当然,需要遵守一些规则来进行。

例子:利用栈的特点来进行的迷宫求解的问题、还有经典的八皇后的问题……

 

8)       分支定界法:  按照定好的界将解进行分支,构成一棵解空间树,但是会按照定好的限界函数进行剪枝,把那些没有后继结点的解删除。目的是为了减少对解空间树的搜索。说到搜索,在数据结构中,分支定界法采用的是广度优先搜索。至于限界函数是用上届还是下届那就要具体问题具体分析了。

分支定界法的关键:确定正确的限界函数,要能达到剪枝的作用。

应用:比如解决旅行商问题的一种方法。

 
   
 


9)       A*算法(Astart):评估函数,由已实现的的代价+未来的估计代价。按照代价的升序来选结点。用来求出最低代价的算法。当估计值h(n)<=h*(n)(其中h*(n)为是实际代价值)时,这时的搜索非为会比较大、效率低,但是能得到最优解;否者,不保证有最优解。


  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值