Java常用算法手册(第3版)
上QQ阅读APP看书,第一时间看更新

3.2 穷举算法思想

穷举算法(Exhaustive Attack method)是最简单的一种算法,其依赖于计算机的强大计算能力,来穷尽每一种可能的情况,从而达到求解问题的目的。穷举算法效率并不高,但是适合于一些没有明显规律可循的场合。

3.2.1 穷举算法基本思想

穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下:

(1)对于一种可能的情况,计算其结果。

(2)判断结果是否满足要求,如果不满足则执行第(1)步来搜索下一个可能的情况;如果满足要求,则表示寻找到一个正确的答案。

在使用穷举算法时,需要明确问题的答案的范围,这样才可以在指定范围内搜索答案。指定范围之后,就可以使用循环语句和条件判断语句逐步验证候选答案的正确性,从而得到需要的正确答案。

3.2.2 穷举算法实例

穷举算法是最基本的算法思想,下面通过一个简单的例子来分析穷举算法的应用。鸡兔同笼问题最早记载于1500年前的《孙子算经》,这是我国古代一个非常有名的问题。鸡兔同笼的原文如下:

今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?

这个问题的大致意思是:在一个笼子里关着若干只鸡和若干只兔,从上面数共有35个头;从下面数共有94只脚。问笼中鸡和兔的数量各是多少?

1.穷举算法

上述问题需要计算鸡的数量和兔的数量,通过分析可以知道鸡的数量应该为0~35之间的数。这样,可以使用穷举法来逐个判断是否符合,从而搜索答案。

采用穷举算法求解鸡兔同笼问题的程序代码示例如下:

在上述代码中,输入参数head为笼中头的个数,输入参数foot为笼中脚的个数,chicken为保存鸡的数量的变量,rabbit为保存兔的数量的变量。该方法循环改变鸡的个数,然后判断是否满足脚的个数条件,当搜索到符合条件的答案后,返回1;否则返回0。

2.穷举算法求解鸡兔同笼问题

学习了前面的穷举法求解鸡兔同笼问题的算法,下面给出完整的穷举法求解鸡兔同笼问题的程序代码。代码示例如下:

【程序3-1】

在该程序中,首先由用户输入头的数量和脚的数量,然后调用穷举法求解鸡兔同笼问题的方法,最后输出求解的结果。

执行该程序,按照题目的要求输入数据,执行结果如图3-1所示。可知,笼中有23只鸡和12只兔子。

图3-1 执行结果