常见的算法1

1):枚举法

     枚举法的本质是:从所有的待选答案选出正确的解。

  (1):可预先确定候选答案的数量。

      (2):候选答案在求解之前必须有一个确定的集合。  

        for (i=x1;i <= x2;i ++)

    for (j=y1;j <= y2;j ++)

      for (k=z1;k<= z2;k ++)

        if (i,j,k,满足验证条件)

          printf("输出答案!");

       例子:数字的填写

(2):递归算法

 本质是:一种直接或间接的调用自身的算法。

  int face(n)

  {

    if (n <= 1)

      return 1;

    else

      return n*face(n-1);

  } 

(3):分治算法的思想:

     对于一个规模为N的问题,如果这问题可以容易的解决(规模小),则直接解决,否则

 将其分成N个相对较少的问题来解决。这些问题相互独立,并且与原问题形式相同,递归的

解决这些子问题,再将各个子问题的解合并得到原问题的解。

(4):贪婪算法的思想:

     从问题的莫个初始解出发逐步逼近给定的目标,以尽可能快地求得更好得解,当达到算法中的末一步不能再继续前进时,就停止算法,给出近似解。

    例子:从问题的初始值出发:

     while 是否达到(或近似达到)设定总目标

        求出可行解的一个解元素;

      由所有解元素组合成问题的一个可行解。

(5):试探法算法思想

     基本思想:为了求得问题的解,先选择摸一种可能情况进行试探,在试探过程中,一旦发现原来的选择的假设情况是错误的,就退回一步重新选择,继续向前试探,如此反复进行,直至得到解或证明无解。  

    例子:走迷宫

      对解集合中的各解进行试探

         {

        if(满足条件)

        {

           保存结果

           if (完成集合中所有解的试探)

              输出解

            else

              重复本过程进行下一步的试探(递归调用本函数)

         }else

              恢复至上一步保存结果之前的状态,进行另一步试探(递归调用本函数)

      }

(6):模拟算法:

      使用随机函数来模拟自然界中发生的不可预测情况。C语言中使用srand()函数和rand()函数来生成随机数。srand()函数用来初始化随机数发生器,而rand用来生成随机数。

原文地址:https://www.cnblogs.com/cliuwei/p/4699957.html