• 常见的算法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用来生成随机数。

  • 相关阅读:
    【CF1027C】Minimum Value Rectangle(贪心,数学)
    【CF1027B】Numbers on the Chessboard(数学)
    【CF1027A】Palindromic Twist(模拟)
    【CF1023C】Bracket Subsequence(模拟)
    【CF1023B】Pair of Toys(解方程)
    【CF1023A】Single Wildcard Pattern Matching(模拟)
    【CF1020C】Elections(贪心)
    【CF1020B】Badge(模拟)
    【CF1020A】New Building for SIS(签到)
    【CF1017D】The Wu(状压前缀和)
  • 原文地址:https://www.cnblogs.com/cliuwei/p/4699957.html
Copyright © 2020-2023  润新知