算法的设计方式

1.贪心算法

贪心算法(又称贪婪算法)是指在对问题求解时,从问题的某一个初始解出发,总是做出在当前看来最好的选择,当达到某算法中的某一步不能再继续前进时,算法停止。这时,就得到了问题的一个解,但不能保证求得的最后解是最优的。也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题能产生整体最优解或者是整体最优解的近似解。例如:求最小生成树的prim算法和kruskal算法都是经典的贪心算法。

2.分治算法

当求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。分治法解决的一般步骤:1.分解,将要解决的问题划分成若干规模较小的同类问题。2.求解,当子问题划分得足够小时,用较简单的方法解决。3.合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。例如,汉诺塔问题是分治算法的一个经典例子。

3.动态规划

动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。


4.回溯法 

回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当搜索到某一步时,发现原来选择并不优或者达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯法”。例如,八皇后问题是能用回溯法解决的一个经典问题。该问题是19世纪著名的数学家高斯于1950年提出:在8*8格的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

5.概率算法


你可能感兴趣的:(算法)