算法的设计基本方法的理解

  1. 算法设计基本方法有什么好处?算法

    了解常见的算法设计方法以及它们之间的区别,有利于构建算法思惟的广度,有充分的理论知识。固然,若是算法思惟的深度再好的话,未来你见识的算法越多,天下之间全部的算法,都会融入到你的理论和实践当中。dom

  2. 常见算法分类ide

    穷举法(暴力法,蛮力法)它的基本思想是分别列出全部各类可能解,测试其是否知足条件,如果则输出。函数

    回溯法:有通用的解题法之称,是一种将问题的全部解组织的仅仅有条,能避免没必要要的穷举搜索,采用的思惟是,深度遍历,中间再加两个约束条件和限界函数,不行就回溯,转其余结点,继续深度优先。测试

    递推法:分为两种,一种是顺推,另一种是逆推,都是根据已知条件,推导出未知条件。优化

    迭代法展转法):是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法,即一次性解决问题。迭代法又分为精确迭代和近似迭代。“二分法”和“牛顿迭代法”属于近似迭代法。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合作重复性操做的特色,让计算机对一组指令(或必定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。迭代法经常用于求方程或方程组近似根,在设计迭代式时,要特别注意收敛问题,对于非收敛的式子不能用做迭代式。spa

        递归法:是指在定义自身的同时又出现了对自身的调用,在一个函数内直接调用本身,则称为直递归函数,若是函数通过一系列调用的语句,经过其余函数间接调用本身,则其称为间接递归。不断的经过将一个大问题,转化为一个规模小的问题,将规模小的问题,在转换成更规模小的问题,递归有时候能够理解成嵌套中的嵌套。小问题,解决好了,向上返回结果,一般在递归的时候,有递归和非递归说法,非递归须要借助栈。递归法是不少其余高级算法的基础。设计

        分治法就是把一个复杂的问题分红两个或更多的相同或类似的子问题,再把子问题分红更小的子问题……直到最后子问题能够简单的直接求解,原问题的解即子问题的解的合并。orm

        贪婪法:老是作出在当前看来最好的选择,也就是说,贪心算法并不从总体最优考虑,它所作的选择只是在某种意义上的局部最优选择。固然,但愿贪心算法获得的最终结果也是总体最优的,虽然贪心算法不能对全部问题获得总体最优解,但对许多问题能产生总体最优解。递归

        动态规划法:动态规划法与分治法和回溯法都有某些相似,也是基于问题的划分解决(多步决策,递增生成子解)的。可是在递增生成子解的过程当中,力图朝最优方向进行,并且也不回溯。所以动态规划法效率更高,且经常使用来求最优解,而不像回溯法那样可直接求全解。

只从过程来看,能够简单地把动态规划法看作是回溯法去掉了回溯(这个能够容易理解)或者严格迭代分治法。这个怎么理解,也就是说,把一个问题的解决分红多个步骤(分治法),每一个步骤都是在前面的步骤基础上,获得一个新的子解,字解随着步骤的进行,进而逐步扩大,最后一步获得完整的解。

       模拟法:一般都是利用随机函数来模拟天然界中发生的不可预测的状况。Java中random,c中srand

3.常见算法之间的区别

    1)分治法和动态规划算法的区别

    动态规划算法在遇到重叠子问题显示出了至关大的优点,若是这个问题没有重叠子问题,能够考虑分治法,若是有重叠子问题,动态规划算法效率更高。

   2)贪心发和动态规划法的区别

     我的感受贪心发是动态规划算法的一个特例,都具备最优子结构特征。

   3)回溯法和穷举法的区别

      都是生成解空间,回溯法通常主要用来解决三类问题(子集问题,排列问题,组合问题)回溯法,多了约束条件和限界条件,所以避免了无谓的搜索。

  4)回溯法和递归法的区别?

 

  5)动态规划和贪心算法以及回溯法的区别

,这些方法所要解决的问题,通常都是决策问题。而贪心法通常是来求解最优问题的,并且他们其实都是在对问题的状态空间树进行搜索,在这个状态空间树中搜索最佳的路径以便求出最优策略。而贪心法是从上到下只进行深度搜索的,也就是说它是一口气走到黑的,一口气吃成胖子的,它的代价取决于子问题的数目,也就是树的高度,每次在当前问题的状态上做出的选择都是1,也就是说,它实际上是不进行广度搜索的,这也形成了它的一个缺点:它得出的解不必定是最优解,颇有多是近似最优解。

动态规划法在最优子结构的前提下,从状态空间树的叶子节点开始向上进行搜索,而且在每一步都根据叶子节点的当前问题的情况做出选择,从而做出最优决策,因此她的代价就是子问题的个数和可选择的数目,因此它求出的解必定是最优解。

相比回溯法它它去掉了回溯的过程,于是效率较高。

4.解决问题的思路

 1.若是这个问题很差求得,就将其转换成另一个问题,好比数学当中的每每求最优化问题,将其转化为对偶问题,计算机中,交通灯问题,将其转换成图的找色问题。最短路径问题,转换成借电脑问题;你要班级中借5台电脑,你确定将你关系好的人,排个序,而后从最好的人去接,第二步就是将你第二关系好的人,和让你第一关系好多人帮你借电脑,第三就是让你第三关系好的人和你第二关系好的人和他关系好的人以及他的第二关系好的人去向他第一个关系好的人借电脑。

2.若是这个问题能够容易解,那就可使用不少种方法去解。

相关文章
相关标签/搜索