(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用来生成随机数。