5 个牛逼的算法设计,你知道几个?

2023-05-26 0 594

✋点选“复试沟通交流”重新加入沟通交流群

1、共管法

基本概念:

将两个无法间接化解的大难题,拆分成一些体量较细的全然相同难题,以期主动出击,地方分权。

价值观思路

对两个体量为n的难题,若该问题能难地化解(比如体量n较细)则间接化解,不然将其降解为k个体量较细的子难题,那些子难题相互分立且与原难题方式全然相同,递回地解那些子难题,接着将科灰藓难题的解分拆获得原难题的解。

特点:

该难题的体量缩小到很大的某种程度就能难地化解该难题能降解为二个体量较细的全然相同难题,即该难题具有最优化周环物理性质。借助该难题降解出的子难题的解能分拆为该难题的解;该难题所降解出的各子难题是相互分立的,即子难题之间不包涵公用的岩室难题。

第二条特点是绝大多数难题都能满足用户的,即使难题的排序复杂某种程度通常是随著难题体量的减少而减少;

第三条特点是应用领域共管法的大前提它也是绝大多数难题能满足用户的,此特点充分反映了递回价值观的应用领域;

第三条特点是关键性,若想借助共管法全然依赖于难题与否具有第三条特点,假如具有了第二条和第三条特点,而不具有第三条特点,则能考量用自我中心法或静态吉莱。

第五条特点牵涉到共管法的组织工作效率,假如科灰藓难题是不分立的则共管太上洞做很多无谓的组织工作,多次重复地解公用的子难题,这时尽管需用共管法,但通常用静态吉莱良好。

基本步骤:

1 降解:将原难题降解为二个体量较细,相互分立,与原难题方式全然相同的子难题;

2 化解:若子难题规模较细而难被化解则间接解,不然递回地解各子难题

3 分拆:将各子难题的解分拆为原难题的解。

适用共管法求解的经典难题:

1)二分搜索2)大整数乘法3)Strassen矩阵乘法4)棋盘覆盖5)分拆排序6)快速排序7)线性时间选择8)最接近点对难题9)循环赛日程表10)汉诺塔

2、静态规划

基本概念:

每次决策依赖于当前状态,又随即引起状态的转移。两个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化化决策化解难题的过程就称为静态规划。

价值观思路:

将待求解的难题降解为二个子难题(阶段),按顺序求解子阶段,前一子难题的解,为后一子难题的求解提供了有用的信息。

在求解任一子难题时,列出各种可能的局部解,通过决策保留那些有可能达到最优化的局部解,丢弃其他局部解。

依次化解科灰藓难题,最后两个子难题就是初始难题的解。

特点:

能采用静态规划求解的难题的通常要具有3个物理性质:

(1) 最优化化原理:假如难题的最优化解所包涵的子难题的解也是最优化的,就称该难题具有最优化周环,即满足用户最优化化原理。

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

(3) 有重叠子难题:即子难题间是不分立的,两个子难题在下一阶段决策中可能被多次使用到。(该物理性质并不是静态规划适用的必要条件,但是假如没有这条物理性质,静态规划演算法同其他演算法相比就不具有优势)

基本步骤:

(1)分析最优化解的物理性质,并刻画其结构特点。

(2)递回的定义最优化解。

(3)以自底向上或自顶向下的记忆化方式(备忘录法)排序出最优化值 

(4)根据排序最优化值时获得的信息,构造难题的最优化解

适用静态规划求解的经典问题:

矩阵连乘,走金字塔最长公用子序列(LCS) ,最长递增子序列(LIS) ,凸多边形最优化三角剖分 ,背包难题 ,双调欧几里得旅行商难题

3、自我中心法

基本概念:

在对难题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优化上加以考量,他所做出的仅是在某种意义上的局部最优化解。

价值观思路:

自我中心演算法没有固定的演算法框架,演算法结构设计的关键性是自我中心思路的选择。必须注意的是,自我中心演算法不是对所有难题都能获得整体最优化解,选择的自我中心思路必须具有无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。所以对所采用的自我中心思路很大要仔细分析其与否满足用户无后效性。

基本步骤:

建立数学模型来描述难题。

把求解的难题分成若干个子难题。

对每一子难题求解,获得子难题的局部最优化解。

把子难题的解局部最优化解合成原来解难题的两个解。

适用自我中心法求解的经典难题:

活动选择难题,钱币找零难题,再论背包难题,小船过河难题,区间覆盖难题,销售比赛,Huffman编码,Dijkstra演算法(求解最短路径),最小生成树演算法

4、回溯法

基本概念:

回溯演算法实际上两个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找难题的解,当发现已不满足用户求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。

但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足用户回溯条件的某个状态的点称为“回溯点”。

很多复杂的,体量较大的难题都能使用回溯法,有“通用解题方法”的美称。

价值观思路:

在包涵难题的所有解的解空间树中,按照深度优先搜索的思路,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点与否包涵难题的解,假如包涵,就从该结点出发继续探索下去,假如该结点不包涵难题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索演算法)。若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。

特点:

(1)针对所给难题,确定难题的解空间:首先应明确定义难题的解空间,难题的解空间应至少包涵难题的两个(最优化)解。

(2)确定结点的扩展搜索规则

(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

适用回溯法求解的经典难题:

八皇后难题,图的着色难题,装载难题,批处理作业调度难题,再再论背包难题,最大团难题,连续邮资难题,符号三角形难题

5、分支限界法

概述:

类似于回溯法,也是一种在难题的解空间树T上搜索难题解的演算法。但在通常情况下,分支限界法与回溯法的求解目标不同。

回溯法的求解目标是找出T中满足用户约束条件的所有解,而分支限界法的求解目标则是找出满足用户约束条件的两个解,或是在满足用户约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优化解。

思路:

在扩展结点处,先生成其所有的儿子结点(分支),接着再从当前的活结点表中选择下两个扩展对点。为了有效地选择下一扩展结点,以加速搜索的进程,在每一活结点处,排序两个函数值(限界),并根据那些已排序出的函数值,从当前活结点表中选择两个最有利的结点作为扩展结点,使搜索朝着解空间树上有最优化解的分支推进,以期尽快地找出两个最优化解。

与回溯法的区别:

回溯法:【方式不同】深度优先搜索堆栈活结点的所有可行子结点被遍历后才被从栈中弹出找出满足用户约束条件的所有解【目标不同】。

分支限界法:【方式不同】广度优先或最小消耗优先搜索队列、优先队列每个结点只有一次成为活结点的机会找出满足用户约束条件的两个解或特定意义下的最优化解【目标不同】。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/ght886/article/details/80289142

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务