网站建设启示,交友软件网站建设,河南焦作有做网站开发的公司吗,创建目录wordpress上文讲到算法的概念、复杂度#xff0c;本文给大家介绍具体的算法思想#xff0c;让大家对算法设计理念有个认识#xff0c;后续再分别介绍各种算法。
算法思想
算法是解决问题的一种思想和方法#xff0c;其基本思想是将一个复杂问题分解为多个简单的子问题#xff0c;…上文讲到算法的概念、复杂度本文给大家介绍具体的算法思想让大家对算法设计理念有个认识后续再分别介绍各种算法。
算法思想
算法是解决问题的一种思想和方法其基本思想是将一个复杂问题分解为多个简单的子问题然后通过一定的逻辑和操作方法将这些子问题的解组合成原问题的解。
分而治之
把一个复杂的问题分成两个或更多的相同或相似的子问题再把子问题分成更小的子问题直到最后子问题小到可以简单的直接求解原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础如排序算法(快速排序归并排序)傅立叶变换(快速傅立叶变换)大数据中的MR现实中如汉诺塔游戏。
分治法对问题有一定的要求
该问题缩小到一定程度后就可以轻松解决问题具有可拆解性不是一团无法拆分的乱麻拆解后的答案具有可合并性。能组装成最终结果拆解的子问题要相互独立互相之间不存在或者很少有依赖关系
动态规划
基本思想与分治法类似也是将待求解的问题分解为若干个子问题阶段按顺序求解子阶段前一子问题的解为后一子问题的求解提供了有用的信息。在求解任一子问题时列出各种可能的局部解通过决策保留那些有可能达到最优的局部解丢弃其他。依次解决各子问题最后一个子问题就是初始问题的解。
与分治法最大的不同在于分治法的思想是并发动态规划的思想是分步。该方法经分解后得到的子问题往往不是互相独立的其下一个子阶段的求解往往是建立在上一个子阶段的解的基础上。动态规划算法同样有一定的适用性场景要求
最优化解拆解后的子阶段具备最优化解且该最优化解与追踪答案方向一致流程向前无后效性上一阶段的解决方案一旦确定状态就确定只会影响下一步而不会反向影响阶段关联上下阶段不是独立的上一阶段会对下一阶段的行动提供决策性指导。这不是必须的但是如果具备该特征动态规划算法的意义才能更大的得到体现
贪心算法
同样对问题要求作出拆解但是每一步以当前局部为目标求得该局部的最优解。那么最终问题解决时得到完整的最优解。也就是说在对问题求解时总是做出在当前看来是最好的选择而不去从整体最优上加以考虑。从这一角度来讲该算法具有一定的场景局限性。
要求问题可拆解并且拆解后每一步的状态无后效性与动态规划算法类似要求问题每一步的局部最优与整体最优解方向一致。至少会导向正确的主方向。
回溯算法
回溯算法实际上是一个类似枚举的搜索尝试过程在每一步的问题下列举可能的解决方式。选择某个方案往深度探究寻找问题的解当发现已不满足求解条件或深度达到一定数量时就返回尝试别的路径。回溯法一般适用于比较复杂的规模较大的问题。有“通用解题法”之称。
问题的解决方案具备可列举性数量有限界定回溯点的深度。达到一定程度后折返
分支限界
与回溯法类似也是一种在空间上枚举寻找最优解的方式。但是回溯法策略为深度优先。分支法为广度优先。分支法一般找到所有相邻结点先采取淘汰策略抛弃不满足约束条件的结点其余结点加入活结点表。然后从存活表中选择一个结点作为下一个操作对象